
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é.


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"

La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.