Les extensions sont facilement usurpées sur le MarketPlace VSCode de Microsoft, selon des chercheurs
qui préviennent que « l'impact de cette situation est critique » pour les organisations

Les développeurs peuvent-ils faire confiance aux extensions téléchargées pour le populaire éditeur de code Visual Studio de Microsoft ? Les chercheurs d'Aqua Nautilus disent avoir découvert que les attaquants pouvaient facilement se faire passer pour des développeurs légitimes d'extensions populaires et inciter les développeurs inconscients à les télécharger.

Et certaines extensions en ont peut-être déjà fait les frais, a noté Ilay Goldman, chercheur en sécurité pour le compte d'Aqua Nautilus, dans un billet de blog. Il peut être difficile de faire la distinction entre les extensions malveillantes et bénignes, et le manque de capacités de sandbox signifie que les extensions pourraient installer des ransomwares, des wipers et d'autres codes malveillants, a précisé Goldman. Un code d'utilisateur pourrait également être consulté.

Citation Envoyé par Ilay Goldman
La puissance de VSCode vient de son immense variété d'extensions. Il existe plus de 40 000 extensions sur le marché VSCode qui vous aident à développer votre code plus efficacement, à intégrer des débogueurs pour des langages spécifiques et même à déployer des artefacts en production.

Vous pouvez comprendre la puissance des extensions VSCode par le nombre d'installations. Par exemple, l'extension Jupyter compte 52 millions d'installations, l'extension Prettier en compte 27 millions et bien d'autres ont franchi le seuil d'installation de 10 millions.

Nom : top.png
Affichages : 6823
Taille : 120,5 Ko
Extensions les plus téléchargées sur MarketPlace

Cela conduit inévitablement à une autre question. En tant qu'utilisateur de VSCode, vous êtes-vous déjà demandé si une extension VSCode est digne de confiance ? Probablement pas. Mais même si c'est le cas, comment pouvez-vous vérifier si une extension est légitime ?

La réponse est que c'est un défi, même pour les développeurs soucieux de la sécurité, de faire la distinction entre les extensions malveillantes et celles qui sont bénignes. Si vous tenez compte du fait que n'importe qui peut créer un utilisateur même avec un e-mail temporaire, la vérité est que n'importe qui peut publier une extension qui pourrait être répertoriée sur le Marketplace.
Les extensions VS Code, qui offrent des fonctionnalités allant de la prise en charge du langage Python à l'édition de fichiers JSON, peuvent être téléchargées à partir de Visual Studio Code Marketplace de Microsoft. Aqua Nautilus a mis en ligne une extension se faisant passer pour le formateur de code Prettier et a vu plus de 1 000 installations en moins de 48 heures, dans le monde entier. Nous en parlerons un peu plus par la suite.

Citation Envoyé par Ilay Goldman
Vous vous êtes peut-être demandé ce que peut faire une extension VSCode. Certaines changent simplement la couleur du thème de l'EDI. Cependant, toutes les extensions s'exécutent avec les privilèges de l'utilisateur qui a ouvert le VSCode sans sandbox. Cela signifie que l'extension peut installer n'importe quel programme sur votre ordinateur, y compris les ransomwares, les wipers, etc. En fait, il peut accéder et même modifier tout le code que vous avez localement et même utiliser votre clé SSH pour modifier le code dans tous les référentiels de votre organisation dans GitHub ! L'impact que cela peut avoir pourrait être énorme.
Les différences entre l'extension légitime et son imitation, comment peuvent-elles se présenter ?

Alors que les médias regorgent d'histoires sur des packages malveillants qui ont été téléchargés sur des gestionnaires de packages populaires tels que NPM et PyPI, il existe très peu d'informations sur les extensions VSCode malveillantes. Nous nous sommes demandé si c'était parce que ce vecteur d'attaque était moins populaire ou si la communauté de la sécurité l'avait complètement raté ?

Lors de la recherche sur le Web d'extensions VSCode malveillantes, il y a peu de résultats, et celles qui renvoient des requêtes concernent des vulnérabilités dans VSCode ou ses extensions. À ce stade, nous devons souligner qu'une extension vulnérable n'est pas nécessairement malveillante.

