L’attaque Glassworm n'est pas une anomalie, c'est un symptôme. La campagne qui a compromis au moins 151 dépôts GitHub en dissimulant des charges malveillantes dans des caractères Unicode invisibles prolonge une série d'attaques sur la chaîne d'approvisionnement logicielle — XZ Utils en 2024, SolarWinds en 2020, l'attaque nx/npm par UNC6426 en 2026. Elles partagent toutes un point commun : les contrôles DevSecOps en place au moment de l'intrusion n'ont pas suffi.

La chaîne d'approvisionnement logicielle est devenue, au fil des années, l'un des vecteurs d'attaque les plus rentables pour les acteurs malveillants. Un projet open source activement maintenu repose sur un écosystème de contributeurs distribués, de dépendances transitives et d'automatismes d'intégration qui rendent la vérification exhaustive humainement impossible. SolarWinds l'a démontré à grande échelle en 2020 via la compromission de la chaîne de compilation d'un éditeur de logiciels de gestion IT, diffusant une mise à jour malveillante à environ 18 000 clients à travers le monde.

L’attaque XZ Utils a montré en mars 2024 qu'un acteur patient, vraisemblablement affilié à un État, selon l'analyse conjointe de CrowdStrike et SentinelOne, peut passer plus de deux ans à construire une position de confiance au sein d'un projet open source critique, avant d'y introduire une porte dérobée d'exécution de code à distance classée CVSSv3 à 10,0. La découverte n'a tenu qu'à un ingénieur PostgreSQL de Microsoft qui avait remarqué une anomalie de consommation CPU sur ses sessions SSH.

L'Unicode invisible comme vecteur

Glassworm opère différemment, mais dans la même logique d'exploitation de la confiance accordée aux contributions légitimes. L'acteur, suivi depuis mars 2025 par Aikido Security, a progressivement élargi son périmètre d'action : d'abord des paquets npm malveillants, puis des extensions Open VSX en octobre 2025, avant la vague de mars 2026 qui a simultanément touché GitHub, npm et le marché VS Code. Chaque pivot illustre une capacité d'adaptation aux mesures de détection déployées sur les registres précédemment ciblés.

La technique employée par Glassworm mérite d'être comprise par sa genèse. Les caractères Unicode de Zone d'Usage Privé — plages 0xFE00 à 0xFE0F et 0xE0100 à 0xE01EF — ont été exploités dès 2024 pour injecter des instructions malveillantes invisibles dans des moteurs d'IA via des invites cachées. L'idée était simple : un modèle de langage lit ces caractères et exécute les instructions qu'ils encodent, tandis qu'un opérateur humain ne voit rien dans l'interface. Les défenses des modèles ont depuis évolué pour filtrer ces caractères, poussant les attaquants à repositionner la technique vers un terrain où les défenses sont restées en retard : la revue de code dans les environnements de développement.

Le mécanisme d'injection est direct. Un attaquant insère ces caractères à l'intérieur d'une chaîne qui paraît vide dans le code source. À l'exécution JavaScript, un décodeur embarqué extrait les octets réels et les transmet à la fonction eval(), qui exécute un script de second niveau. Dans les incidents documentés par Aikido Security, ce script a utilisé la blockchain Solana comme canal de commande et contrôle pour exfiltrer des jetons d'accès, des identifiants et des secrets d'infrastructure — et pour établir des serveurs VNC cachés ainsi que des proxies SOCKS permettant un accès persistant aux environnements compromis.

Ce qui distingue cette technique des injections classiques est son invisibilité native dans tous les environnements courants : les éditeurs de code, les terminaux, les interfaces de revue de pull requests sur GitHub, les outils de diff. Aucune anomalie visuelle ne signale la présence de la charge malveillante. La détection ne peut pas reposer sur l'observation humaine.

Quand la chaîne logicielle devient le chemin

Glassworm n'est pas le seul acteur à avoir exploité l'écosystème npm en 2026 comme vecteur d'accès initial. Google Cloud a documenté dans son rapport Cloud Threat Horizons du premier semestre 2026 une attaque conduite par UNC6426, qui illustre avec précision l'impact opérationnel que peut atteindre une compromission de chaîne d'approvisionnement logicielle bien menée. L'acteur a infecté des paquets liés au framework Nx — un outil de build très répandu dans les environnements JavaScript d'entreprise. Un employé de l'organisation victime a exécuté un éditeur de code intégrant le plugin Nx Console, déclenchant l'installation d'un voleur d'identifiants JavaScript nommé QUIETVAULT. Celui-ci a exfiltré des jetons d'accès personnels GitHub, des variables d'environnement et des informations système en exploitant un outil LLM déjà installé sur le poste pour scanner les fichiers sensibles.

