Re: ICMP pokes holes in firewalls...
In some mail from bugtraq@xxxxxxxxxxxxxxxx, sie said:
>
> It seems like a fairly obvious hole, but I could find no mention of
> anyone reporting it.
[...]
> Here's the problem:
> Because SRC does not know the route for the packet, ANY system
> outside the firewall can reply via ICMP. This means, an ICMP storm
> can come inside the firewall. For a NAT router, the storm will be
> directed at the specific SRC system.
I think you're missing an important ingredient in the mix here
and that is said firewall should be using the data returned in
the ICMP header to match up the correct outgoing state table
entry. This should not allow through arbitrary packets but
restrict it to those that match the UDP source ports or ICMP
type/code/id#/seq#.
If it isn't doing at least that, then yes, there is a bigger problem.
So you can't just choose any random destination to do it from
but it might easily be possible if you know all that information
needed to send packets
> An outbound UDP/IP packet can receive a response from either an ICMP,
> UDP, or TCP packet.
> (Note: I have not tested an inbound TCP packet.)
Then why say it can or might be possible ?
> From what I can tell, the SMB Barricade treats TCP requests as
> special, but everything else is considered to be the same. So, an
> outbound UDP connection can have anyone respond with an inbound UDP
> or ICMP connection.
So what did you actually test and with what product exactly ?
I've never heard of the "SMB Barricade" before, but there are probably
lots of firewalls, these days, that I've never heard of, but as they
always say, "you get what you pay for". Mind you, if you had to part
with more than ~$1000 for this, I'd say you were ripped off.
> The risks?
> - An ICMP storm can enter the firewall at whatever port traceroute uses.
> This is mainly a risk for hosts where traceroute can be triggered
> remotely. For example:
> http://www.usqonline.com.au/sis/public/connection/PingTraceSelected.asp
> http://www.traceroute.org/ (Lots of hosts)
> You use their tool to kick-off a traceroute to your host.
> You receive the packet and determine the port number and IP address.
> You kick-off an ICMP storm against that IP/port.
> (Like a smurf attack, but with a specific port number.)
> As long as the firewall sees incoming traffic, it won't close the
> session handle. Thus, you can attack any open traceroute server.
And you learn the various bits of information required to successfully
match how ?
> - If you know that the host is behind a firewall but vulnerable to
> an ICMP overflow (e.g., ping-of-death), then you can target and attack.
I'm not sure "ping-of-death" is quite so simple as that but maybe I'm
forgetting something (like could it be achieved with packets other
than ICMP echo?).
> Basically, a home firewall that does not manage connections at
> layer-4 will be unable to stop this type of attack.
But even if it does, there are still "issues", although I'm not sure
if you've really considered them.
So, in summary, it sounds like you've found a considerably "weak"
product which I suppose is a good, general, heads up.
There's also a general problem here, that needs attention and that
is you really shouldn't allow more ICMP error packets through than
you see normal connection packets. ie. one UDP packet out should
not allow more than one ICMP error message back in. Having realised
this somewhat obvious flaw, I've fixed IPFilter. It's relatively low
risk but IMHO it seems like the correct thing to do is limit packet
flow to matching packet counts.
Darren