Notre objectif ici est de faire la lumière sur les menaces de sécurité qui peuvent être utilisées par les attaquants via le VSCode MarketPlace. L'une de ces menaces est l'usurpation. Lorsque quelqu'un crée une extension qui ressemble à une autre extension populaire, le seul but est d'inciter les développeurs sans méfiance à télécharger une extension prétendant être quelque chose qu'elle n'est pas. Par exemple, nous avons choisi l'extension populaire VSCode Prettier et avons créé une nouvelle extension qui se fait passer pour elle. Maintenant, comparons les similitudes et les différences entre ces extensions :

Nom : prettier.png
Affichages : 1530
Taille : 206,2 Ko

Pouvez-vous repérer la différence? Regardons de plus près le haut de la page.

Nom : legitime.png
Affichages : 1528
Taille : 110,0 Ko
Légitime

Nom : mascarade.png
Affichages : 1535
Taille : 115,8 Ko
Usurpation

Si nous examinons de plus près le #1 qui pointe vers l'URL, nous pouvons voir exactement deux différences à la fois dans le nom de l'éditeur (esbenp vs espenp) ainsi que dans le nom de l'extension (prettier-vscode vs pretier-vscode). Lorsque vous recherchez l'extension Prettier, notre extension d'imitation apparaît à la 26e place, ce qui présente un faible risque. Nous pourrons peut-être affecter le classement en augmentant le téléchargement et le nombre d'étoiles, mais cela reste discutable. Néanmoins, lorsque vous tapez "pretier" [sans les deux "t"], ce que les développeurs pourraient très bien faire par inadvertance, notre extension usurpée est le seul résultat. Nous pouvons supposer que cela représenterait un risque élevé pour ceux qui ont commis cette erreur.

Une petite variation dans l'URL, telle que l'omission d'une lettre "t" ou la transformation de "b" en "p", est appelée typosquatting. Il s'agit d'une technique populaire utilisée par les attaquants pour tromper les développeurs. D'autres registres ont combattu cette technique et n'autorisent généralement pas les utilisateurs à créer de nouveaux packages présentant de telles similitudes. Selon le site Web des directives de Microsoft, les extensions officielles de Microsoft et de Red Hat sont protégées contre le typosquattage. Cependant, dans ce cas, le marché VSCode nous a permis de créer un package d'emprunt d'identité pour un package très populaire. Cela nous amène à nous demander si le VSCode Marketplace a déployé des protections similaires et, sinon, s'il est possible de déployer de telles protections, au moins afin d'empêcher les attaquants de se faire passer pour des extensions populaires.

À ce stade, nous souhaitons nous concentrer sur les éléments avec le fond jaune dans les captures d'écran ci-dessus. Nous trouvons ces éléments plus percutants.

Dans la capture d'écran ci-dessus, #2 identifie le nom de l'éditeur de l'extension tandis que #3 identifie le nom de l'extension. Étonnamment, nous avons pu créer un nom qui est une réplique exacte d'une extension très populaire. Ceci est autorisé, car lors de la création d'une nouvelle extension, vous la créez sous une propriété appelée "displayName" qui est le nom de l'extension et le nom de l'éditeur qui est affiché dans la page de l'extension. Ces noms n'ont pas besoin d'être uniques et, par conséquent, n'importe qui peut entrer presque n'importe quelle valeur souhaitée sous ces noms. Pour cette raison, n'importe qui peut se faire passer pour presque n'importe quelle extension !

De plus, #4 et #5 identifient respectivement le nombre d'installations et le nombre d'étoiles. Actuellement, les chiffres sont assez faibles. Cependant, au fil du temps, un nombre croissant d'utilisateurs inconnus auront téléchargé notre fausse extension. Au fur et à mesure que ces chiffres augmenteront, l'extension gagnera en crédibilité. De plus, comme sur le dark web, il est possible d'acheter divers services, un attaquant extrêmement déterminé pourrait potentiellement manipuler ces chiffres en achetant des services qui gonfleraient le nombre de téléchargements et d'étoiles.

Ensuite, zoomons sur le côté inférieur droit de l'extension et faisons une autre comparaison.

Nom : zoom.png
Affichages : 1524
Taille : 132,2 Ko
Section Plus d'infos de l'extension légitime face à l'imitation

