Je viens de lire sur le net une faille de sécurité récemment découverte dans ASP.NET. Vous pouvez lire les détails ici.
Le problème réside dans la manière dont ASP.NET implémente l'algorithme de chiffrement AES pour protéger l'intégrité des cookies que ces applications génèrent pour stocker des informations pendant les sessions utilisateur.
C'est un peu vague, mais voici une partie plus effrayante:
La première étape de l'attaque prend quelques milliers de requêtes, mais une fois qu'elle réussit et que l'attaquant obtient les clés secrètes, c'est totalement furtif.Les connaissances cryptographiques requises sont très basiques.
Dans l'ensemble, je ne connais pas assez le sujet de la sécurité / cryptographie pour savoir si c'est vraiment si grave.
Alors, tous les développeurs ASP.NET devraient-ils 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? Cela nous affecte-t-il du tout? Dans la vraie vie, quelles sont les conséquences de cette vulnérabilité? Et, enfin: existe-t-il une solution de contournement qui empêche cette vulnérabilité?
Merci pour vos réponses!
EDIT: Permettez-moi de résumer les réponses que j'ai reçues
Il s'agit donc essentiellement d'une attaque de type "oracle de remplissage". @Sri a fourni une excellente explication sur ce que signifie ce type d'attaque. Voici une vidéo choquante sur le problème!
A propos de la gravité de cette vulnérabilité: Oui, c'est vraiment grave. Il permet à l'attaquant de connaître la clé machine d'une application. Ainsi, il peut faire des choses très indésirables.
- En possession de la clé machine de l'application, l'attaquant peut décrypter les cookies d'authentification.
- Pire encore, il peut générer des cookies d'authentification avec le nom de n'importe quel utilisateur. Ainsi, il peut apparaître comme n'importe qui sur le site. L'application est incapable de faire la différence entre vous ou le pirate informatique qui a généré un cookie d'authentification avec votre nom pour lui-même.
- Cela lui permet également de décrypter (et également de générer) des cookies de session , bien que ce 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!)
- Assez inattendu : avec la connaissance de la clé de la machine, l'attaquant peut télécharger n'importe quel fichier arbitraire depuis votre application Web, même ceux qui ne peuvent normalement pas être téléchargés! (Y compris Web.Config , etc.)
Voici un tas de bonnes pratiques qui ne résolvent pas le problème mais aident à améliorer la sécurité générale d'une application Web.
- Vous pouvez crypter les données sensibles avec la configuration protégée
- Utiliser les cookies HTTP uniquement
- Empêcher les attaques DoS
Maintenant, concentrons-nous sur ce problème.
- Scott Guthrie a publié une entrée à 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 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 seule page d'erreur vers laquelle toutes les erreurs sont redirigées. Oui, même les 404 . (ScottGu a dit que la différenciation entre les 404 et les 500 est essentielle pour cette attaque.) Aussi, dans votre
Application_Error
ouError.aspx
mettez du code qui crée un retard aléatoire. (Générez un nombre aléatoire et utilisez Thread.Sleep pour dormir aussi longtemps.) Cela rendra impossible pour l'attaquant de décider ce qui s'est exactement passé 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é dans l'implémentation AES. En fait, ce n'est pas du tout recommandé .
Quelques autres pensées
Merci à tous ceux qui ont répondu à ma question. J'ai beaucoup appris non seulement sur ce problème, mais aussi sur la sécurité 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.