Ethereal is "a widely used network packet capturing utility which has support for over 700 network protocols". A vulnerability in Ethereal's DistCC dissector allows attackers to cause the program to overflow an internal buffer by supplying a negative value to the memcpy() function used by the dissector .
Credit:
The information has been provided by Ilja van Sprundel .
Vulnerable Systems:
* Ethereal version 0.10.10 and prior
Immune Systems:
* Ethereal version 0.10.11 or newer
Ethereal has a dissector for the DistCC network protocol. A stack based buffer overflow was discovered in parsing argv, serr and sout messages.
Vulnerable code:
static void dissect_distcc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
{
char token[4];
guint32 parameter;
while(1){
tvb_memcpy(tvb, token, offset, 4);
...
sscanf(tvb_get_ptr(tvb, offset, 8), "%08x", ¶meter);
...
} else if(!strncmp(token, "ARGV", 4)){
offset=dissect_distcc_argv(tvb, pinfo, tree, offset, parameter);
}
...
}
}
static int dissect_distcc_argv(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gint parameter)
{
char argv[256];
int argv_len;
gint len=parameter;
argv_len=len>255?255:len;
tvb_memcpy(tvb, argv, offset, argv_len);
...
}
When given a negative value for parameter the bounds check will be bypassed and an overflow in memcpy occurs.
Impact:
When properly exploited this vulnerability can yield a remote root.
Please enable JavaScript to view the comments powered by Disqus.
blog comments powered by