#6 identifie les informations sur l'extension dans le référentiel GitHub. Étonnamment, n'importe qui peut saisir la valeur de son choix sans validation ni confirmation du fait que cette extension est réellement liée au registre.

#7 identifie la section "Plus d'infos". Ici, nous pouvons voir la date de sortie et les dernières dates de mise à jour. Cette section est plus difficile à usurper. Enfin, #8 identifie où vous pouvez voir l'identifiant unique de l'extension qui est similaire à ce qui a été montré ci-dessus dans l'URL, #1.

Microsoft a publié des directives sur la façon de décider si une extension VSCode est digne de confiance :

Nom : confiance.png
Affichages : 1521
Taille : 207,5 Ko

Cependant, nous avons déjà vu qu'un utilisateur enregistré anonyme peut facilement revendiquer la propriété de n'importe quel projet dans GitHub. Pour leur défense, presque tous les registres manquent de ces protections.

Ne laissez pas le terme "vérifié" vous tromper

Le marché VSCode utilise une coche bleue en forme de √ près du nom de l'auteur. Dans cette section, nous discuterons de la différence entre ce que cela peut représenter et ce que cela signifie réellement.

En règle générale, nous nous attendons à ce qu'un éditeur avec une coche bleue signifie que la plate-forme a vérifié que l'éditeur est bien celui qu'il prétend être.

Cependant, sur MarketPlace, la coche bleue vérifiée signifie simplement que l'éditeur, quel qu'il soit, a prouvé la propriété d'un domaine. Cela signifie n'importe quel domaine. En réalité, un éditeur pourrait acheter n'importe quel domaine et l'enregistrer pour obtenir cette coche vérifiée.

Jetons un coup d'œil à un exemple de la façon dont cela est affiché dans le Marketplace.

Nom : verifie.png
Affichages : 1530
Taille : 134,4 Ko
Exemple d'éditeur vérifié

Dans ce cas, une icône de vérification s'affiche, mais elle apparaît à côté de "Sam McLeod" qui est le "displayName" attribué à l'éditeur. Comme indiqué ci-dessus dans la comparaison entre légitime et malveillant, le "displayName" "Prettier" peut être facilement imité.

Que se passe-t-il si un attaquant obtient une coche d'éditeur vérifié, met à jour son "displayName" sur "Prettier", puis télécharge une extension malveillante ?

La réponse probable est que même les développeurs les plus vigilants installeraient cette extension malveillante "Prettier", sans parler du fait que l'éditeur original de Prettier, esbenp, n'a pas vérifié un domaine.

Extensions VSCode malveillantes sur MarketPlace

Au cours de nos recherches, nous avons trouvé plusieurs extensions VSCode suspectes résidant sur MarketPlace, bien qu'il ne soit toujours pas clair si ces extensions ont été réellement créées par des attaquants et téléchargées sur le marché VSCode, ou si elles ont été créées avec de mauvais choix de codage conduisant à un code vulnérable.

Par exemple, avec les extensions « API Generator Plugin » et « code-tester », creusons le code qui compose le « code-tester ».

Nom : tester.png
Affichages : 1510
Taille : 170,7 Ko
Code interne du code-tester

Dans la capture d'écran ci-dessus, vous pouvez voir la fonction d'activation qui s'exécute après l'installation et à chaque démarrage de VSCode. Dans cette fonction, le code envoie une requête à une URL externe avec un sous-domaine dédié ("http://$[hostname].robotnowai.top/vscode") qui est le nom d'hôte de votre serveur. Une fois qu'il reçoit la réponse de l'URL, il exécute les données de réponse à l'aide de la fonction eval. Cette demande se produit toutes les 30 secondes.

De plus, puisque la communication utilise HTTP plutôt que HTTPS, elle est vulnérable aux attaques Man in the Middle, permettant à d'autres acteurs malveillants d'injecter du code malveillant lorsque cette extension est utilisée.

Ces extensions ont été signalées à Microsoft.

Le POC

Après avoir trouvé les « mauvaises » extensions ci-dessus qui n'étaient ni des tentatives avancées ni des tentatives d'usurpation, nous avons vu une surface potentielle d'usurpation sur le Marketplace, nous avons décidé de créer un POC.

