Full Disclosure mailing list archives

Re: The Trillian GPL violation allegations are confirmed false.


From: Valdis.Kletnieks () vt edu
Date: Mon, 01 Mar 2004 19:56:59 -0500

On Mon, 01 Mar 2004 21:38:22 +0100, Tobias Weisserth <tobias () weisserth de>  said:

Abstract algorithms do not have real-world exploitable buffer overflows.
Real-world implementations of abstract algorithms do have buffer
overflows.

Only true because abstract algorithms aren't executable at all.

Over the past quarter century, I've seen essentially every known class of bug
included in software written to specifications because the specification
was buggy.

All it takes for the code to have a buffer overflow is for the specification to
omit the phrase "You are responsible for bounds checking", or otherwise imply
that the caller of your function has already done so.

Feel free to go take a copy of the Gaim source code, and create a pseudocode
or other specification of the function yahoo_process_auth_new() that is
sufficiently detailed so it's impossible to fail to check bounds at the right places.

See above. Please give an example of an abstract algorithm (maybe in
pseudo-code) that contains a real-world exploitable buffer overflow.

See above.  Abstract algorithms aren't real-world executable.

But since you asked, try googling for '+bug +pseudocode +overrun'. Here's a wonderful hit:

http://cvs.winehq.com/cvsweb/wine/dlls/cabinet/cabextract.c?rev=1.10

About halfway down, we find this gem of a comment...

/* LZX decruncher */

/* Microsoft's LZX document and their implementation of the
 * com.ms.util.cab Java package do not concur.
 *
 * In the LZX document, there is a table showing the correlation between
 * window size and the number of position slots. It states that the 1MB
 * window = 40 slots and the 2MB window = 42 slots. In the implementation,
 * 1MB = 42 slots, 2MB = 50 slots. The actual calculation is 'find the
 * first slot whose position base is equal to or more than the required
 * window size'. This would explain why other tables in the document refer
 * to 50 slots rather than 42.
 *
 * The constant NUM_PRIMARY_LENGTHS used in the decompression pseudocode
 * is not defined in the specification.

Figuring out what happens when somebody uses 42 instead of 50 is left as
an exercise for the reader....

Attachment: _bin
Description:


Current thread: