La historia de mis desventuras

Palabras más, palabras menos sobre desarrollo de software.

Solución temporal a la reciente vulnerabilidad Zero-Day de ASP.NET

Posted by Jhonny López Ramírez en 18 septiembre 2010

Actualizado: La solución a esta vulnerabilidad ya ha sido liberada a través de Windows Update.

Recientemente se publicó una vulnerabilidad grave en las aplicaciones web desarrolladas con ASP.NET (MVC y WebForms). Dicha vulnerabilidad se encuentra en el API de criptografía de ASP.NET y puede ser explotada mediante ataques recurrentes enviando Requests erróneos al servidor que luego este, en los mensajes de error que devuelve, descifra parcialmente; si se envía una cantidad suficiente de mensajes y se analiza los resultados en los mensajes de error se pueden descubrir las claves de encriptación del sitio web y comprometer su seguridad al descargar, por ejemplo, el web.config del sitio, que puede contener información delicada.

Scott Guthrie, en su blog, ha publicado más información sobre la vulnerabilidad y ha ofrecido una solución temporal para evitar que los sitios actualmente publicados en ASP.NET sufran por esta vulnerabilidad. Me permito traducir dicha solución, la cual consiste en hacer uso de la cláusula customErrors del archivo de configuración, activándola y redirigiendo en caso de cualquier error a una única página, evitando así que se envíe, de vuelta, información importante al atacante.

En soluciones ASP.NET v1.0 a v3.5 la solución se vería así en el web.config:

<customErrors mode =On defaultRedirect=~/error.html />

Nota: La sección customErrors va dentro de la sección <system.web>.

Después de modificar dicha sección se agregaría una página error.html en el directorio raíz del sitio con un mensaje sencillo advirtiendo de un error y sin ofrecer detalles del mismo.

En soluciones ASP.NET v3.5 SP1 o superior la solución se vería así en el web.config:

<customErrors mode ="On" redirectMode="ResponseRewrite" defaultRedirect="~/error.aspx" />
Nota: La sección customErrors va dentro de la sección <system.web>.
Después de modificar dicha sección se agregaría una página error.aspx en el directorio raíz del sitio con un mensaje sencillo advirtiendo de un error y sin ofrecer detalles del mismo. 
Me permito agregar algunos consejos de seguridad en aplicaciones web ASP.NET:
  • Evitar almacenar información delicada en archivos de configuración del sitio si ésta no está encriptada.
  • Evitar, en lo posible, tener los archivos de configuración en el directorio raíz del sitio, para evitar que se prediga que están allí. Esto se puede modificar gracias a la cláusula configSource. Sin embargo, el archivo web.config que se propone en esta solución sí debe estar en el directorio raíz de la aplicación (en caso de que sólo esté esta solución en el web.config del directorio raíz, no olvidar encerrar el texto propuesto entre las etiquetas system.web).
  • Activar siempre la cláusula customErrors y personalizarla (por ahora como se propone en esta solución) para mostrar mensajes de error pre-procesados. Ya saben que una YSoD ofrece mucha información al usuario.
Finalmente, ScottGu ofrece una herramienta que nos permitirá descubrir si nuestros sitios web permitirían el ataque. El uso de esta herramienta, una vez descargada, se muestra en esta imagen:
command

Este script mostrará los sitios que carecen de la directiva customErrors o que la tienen configurada de forma tal que se permita el ataque.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: