fix(interpreter security): functions from the builtins module must be explicitely added so as to prevent the dangerous ones from being indirectly available (compile, exec, eval, breakpoint, __import__, open, ...) (#299)
This commit is contained in:
parent
398c932250
commit
83ecd572fc
|
@ -17,6 +17,7 @@
|
|||
import ast
|
||||
import builtins
|
||||
import difflib
|
||||
import inspect
|
||||
import math
|
||||
import re
|
||||
from collections.abc import Mapping
|
||||
|
@ -643,8 +644,14 @@ def evaluate_call(
|
|||
# cap the number of lines
|
||||
return None
|
||||
else: # Assume it's a callable object
|
||||
if (func in [eval, compile, exec]) and (func not in static_tools.values()):
|
||||
raise InterpreterError(f"Invoking eval, compile or exec is not allowed ({func_name}).")
|
||||
if (
|
||||
(inspect.getmodule(func) == builtins)
|
||||
and inspect.isbuiltin(func)
|
||||
and (func not in static_tools.values())
|
||||
):
|
||||
raise InterpreterError(
|
||||
f"Invoking a builtin function that has not been explicitly added as a tool is not allowed ({func_name})."
|
||||
)
|
||||
return func(*args, **kwargs)
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue