Inyección de comandos
¿Qué es Inyección de comandos?
Inyección de comandosAtaque en el que la entrada del usuario se pasa sin saneamiento a un intérprete del sistema, haciendo que la aplicación ejecute comandos proporcionados por el atacante.
La inyección de comandos (OS command injection) ocurre cuando una aplicación construye una orden del sistema concatenando entradas no fiables y entrega el resultado a un shell. Metacaracteres como ;, &, |, $() o las comillas invertidas permiten al atacante encadenar comandos adicionales que se ejecutan con los privilegios del proceso de la aplicación. Las consecuencias incluyen lectura y escritura arbitraria de ficheros, movimiento lateral, shells inversas y la toma completa del servidor. Figura en el OWASP Top 10 dentro de "Inyección" (A03:2021) y está catalogada como CWE-78.
La causa de fondo es el intérprete de metacaracteres del shell, no la entrada en sí, por lo que la distinción decisiva está entre invocar un shell (system(), os.system, Runtime.exec("sh -c ..."), comillas invertidas) e invocar el binario objetivo directamente con un vector de argumentos (execve, subprocess.run([...], shell=False), ProcessBuilder). Las APIs basadas en arrays de argumentos pasan cada token como literal, de modo que los metacaracteres nunca llegan a un analizador. Una variante relacionada, la inyección de argumentos, abusa de los propios flags de un programa (por ejemplo, colando --output o -o ProxyCommand en git, curl o ssh) incluso cuando no se invoca ningún shell.
El impacto real es severo en los dispositivos perimetrales de red. CVE-2024-3400 (CVSS 10.0) fue una inyección de comandos de SO no autenticada en la función GlobalProtect de PAN-OS de Palo Alto Networks, explotada como zero-day desde abril de 2024 por el actor que Volexity rastrea como UTA0218 para implantar shells inversas y exfiltrar configuraciones del firewall. CVE-2024-21887 en Ivanti Connect Secure, encadenada con el bypass de autenticación CVE-2023-46805, permitió la ejecución de comandos sin autenticación y fue explotada masivamente a principios de 2024. El fallo Shellshock de 2014 (CVE-2014-6271) permitía a los atacantes inyectar comandos mediante variables de entorno manipuladas que Bash analizaba, alcanzables a través de CGI, DHCP y SSH.
Defensas: evitar el shell por completo usando APIs de arrays de argumentos; aplicar listas de valores permitidos estrictas; descartar flags y metacaracteres peligrosos; ejecutar los servicios con usuarios de mínimos privilegios dentro de sandboxes/contenedores; y aplicar filtrado de salida para que un punto de apoyo no pueda comunicarse con el exterior.
flowchart TD
A[Entrada del usuario: hostname] --> B{Insertado en el comando}
B -->|"os.system('ping ' + host)"| C[El shell interpreta los metacaracteres]
C --> D["host = 127.0.0.1; cat /etc/shadow"]
D --> E[El comando del atacante se ejecuta como el usuario de la app]
E --> F[Shell inversa / exfiltración de datos / toma de control]
B -->|"subprocess.run(['ping', host], shell=False)"| G[Argumento pasado como token literal]
G --> H[Sin análisis del shell: inyección neutralizada]
style F fill:#c0392b,color:#fff
style H fill:#27ae60,color:#fff● Ejemplos
- 01
Una utilidad de ping que concatena un parámetro de host permite que 127.0.0.1; cat /etc/shadow exponga hashes de contraseñas.
- 02
Un endpoint de procesado de imágenes que invoca ImageMagick ejecuta un comando del atacante a través de un nombre de archivo manipulado.
● Preguntas frecuentes
¿Qué es Inyección de comandos?
Ataque en el que la entrada del usuario se pasa sin saneamiento a un intérprete del sistema, haciendo que la aplicación ejecute comandos proporcionados por el atacante. Pertenece a la categoría de Ataques y amenazas en ciberseguridad.
¿Qué significa Inyección de comandos?
Ataque en el que la entrada del usuario se pasa sin saneamiento a un intérprete del sistema, haciendo que la aplicación ejecute comandos proporcionados por el atacante.
¿Cómo defenderse de Inyección de comandos?
Las defensas contra Inyección de comandos combinan habitualmente controles técnicos y prácticas operativas, como se detalla en la definición.
¿Cuáles son otros nombres para Inyección de comandos?
Nombres alternativos comunes: Inyección de comandos de SO, Shell injection.