6831977 2001-08-01 22:57 -0400 /126 rader/ Michal Zalewski <lcamtuf@gis.net> Sänt av: joel@lysator.liu.se Importerad: 2001-08-02 08:17 av Brevbäraren Extern mottagare: Darren Reed <avalon@coombs.anu.edu.au> Extern kopiemottagare: bugtraq@securityfocus.com Mottagare: Bugtraq (import) <18588> Kommentar till text 6831975 av Darren Reed <avalon@coombs.anu.edu.au> Ärende: Re: [RAZOR] Linux kernel IP masquerading vulnerability (_actual_ ------------------------------------------------------------ From: Michal Zalewski <lcamtuf@gis.net> To: Darren Reed <avalon@coombs.anu.edu.au> Cc: bugtraq@securityfocus.com Message-ID: <Pine.LNX.4.21.0108012225040.747-100000@nimue.bos.bindview.com> On Thu, 2 Aug 2001, Darren Reed wrote: > Say what? What do FTP numeric responses have to do with IRC and an IRC > proxy? Firewall thinks this is IRC protocol connection, HTTP client thinks it is FTP connection. That's it. Since HTTP clients like Netscape Navigator do not really care about any standards, they tend to do things like ignoring first line from the server no matter how it looks like. This can be used to trick some proxies - and yes, this can be defeated, as well. Things like this just make protocol tracking more tricky - since HTTP client might send commands that 'look legitimate', and might consider received responses valid FTP responses, even if they are not. It is pretty difficult to predict how all 'major' HTTP browsers or HTML-capable MUAs will behave - every single one of them is different, and usually has brain-damaged FTP implementation ;> > Also, IRC servers generally don't send anything unless an error is > generated, a PING is sent or registration is complete. Untrue. Typical EFNet server: $ nc 217.17.33.10 6667 NOTICE AUTH :*** Looking up your hostname... NOTICE AUTH :*** Found your hostname, cached NOTICE AUTH :*** Checking Ident NOTICE AUTH :*** Got Ident response > Upto this point you've not shown me anything that a well written proxy > cannot detect and reject. Actually, since HTTP client behavior vary, and is far from being standarized or RFC-compliant, I believe it is at least difficult to propose one, good way of handling stuff like that, in general. There are some protocol-related checks you might apply and hope that would work (e.g. dropping connection if commands like 'SYST' are sent to something we believe is an IRC server, not FTP server), but it is protocol-dependent. Or client dependent, in other cases. Actually, much better way to handle it, as suggested by Matt Power, is for the firewall to send PING with some secret value as a challenge to what we believe is IRC client at the very beginning, and to expect PONG response to assure we're talking to IRC client, not something blindly sending IRC-alike commands. The problem is that it is protocol-specific, and does not solve general problems of masquerading helpers (inability to determine and verify user's will ;), nor does not defend against Java applets. > At least the IPFilter ftp* proxy knows if it was in the middle of a > string when it reached the end of the packet and junks following text > upto the next \r\n in the next packet. By 'junking' you mean discarding, or just not parsing it, but forwarding? If discarding, I'm not really sure if that is reasonable - I can't use char-by-char mode tools, like Windows telnet client, to chat with ftp servers? If not parsing, ok. Next - what about long packets? HTTP client input-parsing buffer might be smaller than received data, and it might keep parsing one huge IRC protocol-alike response sent at the beginning for whole session. It ignores first portion, no matter how it looks like, and gets portions starting with '220 Ok...' or something like that... Of course! You can defend, you can check packet size, as well. But keep in mind what I was saying - I do not claim you _cannot_ do strict protocol verification to assure communication protocol validity and to detect attacks. I just think that's not the way, because it is neverending battle - and yet, at the end, there's Java applet that can connect to its 'home server', to port 6667 as well. So this is partial solution, hard to tell how accurate - and how many ways to abuse HTTP client FTP protocol implementation oddities are there - and I won't bet my life on it, even if applied to IMG tags only, and if we do not care about Java applets. > So where was I going with that...oh, that's right, your look-alike > ":server 255 user :You are welcome" should just be ignored Very interesting policy, since that's what many IRC servers send. > If you want to go to that extreme, there is nothing safe you can do. > The applet could sit there sending out PRIVMSG commands to a /dev/null > style server for every port from 1024 - 65535 (there's no requirement > on the part of DCC for the previous port to be connected before > another "connect to me " announcement is sent out). I don't see your point here. Why /dev/null-style server? The server might respond correctly, and it is not a big deal to implement valid Java applet IRC client. It can behave just like any IRC client, and the other end might be a valid IRC server. The only difference is that, at some given point, this IRC client sends evil DCC request. The only difference is that it sends something without user's will. And welcome, no matter how careful protocol inspection you perform, here we are, sending legitimate DCC request to remote server from protected network. Sad fact: 90% of people, if not more, have Java applets enabled. We described HTML tag abuse just because it sounds better, and demonstrates that "disabling Java" should not be the answer. But with careful protocol inspection, even if you can bet your life on its accuracy, which I wouldn't do, we are still vulnerable. > Even the original problem needed a bit of work to exploit. Whilst the > target string is: > > <IMG SRC="http://server:6667/^ADCC stuff^A"> > > you should at least have been required to get the correct IP address, > which when using NAT and a web proxy may not even be available to the > remote server. Still, you can't use static HTML here, unless javascript > can find out your IP#. Hmm, why you "can't use" it? If you consider 'massive' attack against vulnerable ip_masq_irc (or anything that buggy, w/o extact address matching), not targeted attack, you can just put a bunch of IMG tags with a bunch of possible addresses in private networks (usually 10.0.0.1 or 192.168.1.1 or something like that would work) - you'd have pretty neat success ratio. If you consider targeted attack, you probably can obtain this information one way or another (mail headers, or whatever - not always, but often). -- _____________________________________________________ Michal Zalewski [lcamtuf@bos.bindview.com] [security] [http://lcamtuf.coredump.cx] <=-=> bash$ :(){ :|:&};: =-=> Did you know that clones never use mirrors? <=-= (6831977) /Michal Zalewski <lcamtuf@gis.net>/(Ombruten)