Grave vulnerabilidad en IIS. De vuelta a fallos de principios de década
Desde hace unos días, estamos viviendo una especie de desafortunada
vuelta a principios de esta década por culpa de un grave fallo de
seguridad en Internet Information Server, el servidor web de Microsoft.
Se ha descubierto una vulnerabilidad «como las de antes» y, lo peor,
aprovechando fallos y problemas que parecían pertenecer ya al pasado,
como de otro tiempo. Al parecer, el fallo está disparando el número de
«desfiguraciones» (defaces) en servidores web con IIS en los últimos
días.
A cualquiera que esté al tanto de las noticias sobre seguridad le sonará
que las palabras IIS, WebDAV, unicode y la cabecera «Translate:f» (parte
del protocolo WebDAV) son términos que juntos, no han traído nunca nada
bueno al servidor de Microsoft en los últimos años. La vulnerabilidad
que acaba de ser descubierta combina todos esos elementos. 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 ficheros si lo permiten los permisos) al disparar un problema de
validación en WebDAV.
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 «.» (0x2e), por lo que
sustituyéndolo en la URL de esta forma:
http://www.direccion.com/code/ejemplo.asp0x2e
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.
Sergio de los Santos
ssantos@hispasec.com