[Python-Dev] Sandboxing Python

Maciej Fijalkowski fijall at gmail.com
Sun Mar 4 04:41:58 CET 2012


On Sat, Mar 3, 2012 at 6:51 PM, Guido van Rossum <guido at python.org> wrote:
> On Sat, Mar 3, 2012 at 6:02 PM, Maciej Fijalkowski <fijall at gmail.com> wrote:
>> On Sat, Mar 3, 2012 at 1:37 PM, Victor Stinner <victor.stinner at gmail.com> wrote:
>>> Hi,
>>>>>> Le 03/03/2012 20:13, Armin Rigo a écrit :
>>>>>>>>> I challenge anymore to break pysandbox! I would be happy if anyone
>>>>>> breaks it because it would make it more stronger.
>>>>>>>>>>>> I tried to run the files from Lib/test/crashers and --- kind of
>>>> obviously --- I found at least two of them that still segfaults
>>>> execfile.py, sometimes with minor edits and sometimes directly, on
>>>> CPython 2.7.
>>>>>>>>> As described in the README file of pysandbox, pysandbox doesn't protect
>>> against vulnerabilities or bugs in Python.
>>>>>>>>>> As usual, I don't see the point of "challenging" us when we have
>>>> crashers already documented.  Also, it's not like Lib/test/crashers
>>>> contains in detail *all* crashers that exist; some of them are of the
>>>> kind "there is a general issue with xxx, here is an example".
>>>>>>>> If you are not concerned about segfaults but only real attacks, then
>>>> fine, I will not spend the hours necessary to turn the segfault into a
>>>> real attack :-)
>>>>>>>>> You may be able to exploit crashers, but I don't plan to workaround such
>>> CPython bug in pysandbox.
>>>>>> I'm looking for vulnerabilities in pysandbox, not in CPython.
>>>>>> Victor
>>>> Well ok. But then what's the point of "challenging" people?
>>>> You say "this is secure according to my knowledge" and when armin says
>> "no it's not", you claim this is the wrong kind of security exploit.
>> Segfaults (most of them) can generally be made into arbitrary code
>> execution, hence the pysandbox is not quite secure. Even further,
>> "any" sort of this "security restrictions" where you modify locals
>> globals etc. would be seriously prone to attacks like those segfaults,
>> unless you do something with the VM you're running. This makes it
>> slightly less convincing to argue that the VM requires new features
>> (in this case frozendict) in order to support the kind of program
>> that's broken in the first place.
>>>> Well, I think I'm seriously missing something.
>> Could we put asserts in the places where segfaults may happen? Then
> Victor could say "if you want this to be secure then you must build
> your Python executable with asserts on." IIRC some of the segfaults
> *already* trigger asserts when those are enabled.

It's easy for some cases. Stack exhaustion cases might be
significantly harder although you might pass some compiler-specific
options to defend against that. The problem is a bit that those are
"examples", which mean that they might either touch specific parts of
code or "code that looks like that". A good example of a latter is
chaining of iterators. Any iterators that can be chained can be made
into a stack exhaustion segfault.
I suppose with a bit of effort it might be made significantly harder though.
Cheers,
fijal


More information about the Python-Dev mailing list

AltStyle によって変換されたページ (->オリジナル) /