En moins de 72 heures, UNC6426 a utilisé le jeton GitHub volé pour accéder à l'environnement CI/CD de la victime via l'outil de reconnaissance Nord Stream, exploité la relation de confiance OIDC entre GitHub et AWS pour créer un rôle administrateur dans le compte cloud, puis accédé aux buckets S3, résilié des instances de production EC2 et RDS, déchiffré des clés applicatives. Étape finale : tous les dépôts GitHub internes ont été renommés et rendus publics. L'ensemble de la séquence, du point d'entrée npm à la compromission complète du compte AWS, s'est déroulé en moins de trois jours.

Ce que change l'automatisation dans l'économie de l'attaque

La dimension la plus structurellement préoccupante de la campagne Glassworm de mars 2026 ne tient pas à la technique Unicode elle-même, connue et documentée. Elle tient à l'échelle rendue possible par l'usage des grands modèles de langage côté offensif. Ilyas Makari, chercheur chez Aikido Security, note que les injections malveillantes dans 151 dépôts distincts s'accompagnent de modifications de couverture stylistiquement cohérentes avec chaque projet ciblé : des incréments de version, des corrections mineures, des retouches de documentation qui imitent le style de contribution propre à chaque base de code. La personnalisation à cette échelle dépasse ce qu'un opérateur humain peut produire manuellement. Aikido Security conclut que des LLM ont vraisemblablement été utilisés pour générer ces commits de couverture.

L'implication pour les équipes de sécurité est directe. Le volume d'attaques plausibles que peut produire un acteur malveillant équipé d'outils d'IA générative augmente d'un à plusieurs ordres de grandeur par rapport à une opération manuelle. La revue humaine, déjà structurellement limitée dans les projets open source maintenus par des bénévoles débordés — comme l'a illustré l'affaire XZ Utils —, devient davantage encore insuffisante comme dernier rempart. Ce que l'attaque de XZ Utils a pris deux ans à construire en termes d'ingénierie sociale et de crédibilité, Glassworm le contourne par une automatisation qui distribue la charge sur des centaines de cibles simultanément.

Réviser les hypothèses DevSecOps

La succession de ces incidents — SolarWinds, XZ Utils, UNC6426, Glassworm — dessine un ensemble de failles que les programmes DevSecOps actuels ne comblent pas systématiquement. Trois hypothèses méritent d'être réexaminées en priorité.

La première est que la revue de code humaine constitue un contrôle fiable sur les dépendances tierces. Elle ne l'est pas face aux caractères Unicode invisibles, aux portes dérobées dissimulées dans des archives de distribution comme dans XZ Utils, ni face à des commits de couverture générés par LLM. Le contrôle crédible est l'analyse automatisée du contenu des paquets — scan de maliciels spécialisés, règles de détection des caractères Unicode inhabituels activées explicitement dans ESLint ou équivalent, outils comme Aikido Safe Chain pour intercepter les paquets malveillants avant leur installation.

La deuxième est que l'épinglage de version ou la vérification de hachage garantissent l'intégrité du comportement d'un paquet. Endor Labs a montré, dans son analyse des paquets npm impliqués dans la campagne Glassworm, qu'un opérateur peut modifier la charge malveillante chargée dynamiquement depuis une URL externe sans publier de nouvelle version du paquet. L'épinglage protège contre la substitution de version, pas contre la modification d'une dépendance externe chargée à l'exécution. Les politiques de sécurité des dépendances doivent explicitement interdire ou contrôler les URL de chargement dynamique.

La troisième est que les pipelines CI/CD constituent un périmètre défensif en soi. L'attaque UNC6426 démontre le contraire : dès lors que des identifiants GitHub sont exfiltrés via un paquet malveillant installé sur un poste développeur, l'ensemble de la confiance OIDC entre GitHub et l'infrastructure cloud devient exploitable. La segmentation des droits entre les environnements de développement, les pipelines CI/CD et les comptes cloud de production, ainsi que la limitation stricte des rôles IAM créables via ces relations de confiance, constituent des mesures structurelles que cet incident devrait rendre prioritaires.

La chaîne d'approvisionnement logicielle open source n'est pas un périmètre que les DSI et les RSSI peuvent externaliser. Glassworm, UNC6426 et XZ Utils prodiguent une même leçon : la confiance accordée à un contributeur, à un paquet ou à une version n'est pas une propriété stable. Elle doit être vérifiée techniquement, en continu, par des outils capables de détecter ce que les humains ne peuvent pas voir.