Filet-o-Firewall o cómo UPnP activado en tu router puede dejarte con el culo al aire

El protocolo UPnP (Universal Plug and Play) permite el descubrimiento e interacción automáticos entre los dispositivos de una red, aunque seguro que os sonará más porque alguna vez lo habréis activado en vuestro router doméstico para abrir puertos automáticamente y poder jugar a gusto con vuestra Play o XBox o algún que otro juego de PC...

UPnP fue inicialmente diseñado para funcionar en una red local (no a nivel de WAN) y por lo tanto no se hicieron grandes esfuerzos en implementar una sólida autenticación ni seguridad en general. De hecho, desde hace ya unos cuantos años tenemos noticias de exploits y ataques a UPnP que permiten abrir un "puerta" hacia miles de redes domésticas, aunque por lo general estos ataques se aprovechaban de algunos modelos de routers que escuchaban UPnP externamente. Ahora sin embargo ha salido a la luz el denominado "Filet-o-Firewall" que puede permitir a un atacante aprovecharse de UPnP aunque un router no tenga directamente abierto el puerto a Internet, sólo visitando un sitio web malicioso.

Se trata más de bien de varias técnicas que conjuntamente hacen que una víctima con Chrome o Firefox (con Javascript activado) genere silenciosamente peticiones UPnP a su router o gateway modificando su firewall y abriendo su red a través de Internet:

- DNS Rebind (ataque con registros A múltiples en Chrome y Firefox)
- Descubrimiento de la IP interna mediante WebRTC 
- Escaneo de puertos mediante Javascript


Si entramos en mayor detalle, el procedimiento paso a paso sería:

1. El usuario visita la página principal
2. La página principal tiene código WebRTC que recupera la dirección IP privada del usuario
3. El código Javascript escanea la IP de la puerta de enlace del usuario en busca de puertos UPnP abiertos
4. El código Javascript envía la dirección del gateway y los puertos UPnP descubiertos al servidor del atacante
5. El servidor del atacante transmite la información a través de memcache al servidor DNS del atacante
6. A continuación el código Javascript redirige al usuario a un nombre de dominio único creado para el usuario y para el puerto UPnP descubierto
7. El servidor DNS del atacante devuelve la consulta DNS con múltiples registros (el primer A con la IP del servidor web del atacante y el segundo con la de la puerta de enlace del usuario)
8. El navegador del usuario es redirigido a ese dominio y primero alcanza el servidor web del atacante.
9. Una vez que el Javascript empieza a ejecutarse notifica al servidor web del atacante que está listo para comenzar el ataque
10. El servidor web del atacante implementa una regla iptables para bloquear el tráfico desde la IP del usuario hacia el puerto UPnP
11. El código Javascript comienza a intentar consultar la puerta de enlace del usuario
12. La primera solicitud devolverá un error, y el navegador irá a consultar el registro secundario A
13. Después el navegador del usuario enviará consultas a la puerta de entrada en el puerto UPnP
14. El siguiente paso es que el Javascript intenta encontrar la URL de control. Ésta está es el interior del XML que proporciona a los dispositivos información sobre cómo enviar solicitudes al servicio UPnP.
15. El Javascript prueba una lista relativamente corta de URLs antes de que encuentre el archivo XML correcto. Muchas implementaciones UPnP utilizan URLs XML idénticas y es muy fácil de construir una lista.
16. Una vez encontrada la URL de control correcta, el código Javascript realiza solicitudes UPnP para un conjunto predefinido de puertos con el objetivo de abrir el tráfico tanto a la ip interna del gateway como a la IP interna del usuario.
17. El Javascript envía al servidor del atacante una lista de IPs públicas-privadas.
* Estos pasos (1-17) normalmente tardan de 2-3 segundos en llevarse a cabo.
18. El siguiente paso es que el Javascript comienza la apertura de todos los dispositivos en la red de un usuario. Para una red /24 (254 IPs) tarda menos de 45 segundos dependiendo de la velocidad del navegador.
19. El código Javascript realiza una presentación final al servidor del atacante con la lista actualizada de asignaciones (externas-internas) de direcciones IP.
20. Estas asignaciones/aperturas normalmente se mantendrán hasta que se reinicie el router.



PoC Code
https://github.com/filetofirewall/fof

Vídeo de demo:
https://youtu.be/34GtH4tghjA

Lista de routers vulnerables:
http://www.filet-o-firewall.com/p/vulnerable-routers.html

Mitigation and Patching:
http://www.filet-o-firewall.com/p/resolution.html

Fuentes:
- A vendor agnostic UPnP vulnerability
- Router devices do not implement sufficient UPnP authentication and security
- The security vulnerability Filet-O-Firewall in UPnP is exposing millions of home networking devices at risk for cyber attacks.
- UPnP Trouble Puts Devices Behind Firewall at Risk

Comentarios