On Thu, 01 Nov 2007 21:15:06 -0000, Aaron Watters <[EMAIL PROTECTED]> wrote:
>On Nov 1, 4:59 pm, Jean-Paul Calderone <[EMAIL PROTECTED]> wrote:
>> On Thu, 01 Nov 2007 20:35:15 -0000, Aaron Watters <[EMAIL PROTECTED]> wrote:
>> >On Nov 1, 2:15 pm, Raymond Hettinger <[EMAIL PROTECTED]> wrote:
>> >> On Nov 1, 4:45 am, Aaron Watters <[EMAIL PROTECTED]> wrote:
>>
>> >> > Marshal is more secure than pickle
>>
>> >> "More" or "less" make little sense in a security context which
>> >> typically is an all or nothing affair.  Neither module is designed for
>> >> security.  From the docs for marshal:
>>
>> >> '''
>> >> Warning: The marshal module is not intended to be secure against
>> >> erroneous or maliciously constructed data. Never unmarshal data
>> >> received from an untrusted or unauthenticated source.
>> >> '''
>>
>> >> If security is a focus, then use xmlrpc or some other tool that
>> >> doesn't construct arbitrary code objects.
>>
>> >I disagree.  Xmlrpc is insecure if you compile
>> >and execute  one of the strings
>> >you get from it.  Marshal is similarly insecure if you evaluate a code
>> >object it hands you.  If you aren't that dumb, then neither one
>> >is a problem.  As far as I'm concerned marshal.load is not any
>> >more insecure than file.read.
>>
>> You're mistaken.
>>
>>   $ python
>>   Python 2.4.3 (#2, Oct  6 2006, 07:52:30)
>>   [GCC 4.0.3 (Ubuntu 4.0.3-1ubuntu5)] on linux2
>>   Type "help", "copyright", "credits" or "license" for more information.
>>   >>> import marshal
>>   >>> marshal.loads('RKp,U\xf7`\xef\xe77\xc1\xea\xd8\xec\xbe\\')
>>   Segmentation fault
>>
>> Plenty of other nasty stuff can happen when you call marshal.loads, too.
>
>I'll grant you the above as a denial of service attack.  You are right
>that I was mistaken in that sense.  (btw, it doesn't core dump for
>2.5.1)
>
>That is/was a bug in marshal.  Someone should fix it.  Properly
>implemented,
>marshal is not fundamentally insecure.

One can then ask the question of whether or not marshal is properly
implemented in any extant version of CPython. ;)  It isn't much
comfort to know that marshal is ideologically sound after someone
uses it to exploit your service.

>Can you give me an example
>where someone can erase the filesystem using marshal.load?  I saw one
>for pickle.load once.
>

Many bugs which lead to a segfault can also be exploited to execute
arbitrary code.  Not all such bugs can be.  I haven't looked closely
at the marshal source code to determine if it can be or not in this
case.

My observations agree with yours, for what it's worth.  A cursory
investigation doesn't reveal any inputs which cause segfaults in
[EMAIL PROTECTED] with marshal.loads(), although there are still many which
will cause it to allocate huge amounts of memory, another effective
DoS attack.

Jean-Paul
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to