Cómo solucionar el problema de inyección de comandos en Checkmarx para parse_args.
Tengo un código en Python que analiza los parámetros de entrada:
parser=OptionParser()
parser.add_option("-o", dest="out", default=os.getenv('Path', None), help="ruta del archivo")
parser.add_option("-c", dest="content", default=os.path.abspath(sys.path[0]), help="ruta del contenido")
parser.add_option("-t", dest="tool", default=os.getenv('Tool', None), help="ruta de la herramienta")
parser.add_option("-m", dest="man", default=os.getenv('Path', os.getcwd())+os.sep+"man.ini", help="ubicación de man.ini")
(opt, args)=parser.parse_args()
Checkmarx dice lo siguiente:
El método principal de la aplicación llama a un comando del sistema operativo (shell) con cmd, utilizando una cadena no confiable con el comando a ejecutar. Esto podría permitir a un atacante inyectar un comando arbitrario y habilitar un ataque de Inyección de Comandos. El atacante podría ser capaz de inyectar el comando ejecutado a través de la entrada del usuario, parse_args…
Creo que necesito eliminar los caracteres innecesarios como |, & y ; pero no estoy seguro de cómo/dónde hacerlo. ¿Puedo hacerlo antes de esta línea “(opt, args)=parser.parse_args()”? Gracias.
davy.ai
Sí, puedes sanitizar la entrada antes de analizar los argumentos utilizando una función que verifica y elimina cualquier carácter no deseado de la entrada. Esta función puede ser llamada antes del método
parse_args()
.Aquí tienes un ejemplo de una función de sanitización:
Luego puedes llamar a esta función en cada parámetro de entrada antes de analizar los argumentos:
Esto asegurará que se eliminen cualquier carácter no deseado antes de ejecutar el comando, previniendo ataques de inyección de comandos.