Básicamente, ¿qué funciones de Python activan bash (y podrían verse afectadas por shellshock), y cuáles no?
He encontrado esta pregunta al ver en algunos scripts la función popen()
.
Mi pregunta se relaciona con Python 2 y 3.
Básicamente, ¿qué funciones de Python activan bash (y podrían verse afectadas por shellshock), y cuáles no?
He encontrado esta pregunta al ver en algunos scripts la función popen()
.
Mi pregunta se relaciona con Python 2 y 3.
Cualquier programa que, en algún momento, las llamadas bash
se vean afectadas. En particular, la función os.system
es vulnerable si el sistema tiene bash
as /bin/sh
, por lo que cualquier programa que lo llame (o algún equivalente) también es vulnerable.
Las funciones popen
pueden ser vulnerables, dependiendo de los argumentos pasados. Citando de la documentación:
Además, para cada una de estas variantes, en Unix,
cmd
puede ser una secuencia, en Los argumentos del caso se pasarán directamente al programa sin intervención de shell (como conos.spawnv()
). Sicmd
es una cadena, lo hará pasar al shell (como enos.system()
).
a mi entender, esto significa que las llamadas como:
os.popenx(['executable', 'some', 'arguments'])
son seguros porque no se invoca shell, mientras que los comandos de la forma:
os.popenx('executable some argument')
son vulnerables porque se usará un shell para interpretar la cadena como una línea de comando.
También tenga en cuenta que todas las funciones popen
están en desuso desde python2.6 y deberían haberse evitado desde entonces. El módulo subprocess
proporciona una interfaz mucho mejor para iniciar subprocesos, que es Shellshock Safe de forma predeterminada. Si no pasa el argumento shell=True
, su programa no lanzará subshells y por lo tanto no será afectado por shellshock.
Para utilizar con seguridad subprocess
, debe evitar usar el argumento shell=True
tanto como pueda (esto fue cierto incluso antes del descubrimiento de Shellshock y ya está bien documentado como un peligro para la seguridad).
En particular, si desea simplemente lanzar un ejecutable, utilice subprocess.call
:
subprocess.call(['executable name', 'arg1', '--opt1', 'opt-arg', ...])
Si no desea escribir la lista de cadenas a mano, puede confiar en el módulo shlex
:
subprocess.call(shlex.split('executable-name arg1 "quoted arguments are correctly handled" etc'))
Si desea recuperar la salida del comando, use check_output
en su lugar de call
.
Si desea ejecutar un flujo de comandos como cmd1 | cmd2 | cmd3
, aún puede evitar lanzar un shell:
cmd1 = subprocess.Popen(cmd1_command_line, stdout=subprocess.PIPE)
cmd2 = subprocess.Popen(cmd2_command_line, stdin=cmd1.stdout, stdout=subprocess.PIPE)
cmd3 = subprocess.Popen(cmd3_command_line, stdin=cmd2.stdout, stdout=subprocess.PIPE)
Use shell=True
solo si es estrictamente necesario, y en tal caso, considere pasar explícitamente el entorno al shell utilizando el argumento env
.
Sí, popSh está afectado por ShellShock. Sin embargo, no tengo una lista completa para proporcionarle, nada que esté respaldado por una llamada a / bin / bash (como una llamada a / bin / sh que enlaza con / bin / bash) que se supone en la siguiente cita ) es vulnerable.
Una gama de aplicaciones web escritas en PHP, Python, C ++ o Java podrían ser vulnerables si usan llamadas a funciones como popen () o system (), A medida que estos están respaldados por llamadas a / bin / sh -c, observa Zalewski.
Espero que esto le brinde una respuesta provisional suficiente a su pregunta.
Lea otras preguntas en las etiquetas shellshock python