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.

FluentNHibernate 1.1, Castle.DynamicProxy2 2.2.0 et Castle.Core 1.2.0

Pour ceux qui rencontrent des problèmes à l’exécution (Castle.DynamicProxy2 2.1.0 attendu, et 2.2.0 trouvé), deux solutions s’offrent à vous :

- télécharger la dernière version du code source de FluentNHibernate, et la compiler en utilisant les références aux bonnes versions de Castle.Core, et Castle.DynamicProxy2

- ajouter les lignes suivantes dans votre web.config/app.config, dans la section “configuration” :

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Castle.DynamicProxy2" 
publicKeyToken="407dd0808d44fbdc" culture="neutral" />
        <bindingRedirect oldVersion="2.1.0.0" newVersion="2.2.0.0" />
      </dependentAssembly>
    </assemblyBinding>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Castle.Core" 
publicKeyToken="407dd0808d44fbdc" culture="neutral" />
        <bindingRedirect oldVersion="1.1.0.0" newVersion="1.2.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

Gestion de favoris avec del.icio.us

Il fut un temps, où mes favoris étaient tous stockés en local, et je considérais de les stocker chez un "fournisseur", un peu comme une hérésie... Paranoïa peut-être, résistance au changement sans doute.

Maintenant, deux problèmes sont posés par le modèle "traditionnel" du favori :

  • classement arborescent
  • réplication difficile entre plusieurs postes de travail

Le classement arborescent pose vite ses limites à partir de 100 favoris : à la fois pour la sauvegarde, et pour la lecture. Si on duplique un favoris dans deux sous branches de l'arborescence, on complexifie le processus de sauvegarde. Si on ne le place que dans une seule sous branche, on risque de ne plus retrouver son favori si on ne cherche pas exactement au bon endroit.

Concernant la réplication, il suffit de vouloir synchroniser ses favoris sur deux postes ou plus pour se rendre compte de la lourdeur de la chose.

Donc, la solution (avec un peu de retard, ce service n'est plus tout jeune!): del.icio.us. Un service de "stockage" de favoris en ligne, avec un classement par "tags". Au lieu de classer un favori dans une arborescence, on lui affecte des tags : des mots-clés. Et le plus beau dans tout ca, c'est qu'on peut retrouver une arborescence : si un favori est taggé "blog it sharepoint", il sera dans l'arborescence "blog / it / sharepoint", "sharepoint / blog / it", "it / sharepoint / blog", etc. Ceci permet de retrouver un favori bien plus facilement : on part d'un tag, et on voit immediatement les autres tags "voisins".

Le plus dur étant d'être rigoureux dans la taxinomie afin d'éviter les doublons du style graphic/graphics/graphism/images. Quand cette habitude est prise (avec l'aide l'extension Firefox fournie), le processus devient beaucoup plus naturel que le classement arborescent.

Une fois le compte crée, l'extension Firefox installée, et les anciens favoris importés (et reclassés), on ne peut plus s'en passer, rien que pour l'aspect synchronisation, et pour la barre d'outils, qui permet de placer des tags judicieusement choisis comme menus déroulants. Comme par exemple :

  • frequent : sites que je fréquente très ... fréquemment
  • reference : sites de reference (msdn, nhibernate doc, nant help, etc. )
  • toread : articles que j'estime interessants à lire tranquillement plus tard
  • tostudy : idem que toread, mais pour des outils

Avantages : classement par tags, synchronisation

Inconvenients : impossible de mettre des mots composés ("intégration continue" par exemple) comme tags