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é.
Envoyé par Ilay Goldman
Envoyé par Ilay Goldman
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 :
Pouvez-vous repérer la différence? Regardons de plus près le haut de la page.
Légitime
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.
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 :
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.
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 ».
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 :
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é.
Envoyé par Microsoft
Envoyé par Ilay Goldman
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 ?