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 webKestrel
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 carlocalhost
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 fonctionNodeIntegration
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’optionNodeIntegration
et en activant l’optionContextIsolation
. Si le flagNodeIntegration
a pour valeurfalse
, le JavaScript exécuté ne pourra pas s’échapper de l’application : l’application se comportera comme un navigateur (vulnérabilité 3).