miércoles, 5 de junio de 2013

Inyección remota de código en routers WiFi Linksys

El investigador Jason Leyrer, de Trustwave ha publicado un artículo donde analiza dos fallos de seguridad en routers WiFi de la marca Linksys de Cisco. Estas vulnerabilidades permiten la ejecución de código remoto a través de la inyección de comandos en el sistema operativo subyacente, sin necesidad de autenticación en algunos casos. Están presentes en modelos cuyo soporte ya ha acabado.

Leyrer describe una vulnerabilidad descubierta por él y otra por encontrada en otros modelos del fabricante por Michael Messner. Se trata de sendas inyecciones de comandos al sistema operativo subyacente del router a través de la interfaz de gestión, más concretamente en la página de diagnóstico.

Las vulnerabilidades aprovechan una falta de validación en el contenido suministrado por el usuario en los campos ping_ip y ping_size. En el primer caso, al agregar dos caracteres "&" (ampersand) tras una IP válida en codificación URL y seguidos del comando a ejecutar, se consigue la inyección de comandos. Esto se traduce en una petición POST con parámetros. Por ejemplo:

submit_button=Diagnostics&change_action=gozila_cgi&submit_type=start_ping&action=&commit=0&ping_ip=127.0.0.1%26%26reboot&ping_times=5&ping_size=32&traceroute_ip=

Es interpretada por el sistema como:

ping -t 30 -c 5 -R 66560 -s 32 -f /tmp/ping.log 127.0.0.1&&reboot &

Al terminar correctamente el comando ping, se ejecuta el comando inyectado, en este caso reboot, que reiniciaría el router. Los comandos inyectados con este método no pueden contener espacios, ya que no se construirán.

Linksys E1000
Esta vulnerabilidad está presente en el modelo E1000. Los modelos E1200/E3200 sí realizan validación de este campo y no están afectados.

De manera similar se podría explotar la inyección de comandos a través del campo ping_size. Sin embargo, el sistema añade el resto de parámetros del comando ping tras el contenido inyectado, lo que provoca que no sea valido. Por ejemplo:

submit_button=Diagnostics&change_action=gozila_cgi&submit_type=start_ping&action=&commit=0&ping_ip=127.0.0.1&ping_times=5&ping_size=32%20127.0.0.1%26%26ls%20%2Dal&traceroute_ip=

Se ejecuta como:

ping -t 30 -c 5 -R 66560 -s 32 127.0.0.1&&ls -al -f /tmp/ping.log 127.0.0.1 &

Lo cual no es válido. Para solucionar esto, se puede aprovechar la restricción de tamaño en los comandos del sistema. Si se adjuntan tras el comando una gran cantidad de caracteres espacio codificados, el comando se truncará, dejando fuera el resto de parámetros:

submit_button=Diagnostics&change_action=gozila_cgi&submit_type=start_ping&action=&commit=0&ping_ip=127.0.0.1&ping_times=5&ping_size=32%20127.0.0.1%26%26ls%20%2Dal%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20&traceroute_ip=

En el sistema:

ping -t 30 -c 5 -R 66560 -s 32 127.0.0.1&&ls -al

Utilizando estos métodos, se podría conseguir una shell remota.

En el caso del modelo E1000, no es necesario ningún tipo de autenticación para explotar las vulnerabilidades, ya que el servidor HTTP no la pide. En cambio, para el resto de modelos sería necesario autenticarse solo si el router no tiene su configuración de fábrica.

Leyrer señala que de los tres modelos vulnerables probados, sólo uno, el E1200, sigue teniendo soporte por parte del fabricante, mientras que los otros dos (E1000 y E3200) no recibirán ninguna actualización que resuelva los fallos. Para estos, recomienda desactivar la interfaz de administración, aunque esto puede no ser suficiente para evitar un ataque cross-site request forgery.

Más información:

Under The Hood: Linksys Remote Command Injection Vulnerabilities

Multiple Vulnerabilities in Linksys E1500/E2500



Francisco López

No hay comentarios:

Publicar un comentario en la entrada