[Python-Dev] Re: mysnprintf broken

M.-A. Lemburg mal@lemburg.com
Mon, 26 Nov 2001 16:20:00 +0100


Neil Schemenauer wrote:
> 
> M.-A. Lemburg wrote:
> > Note that the version in Python does not result in *stack* overflows
> > which are the type of buffer overflow usually used in exploits.
> ...
> > The only attack on this kind of emulation is a denial of service
> > attack.
> 
> That is a bold statement to make.  It is also not true.  Heap overflows
> _can_ be exploited to execute arbitrary code.  I believe there was a
> phrack article a few years ago on the subject.

I know that they can be exploited (should have phrased the reply
more carefully), but I don't think that the exploits described
in phrack apply to Python's use of the memory buffer. 

In case sprintf() overflows, Python will detect this and immediately
dump core. I don't see how this could be used by an attacker,
except for killing off processes (the DOS attack); the exploit
described in Phrack 57 (http://www.phrack.org/) only works on 
systems which use Doug Lea's malloc implementation,
don't define snprintf() in their C lib and have sudo installed.
Should be a rather small share of installed OSes ;-)

> > In the 3 cases where this API is used in Python, an overflow
> > is not possible (unless the native sprintf() implementation
> > is broken).
> 
> That may be the case today but I'm sure that snprintf will start getting
> more use now that it is available.  We really should have a better
> implementation than mysnprintf.

No objection at all -- I wrote the emulation simply to add at least
some level of protection against buffer overflows for platforms
which don't provide snprintf() in their own C lib. Before that
Python used sprintf().

I suppose we could use the code from 
stringobject.c:PyString_FromFormatV() as starting point for our own
little snprintf() implementation...

-- 
Marc-Andre Lemburg
CEO eGenix.com Software GmbH
______________________________________________________________________
Consulting & Company:                           http://www.egenix.com/
Python Software:                        http://www.lemburg.com/python/