Microsoft acaba de lanzar la actualización MS15-034 (CVE-2015-1635), que soluciona una vulnerabilidad crítica en el archivo http.sys utilizado Internet Information Services (IIS) y otros servicios de Windows. Dicha vulnerabilidad permite ejecución remota de código y denegación de servicio.
Algunos puntos importantes de la vulnerabilidad:
- Como esto no es un error específico de IIS, no aplica sólo a los servidores IIS, puede haber otros componentes afectados.
- En principio, el fallo afecta a casi cualquier software de Windows que utiliza http.sys para responder a las solicitudes HTTP. Todo tipo de software podría caer en esa categoría: sistemas de mensajería, logs, agentes de configuración; redes Peer-to peer, demoniios, servicios y hasta una infección de malware ya existente.
- El fallo permite la ejecución remota de código. El exploit puede disparar una petición HTTP en apariencia inocente y, en teoría, esto se podría convertir en un gusano lo fue SQL Slammer. Este (por ahora teórico) gusano se podría difundir sin tener que esperar ninguna acción del usuario.
- El fallo está en un componente del núcleo, y su explotación exitosa dá el atacante privilegios deSystem.
- El código de explotación y una Prueba de Concepto (PoC) ya puede encontrarse en Internet. Por ahora esta PoC no intenta explotar el bug ni hacer algo deliberadamente malintencionado. La PoC realmente provoca un desbordamiento de búfer.
Detalles
El error viene de agregar el siguiente encabezado a una solicitud HTTP como la siguiente:
Range:
bytes=0-18446744073709551615
Como puede ver, es sólo un desbordamiento de enteros (64-bit) estándar, donde el número 18446744073709551615 es igual a -1.
Un ejemplo sería:
$ telnet IP PORT
GET / HTTP/1.1
Host: www.site.com
Range: bytes=0-18446744073709551615
$ curl -v http://IP/ -H "Host: irrelevant" -H "Range: bytes=0-18446744073709551615"
$ wget --header="Range: bytes=18-18446744073709551615" http://IP/default.aspx
Cuidado: esta firma específica parece inofensiva, pero hay otras variaciones que pueden causar un problema serio e incluso una blue screen.
Sin embargo, sirve como prueba útil para comprobar si el servidor está parcheado. Si el servidor está sin parchear, devolverá el siguiente error:
HTTP/1.1 416 Requested Range Not Satisfiable
En cambio si la respuesta es la siguiente, la vulnerabilidad está parcheada:
The request has an invalid header name
Sin embargo, las pruebas no son concluyentes porque se pueden encontrar algunas respuestas vulnerables sin que el servidor lo sea o viceversa.
Metasploit ya ha lanzado un módulo para su explotación.
Mitigación especial para IIS
Si tienes un servidor IIS, se puede evitar el daño incluso antes de aplicar la actualización M15-034, usando una solución publicada por Microsoft:
Deshabilitar IIS kernel caching. Esta solución es específica de IIS y puede causar problemas de rendimiento.
Tenga en cuenta que Kernel caching está activado por defecto en IIS 7 y versiones posteriores. Así se puede desactivar en el web.conifg o machine.config.
[configuration]
[system.webServer]
[caching enableKernelCache="false"/]
[/system.webServer]
[/configuration]
Referencias adicionales
- Microsoft: https://technet.microsoft.com/library/security/ms15-034
- Metasploit: https://github.com/rapid7/metasploit-framework/pull/5150
- DoS script en C:
– http://www.exploit-db.com/exploits/36773/
– https://ghostbin.com/paste/semkg - DoS Script en Python:
– http://pastebin.com/raw.php?i=ypURDPc4
– http://pastebin.com/wWGFFZpG - DoS con telnet: https://twitter.com/NexusFandom/status/588254994203303937/photo/1
- DoS con wget: https://twitter.com/w3bd3vil/status/588339547898941440
- Detalles: https://ma.ttias.be/remote-code-execution-via-http-request-in-iis-on-windows/
- Plugin IDAPro para diff: https://github.com/joxeankoret/diaphora
- Shodan: https://www.shodan.io/search?query=IIS – https://www.shodan.io/report/COQqWX1v
- Análisis detallado: http://blog.beyondtrust.com/the-delicate-art-of-remote-checks-a-glance-into-ms15-034
- Video: https://www.youtube.com/watch?v=BlBXREzsytc