Le chaînage de trois vulnérabilités permet d'obtenir une exécution de code arbitraire dans Microsoft AttackSurfaceAnalyzer

Selon Microsoft, AttackSurfaceAnalyzer (ASA) est un outil permettant de comparer deux snapshots d’un système. Ainsi, cet outil est particulièrement utile pour voir précisément les fichiers ajoutés sur le système lors de l’installation d’une application.

Il suffit donc de lancer un snapshot du système avant l’installation puis un deuxième après. ASA doit être lancé avec les privilèges administrateur pour pouvoir surveiller l’intégralité des fichiers présents sur un système donné.

Un chercheur a découvert 3 vulnérabilités permettant d’obtenir une exécution de code arbitraire dans le produit :

  • La première vulnérabilité provient du fait qu’ASA écoute sur toutes les interfaces sur les deux premiers ports libres à partir de 8000. Le port 8000 est utilisé par le service Electron et le port 8001 par le serveur web Kestrel associé à ASA. Ainsi, un accès à localhost:8001 permet d’interagir avec l’application. Il est facile de contourner le filtrage des hôtes utilisé par ASA car localhost est le seul hôte accessible. En modifiant, l’en-tête de la requête, il est donc possible d’accéder à ce port depuis n’importe quelle adresse IP.
  • La deuxième vulnérabilité permet d’exploiter une vulnérabilité de type Cross-Site Scripting (XSS) persistante. L’application contient très peu d’entrées utilisateur. Cependant, il est possible d’écrire du code JavaScript dans l’unique entrée utilisateur dans la page de configuration de scan et de le voir s’exécuter directement. En effet, il n’y a aucune vérification de cette entrée utilisateur et cette dernière est stockée dans un fichier JSON directement injecté dans la page web. Lors de la réouverture de l’application, les informations du dernier scan effectué sont récupérées : la XSS s’exécute de nouveau ! Le fait que la XSS soit persistante signifie qu’un attaquant pourrait injecter le code malveillant et attendre que l’utilisateur réutilise l’application pour qu’il exécute malgré lui le code JavaScript.
  • La dernière vulnérabilité permet de passer d’une vulnérabilité de type « XSS » à une exécution de code arbitraire. En effet, il existe de multiples techniques pour faire cette conversion sur une application Electron. Lorsque la fonction NodeIntegration est activée, ce qui est le cas dans ASA, un attaquant peut accéder aux primitives du système d’exploitation via JavaScript afin d’en prendre le contrôle. Il est ainsi possible de créer de nouveaux processus sur le système et donc d’exécuter du code arbitraire.

Les recommandations sont les suivantes :

  • Ne pas exposer le serveur web sur toutes les interfaces (vulnérabilité 1) ;
  • Encoder l’entrée utilisateur pour empêcher l’exécution de code JavaScript malveillant (XSS) (vulnérabilité 2);
  • Durcir la configuration d’Electron.NET en désactivant l’option NodeIntegration et en activant l’option ContextIsolation. Si le flag NodeIntegration a pour valeur false, le JavaScript exécuté ne pourra pas s’échapper de l’application : l’application se comportera comme un navigateur (vulnérabilité 3).

Références

https://parsiya.net/blog/2019-06-18-chaining-three-bugs-to-get-rce-in-microsoft-attacksurfaceanalyzer/

Adrien Guinault

Découvrir d'autres articles