cogimator.net

Une ligne à la fois...

Vulnerabilité ASP.NET

Vu ce matin sur le flux RSS des security advisory de Microsoft : http://www.microsoft.com/technet/security/advisory/2416728.mspx.

Relayé ensuite sur le blog de Scott Guthrie : http://weblogs.asp.net/scottgu/archive/2010/09/18/important-asp-net-security-vulnerability.aspx .

Explications de l’attaque (en Anglais) : http://www.troyhunt.com/2010/09/fear-uncertainty-and-and-padding-oracle.html.

En bref, une faille dans ASP.NET (toutes versions), permettrait à un attaquant de deviner la clé de chiffrement des chaînes chiffrées échangées entre le client et le serveur, comme par exemple le cookie d’authenfication ou la clé de ressource fournie au handler webresource.axd.

Les conséquences sont un peu vastes, cela va de l’élévation de privilège, jusqu’à la récupération de fichiers dans l’application, comme le web.config.

Un workaround est fourni : activer les customerrors dans le web.config de la manière suivante :

<configuration>
  <system.web>
    <customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/error.aspx" />
  </system.web>
</configuration>

Et la page d’erreur :

<%@ 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>

Le tout depuis le post de Scott Guthrie cité plus haut.

Le point important est de toujours renvoyer sur la même page, et aussi de rajouter un délai aléatoire dans l’affichage de cette page. En effet, même si le serveur renvoie toujours la même page, qu’une erreur ait eu lieu ou pas, le temps mis pour renvoyer cette page peut donner des informations.

Bon patch à vous.

PS. L’url du flux RSS des Advisories Microsoft : http://www.microsoft.com/technet/security/advisory/RssFeed.aspx?securityadvisory.