Sandboxing eval()
Greg Ewing
greg.ewing at canterbury.ac.nz
Tue Jan 21 03:44:43 EST 2020
On 21/01/20 6:57 pm, musbur at posteo.org wrote:
> If I start with empty global and
> local dicts, and an empty __builtins__, and I screen the input string
> so it can't contain the string "import", is it still possible to have
> "targeted" malicious attacks?
Yes.
Python 3.7.3 (default, Apr 8 2019, 22:20:19)
[GCC 4.2.1 (Apple Inc. build 5664)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
eval("(1).__class__.__bases__[0].__subclasses__()[75].__init__.__globals__['__builtins__']['__imp'+'ort__']",
{"__builtins__":{}})
<built-in function __import__>
You can probably find a way to block that particular loophole.
But then there will be another one, and another, and another...
You'll never be sure that you've found all of them.
--
Greg
More information about the Python-list
mailing list