¿Qué es la Vulnerabilidad de Inyección de Comandos? | Seguridad de aplicaciones Web / Vulnerabilidad de inyección de comandos Netsparker

La inyección de comandos del sistema operativo (también conocida como inyección de shell) es una vulnerabilidad de seguridad web que permite a un atacante ejecutar comandos arbitrarios del sistema operativo (SO) en el servidor que ejecuta una aplicación, y normalmente compromete completamente la aplicación y todos sus datos.

¿por Qué las Aplicaciones Web Necesita para Ejecutar Comandos del Sistema?

Las aplicaciones web a veces necesitan ejecutar comandos del sistema operativo (comandos del sistema operativo) para comunicarse con el sistema operativo host subyacente y el sistema de archivos. Esto se puede hacer para ejecutar comandos del sistema, lanzar aplicaciones escritas en otro lenguaje de programación o ejecutar scripts shell, python, perl o PHP. Para cualquier sistema operativo, incluidos Windows, Unix y Linux, hay funciones disponibles que pueden ejecutar un comando que se pasa a los otros scripts como un comando de shell. Si bien es extremadamente útil, esta funcionalidad puede ser peligrosa cuando se usa incorrectamente y puede provocar problemas de seguridad de aplicaciones web, como se explica en este artículo.

Por qué debe tener cuidado Al Usar Comandos del Sistema en Aplicaciones Web

Al explotar una vulnerabilidad de inyección de comandos en una aplicación vulnerable, los atacantes pueden agregar comandos adicionales o inyectar sus propios comandos del sistema operativo. Esto significa que durante un ataque de inyección de comandos, un atacante puede tomar fácilmente el control completo del sistema operativo host del servidor web. Por lo tanto, los desarrolladores deben tener mucho cuidado de cómo pasar la entrada del usuario a una de esas funciones al desarrollar aplicaciones web.

Ejemplo de Vulnerabilidad de Inyección de comandos

En este ejemplo de vulnerabilidad de inyección de comandos, estamos utilizando la funcionalidad ping, que es notoriamente insegura en muchos enrutadores. Imagine una aplicación vulnerable que tiene una función común que pasa una dirección IP de una entrada de usuario al comando ping del sistema. Por lo tanto, si la entrada del usuario es 127.0.0.1, el siguiente comando se ejecuta en el sistema operativo host:

ping -c 5 127.0.0.1

Dado que estamos tratando con una aplicación web vulnerable, es posible salirse del comando ping o provocar un error que devuelve información útil al atacante. El atacante puede usar esta funcionalidad para ejecutar sus propios comandos arbitrarios. Un ejemplo de agregar comandos adicionales del sistema podría ser el siguiente:

ping -c 5 127.0.0.1; id

En el ejemplo anterior, primero se ejecuta el comando ping y directamente después se ejecuta el comando id. Por lo tanto, la salida del comando en la página se verá así:

Durante un ataque de inyección de comandos del sistema operativo, el atacante también puede configurar un ataque basado en errores. Por ejemplo, una inyección de código en este caso se verá típicamente como la siguiente:

ping -c 5 "$(id)"

La inyección de código anterior devuelve una respuesta como esta:

ping: unknown host uid=0(root) gid=0(root) groups=0(root)

Cómo evitar vulnerabilidades de inyección de comandos del sistema

Para evitar que un atacante explote una aplicación web vulnerable e inserte caracteres especiales en el comando del sistema operativo, debe intentar evite las llamadas al sistema cuando sea posible. En todos los casos, evite la entrada del usuario de cualquier tipo a menos que sea absolutamente necesario. Y si es necesario, asegúrese de que haya una validación de entrada adecuada; la validación de entrada siempre es imprescindible para garantizar que el código de su aplicación web no sea vulnerable a otras vulnerabilidades de alto impacto, incluidas la inyección XSS y SQL.

Además, desactive esta funcionalidad en el archivo de configuración de su idioma si no la necesita, para que los atacantes nunca puedan acceder al shell del sistema en el sistema operativo host a través de aplicaciones web vulnerables. En algunos idiomas, puede separar la ejecución del proceso de los parámetros de entrada. También puede crear una lista blanca de posibles entradas y comprobar los formatos, por ejemplo, aceptando solo enteros para un id numérico.

Tabla de clasificación y gravedad de vulnerabilidades

Manténgase al día sobre las tendencias de seguridad web

Deja una respuesta

Tu dirección de correo electrónico no será publicada.