Le logiciel malveillant que vous avez approuvé parce que vous ne le voyiez pas
GlassWorm cache sa charge utile dans de l'Unicode invisible qui passe la revue de code humaine, puis lit les identifiants qui traînent dans votre espace de travail. Un ver invisible ne casse pas le chiffrement. Il lui faut un fichier.
Votre relecteur a lu la pull request. Chaque ligne s'affichait proprement : une montée de version, un petit refactoring, une retouche de documentation. Rien ne semblait incorrect, car la partie incorrecte n'a jamais été dessinée à l'écran. Elle était écrite en caractères Unicode dépourvus de glyphe. Invisible à vos yeux, invisible dans la vue de diff, invisible pour la validation humaine sur laquelle la sécurité de la chaîne d'approvisionnement s'appuie encore.
C'est GlassWorm. Depuis octobre, les chercheurs de Koi Security suivent le premier ver auto-propagé à se répandre via des extensions VS Code, et il ne s'est pas arrêté [1]. Socket a signalé plus de soixante-dix nouvelles extensions malveillantes sur la marketplace Open VSX depuis fin janvier [2]. Le chargeur se cache dans de l'Unicode invisible, si bien que le code traverse la revue en ressemblant à du simple rangement.
Ce qu'il fait après son installation est la partie banale, et c'est justement le problème. Il lit ce qui traîne. Des jetons npm. Des identifiants GitHub. La configuration Git. Des variables d'environnement et des secrets CI laissés en clair dans votre espace de travail. Il utilise ensuite ces identifiants volés pour publier d'autres paquets empoisonnés sous votre nom — c'est ainsi qu'un ver devient un ver. Le commandement et le contrôle passent par des transactions Solana, si bien qu'il n'y a aucun serveur à saisir [3].
Voici le vrai cadrage. Personne n'a piraté @code. Open VSX n'a pas été compromis au sens classique. Le modèle d'extension a fait exactement ce pour quoi il a été conçu : vous installez un assistant, et il s'exécute avec vos permissions, à l'intérieur de votre projet ouvert, à côté de vos secrets. Ce modèle a été bâti pour un monde où l'auteur de l'extension était le seul acteur en qui vous deviez avoir confiance. GlassWorm transforme le compte d'un auteur de confiance en camion de livraison et cache la cargaison dans des caractères que vous ne pouvez pas voir. L'outil n'a pas échoué. Le modèle de menace a bougé sous les pieds de tout le monde à la fois.
Ce qui ramène à une question inconfortable concernant votre propre machine. Lorsqu'une extension en qui vous avez confiance ouvre votre projet, que peut-elle y prendre ?
Pour la plupart des développeurs, la réponse est : tout. Un jeton npm de longue durée dans un fichier point. Un token d'accès personnel qu'un guide d'installation serviable vous a demandé de coller une fois pour l'oublier. Des secrets dans un fichier d'environnement que chaque processus de la machine peut lire. Ces identifiants sont au repos, à l'endroit exact où le code s'exécute, à attendre quoi que ce soit ayant un accès local. Un ver invisible dans votre éditeur n'a pas besoin de casser le chiffrement. Il lui faut un fichier.
Clavitor part de l'hypothèse inverse. Un identifiant est négocié au moment où il est nécessaire, limité à la seule chose pour laquelle il sert, et il expire. Il n'est jamais écrit dans votre environnement de développement pour être découvert plus tard. Ainsi, quand du code hostile balaie l'espace de travail à la recherche de clés au repos, il n'y a pas de jeton npm permanent, pas de PAT GitHub éternel, rien qui survive à la seconde où il a été utilisé. Le ver ouvre le tiroir, et le tiroir est vide.
La limite honnête : un identifiant en cours d'utilisation reste actif tant qu'il est utilisé. Si votre session est en cours et que du code hostile partage cette session, il peut chevaucher ce qui est vivant à cet instant, dans la fenêtre courte et le périmètre étroit de cet identifiant. Une émission éphémère et limitée réduit le rayon d'impact et la durée. Elle ne rend pas sûre une machine que vous avez livrée à un attaquant. Rien ne le fait. Mais il y a un large écart entre un attaquant qui intercepte un identifiant limité en pleine utilisation et un attaquant qui copie un fichier de clés permanentes et vous possède pendant un an.
Nous avons rédigé la courte liste des choses qu'un système d'identifiants ne devrait jamais faire. En tête : ne pas laisser des secrets au repos là où le code s'exécute. Lisez-les ici
Clavitor (@clavitorai) est le coffre à identifiants conçu pour les agents d'IA, et contre eux. clavitor.ai
Sources
[1] Koi Security — « GlassWorm: The First Self-Propagating Worm Using Invisible Code Hits the Open VSX Marketplace » (société de recherche ; aucun compte X vérifié)
[2] Socket, via @TheHackersNews — « GlassWorm Supply-Chain Attack Abuses 72 Open VSX Extensions to Target Developers » (@SocketSecurity)
[3] @SecurityWeek — « Supply Chain Attack Targets VS Code Extensions With ‘GlassWorm’ Malware »