PDA

Bekijk Volledige Versie : 3Com SuperStack 3 Firewall Content Filter Exploitable Via Telnet



05/03/03, 22:37
The following exploit presumably applies to all versions of the 3COM web
content filtering software, and possibly web filtering devices of other
makers.

Many businesses, schools, libraries, and other public places providing
Internet access to customers implement web content filters to minimalize
access to pornography, illegal software, racist literature, and so forth.
A local school district, for example, uses the 3COM SuperStack 3
firewall's filtering ability to weed out access to restricted websites.
When a user attempts to access a banned website, the filter appears to
check the HTTP request against a list of restricted sites and phrases. If
a match is found, the user is returned a notification that the requested
site has been blocked.

The weakness exploited by this vulnerability is that the 3COM filter
apparently does not reassemble fragmented packets before checking a
request against its filter list. This can be demonstrated in the
following example:

A user on the LAN being filtered wishes to view a blocked website. We'll
call it www.blockedsite.com (original, eh?). He opens his browser and
enters the address. Obviously, he is greeted with the 3COM "blocked site"
page.

Possessing excessive ambition today, our user decides to find a way around
the filter. After a short series of tests, he finds that he can connect
to the blocked site by telneting to port 80 of its domain or IP, and
manually craft his own HTTP request header:

C:\>telnet www.blockedsite.com 80

GET / HTTP/1.1
Host: www.blockedsite.com

Given the nature of Telnet, the request is sent to the server one
character at a time; obviously, the filter cannot examine packets with a
single character of valid data, so each packet makes it through with no
problem. The blocked server waits until it receives all packets, then
pieces them together and responds to the request. Incoming traffic isn't
monitored, so the user is easily able to receive the source code of the
page he requested via telnet.

Taking this trivial exploit a step further, an experienced hacker could
easily write a script or application to automate this entire process,
parsing the source for images and other embedded content where necessary.
This would result in a local copy of the requested site right on the
user's hard disk. In theory, one would only need to break apart key areas
of the HTTP request packet in order to fool the filter, rather than
sending every character individually.

Unfortunately, I do not have the necessary equipment at my disposal to
further test the exploit, although I know for a fact that it works, at
least on firewalls with basic filter configurations. I also have yet to
come up with a successful work-around for this bypass, as it occurs at a
very low level. If anyone has any ideas, I'm all ears. Thanks.

- Bit_Logic

Niels Bakker
05/03/03, 22:45
* bit_logic@s-mail.com [Wed 05 Mar 2003, 21:35 CET]:
[..]
> C:\>telnet www.blockedsite.com 80
>
> GET / HTTP/1.1
> Host: www.blockedsite.com
>
> Given the nature of Telnet, the request is sent to the server one
> character at a time; obviously, the filter cannot examine packets with a
> single character of valid data, so each packet makes it through with no

Actually, in these situations, telnet works line-based. That's also why
backspace works (modulo matching terminal emulator and stty settings).


> problem. The blocked server waits until it receives all packets, then
> pieces them together and responds to the request. Incoming traffic isn't
> monitored, so the user is easily able to receive the source code of the
> page he requested via telnet.

Does a filtering product exist that has not had this flaw in the past?


> Unfortunately, I do not have the necessary equipment at my disposal to
> further test the exploit, although I know for a fact that it works, at
> least on firewalls with basic filter configurations. I also have yet to
> come up with a successful work-around for this bypass, as it occurs at a
> very low level. If anyone has any ideas, I'm all ears. Thanks.

Force all HTTP traffic via a proxy that sends out its own HTTP requests
in one packet; don't try to solve social problems with technical
solutions; and above all, realise that filtering in this way is utterly
useless censorship.


-- Niels.

--
subvertise me

David G. Andersen
05/03/03, 23:03
On Tue, Mar 04, 2003 at 11:39:17PM -0000, bit_logic@s-mail.com quacked:
>
> The weakness exploited by this vulnerability is that the 3COM filter
> apparently does not reassemble fragmented packets before checking a
> [...]

> Taking this trivial exploit a step further, an experienced hacker could
> easily write a script or application to automate this entire process,
> parsing the source for images and other embedded content where necessary.
> This would result in a local copy of the requested site right on the
> user's hard disk. In theory, one would only need to break apart key areas
> of the HTTP request packet in order to fool the filter, rather than
> sending every character individually.
>
> Unfortunately, I do not have the necessary equipment at my disposal to
> further test the exploit, although I know for a fact that it works, at

a) Test with a program called 'fragrouter'. What you're describing
are TCP fragments, but it's likely the box doesn't reassemble IP
fragments either.

http://www.securityfocus.com/tools/176

b) "experienced hacker"? more like "slightly clueful kiddie":

route add default <foo> -mtu 50

Or if you want to be a bit more fancy, just write a proxy
in perl that does a character-by-character write() of the
outbound request. Trivial.

> least on firewalls with basic filter configurations. I also have yet to
> come up with a successful work-around for this bypass, as it occurs at a
> very low level. If anyone has any ideas, I'm all ears. Thanks.

a) use real filtering software (a transparent proxy)
b) don't bother, you can't win against the smart insiders
who want out.

-dave

--
work: dga@lcs.mit.edu me: dga@pobox.com
MIT Laboratory for Computer Science http://www.angio.net/
I do not accept unsolicited commercial email. Do not spam me.

der Mouse
06/03/03, 19:32
>> C:\>telnet www.blockedsite.com 80
>> GET / HTTP/1.1
>> Host: www.blockedsite.com

>> Given the nature of Telnet, the request is sent to the server one
>> character at a time;
> Actually, in these situations, telnet works line-based.

In those situations (where character-at-a-time has not been negotiated
on), telnet is _supposed_ to work line-based.

Unfortunately - see that "C:\>"? - most wintel telnets were written by
people who either didn't understand the standard or were incompetent to
follow it (or perhaps just couldn't be bothered? I dunno) and use
character-at-a-time mode even when it hasn't been negotiated on.

> That's also why backspace works (modulo matching terminal emulator
> and stty settings).

In wintel telnets, backspace often _doesn't_ work, because of exactly
that, though it may look like it when typing because the echo of the
0x08 octet (whichever end generates the echo) makes the cursor move
leftwards....

I know all this because I am server code wiz for a mud, and I've hacked
in kludges to work around some of the most egregious problems I've seen
in various telnets. (All the problematic telnets have come from an
infamous company based in Redmond, oddly enough.) Mercifully, one of
the other people who uses that mud (a) muds from Windows and (b) is
technically clued, an odd combination but one that's useful when
testing such things.)

/~\ The ASCII der Mouse
\ / Ribbon Campaign
X Against HTML mouse@rodents.montreal.qc.ca
/ \ Email! 7D C8 61 52 5D E7 2D 39 4E F1 31 3E E8 B3 27 4B