L’éditeur de code et l’environnement de développement Visual Studio Code (VS Code) de Microsoft contiennent une faille qui permet aux extensions malveillantes de récupérer les jetons d’authentification stockés dans les gestionnaires d’informations d’identification Windows, Linux et macOS.

Ces jetons sont utilisés pour s’intégrer à divers services et API tiers, tels que Git, GitHub et d’autres plates-formes de codage. Leur vol pourrait donc avoir des conséquences importantes sur la sécurité des données d’une organisation compromise, pouvant entraîner un accès non autorisé au système, des violations de données, etc.

La faille a été découverte par les chercheurs de Cycode, qui l’ont signalée à Microsoft avec une preuve de concept (PoC) fonctionnelle qu’ils ont développée. Pourtant, le géant de la technologie a décidé de ne pas résoudre le problème, car les extensions ne devraient pas être isolées du reste de l’environnement.

Voler des secrets avec des extensions
Le problème de sécurité découvert par Cycode est causé par un manque d’isolement des jetons d’authentification dans le « Secret Storage » de VS Code, une API qui permet aux extensions de stocker les jetons d’authentification dans le système d’exploitation.

Cela se fait à l’aide de Keytar, l’encapsuleur de VS Code pour la communication avec le gestionnaire d’informations d’identification Windows (sous Windows), le trousseau de clés (sur macOS) ou le trousseau de clés (pour Linux).

Cela signifie que toute extension exécutée dans VS Code, même malveillante, peut accéder au stockage secret et abuser de Keytar pour récupérer tous les jetons stockés.

Le chercheur de Cycode, Alex Ilgayev, a déclaré à Breachtrace

qu’à part l’authentification GitHub et Microsoft intégrée, toutes les informations d’identification enregistrées proviennent de l’utilisation d’extensions tierces.

« Outre l’authentification Github/Microsoft intégrée, tous les jetons enregistrés dans VSCode proviennent d’extensions », a déclaré Ilgayev à Breachtrace .

« Elles sont soit définies par des extensions officielles (de Microsoft), telles que Git, Azure, Docker/Kubernetes, etc., soit par des extensions tierces, telles que CircleCI, GitLab, AWS. »

Trousseau contenant les mots de passe de connexion

Après avoir découvert le problème, les chercheurs de Cycode ont commencé à expérimenter en créant une extension malveillante pour voler des jetons pour CircleCI, une plate-forme de codage populaire avec des extensions VS Code. Ils l’ont fait en modifiant l’extension de CircleCI pour exécuter une commande qui exposerait son jeton sécurisé et même l’enverrait directement au serveur du chercheur.

Peu à peu, ils ont développé une méthode d’attaque plus polyvalente pour extraire ces secrets sans altérer le code de l’extension cible.

La clé de ce processus a été de découvrir que toute extension VS Code est autorisée à accéder au trousseau car elle s’exécute à partir de l’application à laquelle le système d’exploitation a déjà accordé l’accès au trousseau.

« Nous avons développé une extension malveillante de preuve de concept qui a réussi à récupérer des jetons non seulement à partir d’autres extensions, mais également à partir de la fonctionnalité de connexion et de synchronisation intégrée de VS Code pour les comptes GitHub et Microsoft, présentant une attaque « Token Stealing ». » – Cycode.
Ensuite, les jetons récupérés devaient être déchiffrés, et Cycode a découvert que l’algorithme utilisé pour chiffrer les jetons était AES-256-GCM, ce qui est généralement sûr. Cependant, la clé utilisée pour chiffrer les jetons a été dérivée du chemin d’accès exécutable actuel et de l’ID de la machine, ce qui facilite la recréation de la clé.

Informations qui aident à décrypter les secrets

Les jetons récupérés ont été déchiffrés par un script JS personnalisé exécuté dans l’exécutable Electron de VS Code, déchiffrant et imprimant tous les mots de passe des extensions installées localement.

Décryptage des jetons récupérés

Une deuxième faille découverte par les chercheurs de Cycode était que la fonction « getFullKey » récupère les secrets par un « extensionId » donné, qui est dérivé du nom et de l’éditeur de l’extension.

Ce problème permet à quiconque de modifier ces champs et d’inciter VS Code à leur accorder l’accès aux jetons sécurisés d’une autre extension.

Cycode a testé cela en utilisant une extension PoC qui imitait à nouveau CircleCI ; cependant, ils ont noté que répliquer toute autre extension et accéder à ses secrets serait trivial.

Divulgation et (non) fixation
Cycode a déclaré à Breachtrace qu’ils avaient révélé le problème à Microsoft il y a deux mois, démontrant même leur extension PoC et sa capacité à voler des jetons d’extension stockés.

Quoi qu’il en soit, les ingénieurs de Microsoft n’ont pas vu cela comme un problème de sécurité et ont décidé de conserver la conception existante du cadre de gestion du stockage secret de VS Code.

Breachtrace a contacté Microsoft pour un commentaire sur ce qui précède mais n’a pas reçu de réponse à nos questions.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *