font - ¿Se puede usar Lupa para ejecutar un código lua que no sea de confianza en Python?
title plt python (1)
Digamos que creo LuaRuntime
con register_eval=False
y un attribute_filter
que impide el acceso a cualquier cosa excepto algunas funciones de python. ¿Es seguro suponer que el código lua no podrá hacer os.system("rm -rf *")
o algo así?
Al mirar el documento de Lupa :
Restringir el acceso de Lua a los objetos de Python
Lupa proporciona un mecanismo simple para controlar el acceso a los objetos de Python. Cada acceso de atributo se puede pasar a través de una función de filtro de la siguiente manera ...
No dice nada sobre prevenir o limitar el acceso a las instalaciones proporcionadas por Lua. Si no se realizan otras modificaciones en el entorno LuaRuntime
, una secuencia de comandos lua puede hacer algo como os.execute("rm -rf *")
.
Para controlar en qué tipo de entorno funciona la secuencia de comandos lua, puede usar setfenv
y getfenv
para getfenv
la secuencia de comandos antes de ejecutarla. Por ejemplo:
import lupa
L = lupa.LuaRuntime()
sandbox = L.eval("{}")
setfenv = L.eval("setfenv")
sandbox.print = L.globals().print
sandbox.math = L.globals().math
sandbox.string = L.globals().string
sandbox.foobar = foobar
# etc...
setfenv(0, sandbox)
Ahora, al hacer algo como L.execute("os.execute(''rm -rf *'')")
se producirá un error de script.