El firmware alternativo para routers hogareños y SOHO conocido como DD-WRT, una de las mejores opciones y la que más me ha gustado a mí desde hace tiempo a la hora de mejorar un Linksys, presenta una falla de seguridad tan grave y básica que no sólo uno jamás lo esperaría de un desarrollo open source semejante, sino que, citando a quien publicó la vulnerabilidad en el sitio de seguridad Milw0rm, es absolutamente embarazoso.
La explotación se consigue a través de la interface web de administración de DD-WRT, debido a una combinación de tres malos factores como el no manejo de metacaracteres, la ejecución de comandos sin requerir autenticación, y que el servidor HTTP se ejecute como root, o sea, con todos los permisos posibles del sistema. Para conseguir comprometer un router que ejecute DD-WRT, no hace falta más que tener acceso a si interface web de administración, y sin necesidad alguna de autenticarse sólo hace falta introducir en la barra de dirección del navegador:
http://IP-del-Router/cgi-bin/;comando_maligno
En el video a continuación puede verse como se toma el control de un DD-WRT utilizando este exploit:
Lo más triste y difícil de perdonar es que este agujero de seguridad tan mortal está presente en todas las versiones de producción de DD-WRT, incluso en la última, la v24 SP1.

La primer medida a tomar a la hora de protegerse de los posibles ataques contra este problema es deshabilitar el acceso a la interface web desde el exterior, o sea desde Internet, algo que afortunadamente viene configurado por defecto de esa forma, y luego también sería muy sensato deshabilitar el acceso vía conexión inalámbrica, para asegurarnos posibles intrusiones vía Wi-Fi. El problema de todas formas radica en que así sólo nos estamos protegiendo en caso de que alguien quiera atacarnos directamente conectándose desde el exterior a nuestro router, pero también es posible explotar esta vulnerabilidad mediante Cross-Site Request Forgery (CSFR), de manera tal que con sólo estar navegando en una computadora que se conecta a través de un router con DD-WRT podremos caer en alguna página con un link malicioso que lo comprometa automáticamente. Es por eso que para protegernos por todos los flancos, si en este momento ingresamos al sitio oficial de DD-WRT nos encontraremos con dos soluciones posibles para bloquear este ataque y evitar desechar completamente este firmware:
1. Descargar y grabar en nuestro router una nueva compilación parcheada donde se soluciona este problema, que sería lo ideal si no fuese por dos inconvenientes: No son versiones finales, por lo que pueden contener otros bugs, y no están las versiones para todos los modelos de router que habitualmente son soportados, faltando por ejemplo las versiones para modelos tan universales como los Linksys WRT54G y WRT54GL.
2. Bloquear el acceso al directorio cgi-bin del servidor HTTP del firmware mediante un comando de iptables. Para esto es necesario ingresar a la interface de administración web, ir a Administration > Commands e ingresar:
insmod ipt_webstr
iptables -I INPUT -p tcp -m tcp -m webstr –url cgi-bin -j REJECT –reject-with tcp-reset
Luego hay que hacer click en "Save Firewall" y reiniciar el router. Para probar si efectivamente nos está protegiendo, basta abrir el navegador (en este caso recomiendo usar Firefox para detectar mejor el mensaje que devolverá) y cargar esta URL:
http://IP-del-Router/cgi-bin/;reboot
Si pusimos algo mal, el comando funcionará y el router se reiniciará o desconectará de Internet, indicándonos que la protección falló. En caso de que la nueva configuración esté protegiendo al router del ataque veremos que Firefox nos retornará el mensaje “La conexión fue restablecida” (“Connection was reset” en inglés).

Es importante destacar que esta solución sólo funciona si se tiene desactivado el acceso vía HTTPS a la interfaz web, por lo que lo mejor será desactivarla inmediatamente, y si necesitamos realmente un acceso seguro a la administración web desde el exterior va a ser mucho mejor tunelizar la conexión a través de SSH.
Y acá quiero llamar la atención sobre otro descuido más de parte de la comunidad de DD-WRT, además de este terrible agujero de seguridad en sí: En la página principal de su sitio donde recomiendan estas soluciones, hasta hace unas horas faltaba la primer línea de las dos que hay que introducir y que vimos recién, dejándonos a los que lo probábamos y no sabemos el arte de utilizar iptables en medio de la neblina. Afortunadamente más tarde lo corrigieron, tal como figura en el post original de su foro a donde tuve que llegar para poder hacer funcionar esta protección en mi propio router.
Este moco que se mandaron los programadores de DD-WRT es realmente decepcionante, sólo quiero pensar que no sea sólo un accidente y no parte de una sintomatología generalizada, porque es un firmware excelente para volver superpoderoso a cualquier router hogareño decente. Después de todo, hasta el soberbio Debian ha pasado papelones en estos años…
