¿Cómo puede usar Shell = True causar una fuga de seguridad?

Si invoca un shell, puede ser posible que un usuario malintencionado aproveche ese shell (consulte: inyección de shell) para hacer el mal. Le aconsejo que evite esto si es posible, simplemente porque es más fácil configurar shell = False en lugar de desinfectar sus entradas para cada truco concebible. Si usa shell = True, es posible que luego se vea obligado a cambiarlo en una auditoría de seguridad (es decir, si estuviera auditando su código y encontrara shell = True, probablemente haría que lo arreglara o fallara la auditoría).

Considerar:

De: documentación de Python 2.7.10rc1

Advertencia
La ejecución de comandos de shell que incorporan entradas no desinfectadas de una fuente no confiable hace que un programa sea vulnerable a la inyección de shell, una falla grave de seguridad que puede resultar en la ejecución arbitraria de comandos. Por esta razón, se desaconseja el uso de shell = True en los casos en que la cadena de comandos se construye a partir de una entrada externa:

>>> de llamada de importación de subproceso
>>> filename = input (“¿Qué archivo le gustaría mostrar? \ n”) ¿Qué archivo le gustaría mostrar? non_existent; rm -rf / #
>>> llamada (“cat” + nombre de archivo, shell = True) # Uh-oh. Esto terminará mal …
.