Vulnerabilidad OS command injection
www.onlinetis.com
La vulnerabilidad de OS Command Injection (inyección de comandos del sistema operativo) es un tipo de ataque en el que un atacante puede ejecutar comandos arbitrarios en el sistema operativo del servidor. Esto ocurre cuando una aplicación web toma la entrada del usuario y la utiliza directamente en una llamada al sistema o a una función de la shell (como exec
o system
) sin una validación o sanitización adecuada.
Un atacante puede utilizar esta vulnerabilidad para:
Acceder a archivos sensibles del servidor.
Manipular o eliminar archivos.
Ejecutar software malicioso.
Establecer una conexión inversa para obtener acceso remoto.
¿Cómo funciona?
El ataque explota la forma en que los programas unen la entrada del usuario con los comandos del sistema. El atacante introduce una secuencia de comandos maliciosos que, al no ser filtrados, se ejecutan en el servidor.
Ejemplo:
Imagina una aplicación web que tiene una función para hacer ping a una dirección IP y verificar si está en línea.
Comando legítimo de la aplicación:
Bashping -c 4 8.8.8.8
Petición vulnerable: La aplicación toma la IP directamente de la URL.
http://ejemplo.com/ping?ip=8.8.8.8
El servidor construye y ejecuta el comando de la siguiente manera:
ping -c 4 [entrada_del_usuario]
.Petición maliciosa del atacante: El atacante utiliza caracteres especiales como
;
o|
para encadenar comandos.http://ejemplo.com/ping?ip=8.8.8.8;cat /etc/passwd
Comando resultante en el servidor:
Bashping -c 4 8.8.8.8;cat /etc/passwd
Resultado del ataque: El servidor ejecuta el comando
ping
y, a continuación, ejecuta el comandocat /etc/passwd
, devolviendo el contenido del archivo de usuarios del sistema al atacante.
Prevención
La prevención de este tipo de ataques se centra en la validación y el control estricto de las entradas del usuario:
Evitar la llamada a la shell: La mejor medida es evitar completamente ejecutar comandos del sistema que dependan de la entrada del usuario. Si es necesario, utiliza APIs especializadas que no llamen a la shell subyacente.
Lista blanca (Whitelist): Utiliza una lista blanca para validar la entrada. Por ejemplo, si solo esperas una dirección IP, asegúrate de que la entrada solo contenga dígitos y puntos.
Sanitización: Escapa o elimina los caracteres peligrosos como
;
,&
,|
, y$
de la entrada del usuario para que no puedan ser interpretados como separadores de comandos.