Funciones de Python explotables

Esta pregunta es similar a las funciones PHP explotables .

Los datos contaminados provienen del usuario, o más específicamente un atacante. Cuando una variable contaminada alcanza una función de sumidero, tiene una vulnerabilidad. Por ejemplo, una función que ejecuta una consulta SQL es un sumidero, y las variables GET / POST son fonts de corrupción.

¿Cuáles son todas las funciones del receptor en Python? Estoy buscando funciones que presenten una vulnerabilidad o debilidad del software . Estoy particularmente interesado en las vulnerabilidades de ejecución remota de código. ¿Hay clases / módulos completos que contienen funcionalmente peligroso? ¿Tienes algún ejemplo de vulnerabilidades interesantes de Python?

desde la documentación de pickle :

Warning The pickle module is not intended to be secure against erroneous or maliciously constructed data. Never unpickle data received from an untrusted or unauthenticated source. 

eval y exec son los clásicos. Sin embargo, open file open y el file pueden ser abusados ​​también:

 open('/proc/kcore', 'w').write('0' * 1000 * 1000 * 1000) 

Luego están los módulos os , sys , subprocess y dircache . Casi cualquier cosa que toque el sistema de archivos o se pueda usar para convertir datos en código ejecutable (como os.system ) estará en la lista.

Como S. Lott señaló en los comentarios, escribir en el sistema de archivos y ejecutar progtwigs externos arbitrarios no es específico de Python. Sin embargo, merecen la consideración de los auditores de seguridad. La mayoría de estas funciones se pueden utilizar de forma segura sin preocuparse demasiado por la seguridad. eval y exec , por otro lado, son grandes banderas rojas grandes. Su uso seguro requiere un cuidado meticuloso.

Tiendo hacia lo paranoico cuando busco este tipo de cosas. Más aún porque tiendo a hacer un montón de metaprogtwigción.

  • la mayoría de los comandos de efectos secundarios (que cubren otras publicaciones)
    • Manipulación de archivos ( open , zipfile , zipfile , …)
    • llamadas de red ( urllib2 , socket , …)
    • serialización / persistencia de datos ( pickle , shelve , …)
    • proceso / gestión de subprocess ( subprocess , os.fork , os.kill , …)
  • incorporados
    • getattr
    • setattr
    • delattr
    • eval
    • exec
    • execfile
    • __import__

Y probablemente otros los estoy olvidando. También desconfío de la entrada del usuario a través de las funciones donde estoy modificando sys.path, sys.modules, etc.

El módulo de subproceso contiene funcionalmente desagradable que desaprobó estas formas de ejecutar comandos / procesos:

 os.system os.spawn* os.popen* popen2.* commands.* 

También hay exec que ejecutará el código de python y eval que “evaluará” una expresión y se puede usar para manipular variables.

La función de input , que evalúa la cadena dada y devuelve el resultado, tiene algunas restricciones, pero aún puede ser explotable.