Etiquetas

, , ,

Como algunos sabran recientemente fue descubierta una vulnerabilidad en ASP.NET que podría permitir que un atacante descargara archivos de nuestro servidor que puedan tener información delicada como el web.config,  a grandes rasgos la vulnerabilidad se produce cuando un atacante empieza a enviar texto cifrado a nuestro servidor y comienza  a recolectar información sobre los distintos mensajes de error que devuelve el servidor lo cual da pistas de como el texto enviado es descifrado y finalmente después de enviar las suficientes peticiones al servidor el atacante podría determinar como desencriptar los mensajes del servidor. Este fenómeno en criptografía se conoce como cryptographic oracles ya que el sistema devuelve respuestas parciales a peticiones que se le envían.

Aun la vulnerabilidad no se encuentra resuelta pero hay una manera muy sencilla de ser vulnerables y es habilitar en nuestro web.config el custom error y devolver siempre la misma pagina de error para todos los errores de manera de que nuestro servidor no de pistas al atacante enviando distintos errores para distintos textos cifrados enviados.

Para ASP.NET 1.1,2.0,3.5

<configuration>

<system.web>

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

</system.web>

</configuration>

Para ASP.NET 3.5 sp1, 4.0

<configuration>

<system.web>

<customErrors mode=”On” redirectMode=”ResponseRewrite” defaultRedirect=”~/error.aspx” />

</system.web>

</configuration>

Adicionalmente Microsoft recomienda agregar lo siguiente en el page_load de la pagina de error.

<%@ Page Language=”C#” AutoEventWireup=”true” %>

<%@ Import Namespace=”System.Security.Cryptography” %>

<%@ Import Namespace=”System.Threading” %> <script runat=”server”>

void Page_Load()

{

byte[] delay = new byte[1];

RandomNumberGenerator prng = new RNGCryptoServiceProvider();

prng.GetBytes(delay);

Thread.Sleep((int)delay[0]);

IDisposable disposable = prng as IDisposable; if (disposable != null) { disposable.Dispose(); }

}

</script>

<html>

<head runat=”server”>

<title>Error</title>

</head>

<body>

<div> An error occurred while processing your request. </div>

</body>

</html>

Esto ayuda a ofuscar los mensajes de error.

El documento informativo de Microsoft de esta vulnerabilidad lo pueden encontrar aquí.

También desde este enlace se puede descargar un archivo vbscript que indica que sitios son vulnerables dentro de tu servidor IIS: