.NET, Architecture, ALM, Cloud
Nouvelle faille de sécurité ASP.NET (Padding Oracle Attack) et c'est fois-ci ce n'est pas une petite faille ! Car elle touche toutes les versions du Framework (et donc aussi Sharepoint) et la faille permet de décoder les informations cryptées du viewstate ainsi que voir les fichiers du site et notamment le "web.config" où beaucoup d'application y stocke des informations sensibles comme une chaîne de connexion non cryptée avec le mot de passe ! Vous imaginez les dégâts à prévoir... Certains sites si ils tombent sur des hackers mal intentionnés pourraient donc voir leurs données compromises voir tout simplement effacées !
La faille de sécurité a été annonée le 17 septembre par Microsoft : Voir le détail de la faille.
Pour faire simple l'attaque, basé sur le Padding Oracle Attack va effectuer des milliers de requêtes sur le serveur pour ainsi connaître sa réponse et notamment l'exception renvoyé par le Framework CryptographicException. L'attaque se base sur la mauvaise implémentation de l'algo de chiffrement symértique AES largement utilisé par les applications ASP.NET et le problème est que le framework .NET renvoi trop d'information sur le processus de décryptage dans ses exceptions une fois qu'une donnée chiffrées comme un cookie est modifiée par l'utilisateur mal intentionné.
Pour se protéger l'idée est assez simple, surveiller votre journal d'évènement sur cette exception pour ajouter des filtres et au niveau de l'application grâce à la section "customErros" ne pas renvoyer au client le type d'erreur rencontré.
Voici la démarche pour vous prémunir de la vulnérabilité en attendant un patch de Microsoft.
Tout d'abord au niveau architecture réseau, évitez d'avoir votre serveur web exposée directement à l'extérieur et passez par des proxys inversés (plusieurs de préférences avec des technologies/editeurs différents dans le cas où un éditeur n'aurait pas pensé à une faille). La faille étant récente, la protection de cette attaque n'est peut-être alors pas encore prévue par l'éditeur, ajoutez une règle pour surveiller votre journal d'évènement applicatif sur l'exception .NET "CryptographicException" (message "Padding is invalid and cannot be removed.").
Si votre architecture/hébergement ne vous permet pas une protection au niveau réseau, il y a aussi bien sûr la défense côté software. Pour une application inférieure au Framework 3.5, activez le custom errors dans votre web.config pour rediriger vers une page "error.aspx" :
<system.web>
<customErrors mode="On" defaultRedirect="~/error.html" />
</system.web>
Avec le Framework 4.0 :
<system.web>
<customErrors mode="On" redirectMode="ResponseRewrite"
defaultRedirect="~/error.aspx" />
</system.web>
Cela permettra à l'attaquant de ne pas pouvoir faire la différence entre les différents type d'erreur renvoyées par
le serveur. Dans votre page error.aspx ajoutez au niveau du page_load pour ajoutez un délai de réponse :
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(); }
Ce patch pourra être supprimé lors de la mise à jour officielle de Microsoft. Et pour finir pensez systématiquement à crypter les données sensibles de vos fichiers de configuration. Une autre solution consisterai à installer un service de surveillance pour détecter une possible attaque par Padding Oracle. Un développeur a mis en place un service de sniffer à cette effet : Poet sniffer Service.
L'outil Ethical Hacker ASP.NET disponible sur Codeplex vous permet de tester la vulnérabilité de vos sites à l'attaque.
Pour vous montrer l'urgence de mettre à jour vos applications rapidement, une démonstration de la faille exploitée sur DotNetNuke :
L'utilisateur sur la vidéo utilise le logiciel "POET : Padding Oracle Exploit Tool" (disponible sous mac, linux, windows) que vous pouvez télécharger ici : Download Poet. A utiliser qu'à des fins de protection pour tester la vulnérabilité de vos applications !
Pour vous maintenir au courant, suivez le twitter de Juliano Rizzo.