Je viens de lire sur le net qu'une faille de sécurité vient d'être découverte dans ASP.NET. Vous pouvez lire les détails ici.
Le problème réside dans la manière dont ASP.NET met en œuvre l'algorithme de chiffrement AES pour protéger l'intégrité des cookies que ces applications génèrent pour stocker des informations pendant sessions de l'utilisateur.
C'est un peu vague, mais voici une partie plus effrayante :
La première étape de l'attaque prend un quelques milliers de requêtes, mais une fois qu'elle réussit et que l'attaquant obtient les les clés secrètes, elle est totalement furtive. connaissances cryptographiques requises sont très basiques.
En somme, je ne suis pas assez familier avec le sujet de la sécurité/cryptograpie pour savoir si c'est vraiment si grave.
Alors, est-ce que tous les développeurs ASP.NET doivent craindre cette technique qui peut posséder n'importe quel site web ASP.NET en quelques secondes ou quoi ?
Comment ce problème affecte-t-il le développeur ASP.NET moyen ? Est-ce qu'il nous affecte tout court ? Dans la vie réelle, quelles sont les conséquences de cette vulnérabilité ? Et, enfin, existe-t-il une solution de contournement permettant d'éviter cette vulnérabilité ?
Merci pour vos réponses !
EDIT : Je vais résumer les réponses que j'ai reçues.
Il s'agit donc d'une attaque de type "padding oracle". @Sri a fourni une excellente explication sur ce que signifie ce type d'attaque. Voici une vidéo choquante à ce sujet !
Sur la gravité de cette vulnérabilité : Oui, c'est en effet sérieux. Il permet à l'attaquant de connaître la clé machine d'une application. Ainsi, il peut faire très des choses non désirées.
- En possession de la clé machine de l'application, l'attaquant peut décrypter les cookies d'authentification.
- Encore pire que ça, il peut générer des cookies d'authentification avec le nom d'un utilisateur quelconque. Ainsi, il peut apparaître comme n'importe qui sur le site. L'application est incapable de faire la différence entre vous et le pirate qui a généré un cookie d'authentification avec votre nom pour lui-même.
- Il lui permet également de décrypter (et aussi de générer) cookies de session bien qu'il ne soit pas aussi dangereux que le précédent.
- Pas si grave : il peut décrypter le ViewState crypté des pages. (Si vous utilisez ViewState pour stocker des données confidentielles, vous ne devriez pas le faire de toute façon).
- Tout à fait inattendu : Avec la connaissance de la clé de la machine, l'attaquant peut télécharger tout fichier arbitraire à partir de votre application web, même ceux qui ne peuvent normalement pas être téléchargés ! (Y compris Web.Config etc.)
Voici une série de bonnes pratiques que j'ai obtenues. Ne le fais pas. ne résout pas le problème mais contribue à améliorer la sécurité générale d'une application web.
- Vous pouvez crypter les données sensibles avec Protected Configuration
- Utiliser les cookies HTTP uniquement
- Prévenir les attaques DoS
Maintenant, concentrons-nous sur cette question.
- Scott Guthrie a publié un article à ce sujet sur son blog.
- Article de blog FAQ de ScottGu sur la vulnérabilité
- Mise à jour de ScottGu sur la vulnérabilité
- Microsoft a publié un avis de sécurité à ce sujet
- Comprendre la vulnérabilité
- Informations supplémentaires sur la vulnérabilité
La solution
- Activez customErrors et créez une page d'erreur unique à laquelle vous pouvez accéder. toutes les erreurs sont redirigés. Oui, même 404s . (ScottGu précise que la différenciation entre les 404 et les 500 est essentielle pour cette attaque). Aussi, dans votre
Application_Error
ouError.aspx
mettre du code qui fait un délai aléatoire. (Générez un nombre aléatoire et utilisez Thread.Sleep pour dormir pendant cette durée.) Ainsi, il sera impossible pour l'attaquant de déterminer ce qui s'est passé exactement sur votre serveur. - Certaines personnes ont recommandé de revenir à 3DES. En théorie, si vous n'utilisez pas AES, vous ne rencontrez pas la faiblesse de sécurité de l'implémentation AES. Il s'avère que c'est pas du tout recommandé .
Quelques autres réflexions
- Il semble que no tout le monde pense que la solution de contournement est suffisante.
Merci à tous ceux qui ont répondu à ma question. J'ai beaucoup appris non seulement sur cette question, mais aussi sur la sécurité du Web en général. J'ai marqué la réponse de @Mikael comme acceptée, mais les autres réponses sont également très utiles.
0 votes
@TimS - Merci. :) Pour être honnête, je suis vraiment préoccupé par ce problème, d'où ma question.
12 votes
Venemo, puis-je simplement dire que je ne pense pas que ce soit un bon endroit pour cette demande (à en juger par les réponses). Le vote n'est pas une bonne façon de résoudre cette question, elle doit être répondue par un expert (et vous n'avez pas besoin d'être un expert pour voter). Je recommande : mail-archive.com/cryptography@metzdowd.com/maillist.html ou, comme quelqu'un l'a mentionné plus bas, le officiel commentaire de Microsoft, qui consiste à ne pas envoyer de messages d'erreur au client. C'est l'approche correcte. Ne passez pas à 3DES. C'est un conseil choquant.
2 votes
Plus de MS : blogs.technet.com/b/srd/archive/2010/09/17/
0 votes
Ce que personne ne semble avoir expliqué jusqu'à présent, c'est si la mise en oeuvre
Application_Error
dans global.asax est tout aussi efficace que la solution proposée par customErrors pour résoudre ce problème.1 votes
@Noon - Bon point. Mais je ne vais pas choisir la réponse en fonction des votes :) Plutôt en fonction du raisonnement qu'ils contiennent. Je suis également curieux de connaître les réponses de n'importe qui, et (comme vous pouvez le voir) les vrais experts ont fini par arriver.
0 votes
@Hightechrider Oui, j'aimerais également connaître la réponse à cette question. J'ai quelques applications qui comptent sur ce système au lieu d'une redirection spécifiée dans web.config. Quelqu'un sait s'ils ont le même effet ?
0 votes
Andy, lisez l'article du blog de ScottGu à ce sujet, il explique beaucoup de choses :)
1 votes
Wow, 300+ points de rep pour avoir posté une question à laquelle personne ici ne peut vraiment avoir la "bonne réponse". Ce n'est pas une mauvaise journée pour gagner des points. =)
3 votes
@RPM1984 - Je ne suis pas d'accord. Il y a beaucoup de réponses utilisables ici. @Dan, pourquoi ?
2 votes
Ok, nous avons des interprétations différentes d'une question sur le SO. Pour moi, si on peut y répondre correctement, alors c'est bien. Les réponses sont intéressantes/utiles, ne vous méprenez pas, mais pour moi c'est un problème où la seule "réponse" est une solution de contournement - jusqu'à ce que MS publie un correctif. Pour moi, cela devrait être un wiki.
1 votes
@RPM1984 - Puisque la question elle-même demande une solution de contournement, je ne pense pas que ce soit un problème que la réponse soit une solution de contournement. :)
0 votes
Pouvez-vous également bloquer cela en limitant votre site à une demande aspx par 10 secondes ? Plus de 8 heures de forçage brutal
1 votes
@Venemo, vous ne comprenez pas. Il est vrai que nous devrions discuter de ce problème, mais il devrait s'agir d'un wiki communautaire, afin que les gens puissent partager leurs idées et leurs solutions, sans que la "réputation" soit le moteur de la contribution. Bref, j'ai fini de fulminer. =)
2 votes
@Chris - Je ne pense pas que cela soit applicable à une quelconque application du monde réel... Et si les données de votre site valent 8 heures de forçage brutal, quelqu'un fera 8 heures de forçage brutal contre lui.
0 votes
Je ne pensais pas que Dell.com utiliserait cette technique, mais pour le site de blog solitaire avec 100 visites par jour, ce serait un bon moyen de dissuasion avec le changement de web.config.
0 votes
Si je comprends bien, cette solution de contournement exige que vous envoyiez le même code de réponse HTTP (probablement 200) au client et que vous l'envoyiez à la même page pour toutes les erreurs. Cela est-il vrai ? L'attaque sera-t-elle toujours viable si votre serveur renvoie plusieurs codes d'erreur différents (302, 403, 404, 200, etc.) pour diverses erreurs ?
4 votes
Au cas où quelqu'un reviendrait sur ce fil de discussion pour chercher le correctif de sécurité, il se trouve à l'adresse suivante microsoft.com/technet/security/bulletin/MS10-070.mspx (choisissez votre système d'exploitation et la version de .NET).