Nous avons téléchargé une extension POC, qui est illustrée ci-dessus, se faisant passer pour Prettier, l'une des dix extensions les plus installées sur le marché. Elle est configuré pour nous envoyer un ping à chaque installation.

Le nombre d'installations est devant vous :

Nom : ping.png
Affichages : 1507
Taille : 161,5 Ko

En un peu moins de 48 heures, nous avons obtenu plus d'un millier d'installations par des développeurs actifs du monde entier ! Maintenant, imaginez un véritable attaquant (ce qui donnerait à l'extension beaucoup plus de temps pour être active et donc gagnerait en crédibilité), avec une véritable extension malveillante, installée sur de nombreuses machines de développeurs compromettant de nombreuses organisations. L'impact de cette situation est critique.

La réaction de Microsoft

Des techniques d'ingénierie sociale ont été utilisées pour persuader les victimes de télécharger une extension malveillante, a déclaré Microsoft. Visual Studio Code dispose également d'une fonctionnalité Workspace Trust pour aider les utilisateurs à décider si le code d'un projet ou d'un dossier peut être exécuté par l'éditeur ou par des extensions sans l'approbation explicite de l'utilisateur. Les dossiers peuvent être laissés en mode restreint pour empêcher l'exécution si le code n'est pas approuvé.

Citation Envoyé par Microsoft
Pour aider à assurer la sécurité et la protection des clients, nous analysons les extensions à la recherche de virus et de logiciels malveillants avant qu'elles ne soient téléchargées sur le Marketplace et nous vérifions qu'une extension possède un certificat Marketplace et une signature vérifiable avant d'être installée. Pour aider à prendre des décisions éclairées, nous recommandons aux consommateurs de consulter les informations, telles que la vérification du domaine, les évaluations et les commentaires, afin d'éviter les téléchargements indésirables.
Néanmoins, Goldman a averti que la menace des extensions malveillantes de Visual Studio Code est réelle. Les extensions VS Code peuvent également être téléchargées à partir de NPM, qui fait également face à des menaces de sécurité, a noté Goldman.

Citation Envoyé par Ilay Goldman
En fin de compte, la menace des extensions VSCode malveillantes est réelle. Sans doute, dans le passé, cela n'a pas reçu la plus grande attention, peut-être parce que nous n'avons pas encore vu de campagne dans laquelle cela a eu un impact énorme. Cependant, les attaquants s'efforcent constamment d'étendre leur arsenal de techniques leur permettant d'exécuter du code malveillant à l'intérieur du réseau des organisations. En tant que chercheurs, nous sommes ici pour faire la lumière sur de telles menaces et sensibiliser la communauté à ces nouveaux points d'entrée potentiels.

Il est également important de noter que les extensions VSCode sont écrites dans Node et que les packages sont téléchargés à partir de NPM. Gardez à l'esprit qu'il existe également une menace constante de téléchargement de packages de code malveillant vers des gestionnaires de packages tels que NPM. Par conséquent, il existe un risque réel qu'un développeur légitime inconscient puisse utiliser sans le savoir un package malveillant de NPM comme dépendance de son extension, entraînant la compromission de l'ensemble de l'extension et mettant involontairement en danger la communauté.

En plus des extensions VSCode, la Marketplace propose également des extensions pour Visual Studio et Azure DevOps. À la première inspection, ils sont également vulnérables à la tromperie visuelle de l'usurpation. Cependant, nous n'avons pas poursuivi ces pistes dans ce cycle de recherche.

Pour conclure, nous avons montré comment en quelques jours seulement, nous avons obtenu des milliers d'installations d'une extension se faisant passer pour une option incroyablement populaire. Comme toujours, restez vigilant face aux extensions que vous installez et rappelez-vous que chaque extension s'exécute avec les privilèges de l'utilisateur.
Source : Aqua Nautilus

Et vous ?

Quels outils utilisez-vous pour vos développements ?
Où téléchargez-vous vos extensions ?
Accordez-vous une attention particulière à la sécurité lorsque vous téléchargez vos extensions ?
Que pensez-vous de ce vecteur d'attaques ?