GlassWorm : Vol de Jetons GitHub Pour Malware dans Python Repos
Origines et historique
En mars 2026, la campagne dite GlassWorm a mis en lumière une menace simple et redoutable pour la chaîne d'approvisionnement logicielle: des jetons GitHub volés utilisés pour injecter silencieusement du code malveillant dans des dépôts Python publics et privés. Ce mode opératoire n'exploite pas une vulnérabilité technique classique dans un composant, mais la compromission d'identifiants donnant des droits de modification sur des projets existants¹ ².
Les jetons d'accès personnels GitHub (PAT) fonctionnent comme des clés numériques: mal configurés ou conservés sans précaution, ils autorisent des opérations puissantes, y compris des pushes et des réécritures d'historique via force-push. Une fois qu'un acteur malveillant dispose d'un tel jeton, il peut modifier des commits, masquer des modifications et contourner des contrôles superficiels. GlassWorm a montré que l'attaque via des identifiants volés peut être plus rapide et moins visible que l'exploitation d'une faille logicielle classique¹ ².
Ce schéma s'inscrit dans une tendance plus large: la majorité des incidents récents privilégient la compromission des accès et des secrets plutôt que la recherche d'exploits zero-day. La mise en pratique et la sécurité des processus de développement restent des leviers déterminants pour réduire l'impact de ces campagnes³.
Fonctionnement technique
De l'accès au dépôt à l'injection
La chaîne d'intrusion observée dans GlassWorm suit des étapes répétitives mais efficaces:
- Vol du jeton: récupération de PAT sur des postes compromis, via des fuites dans des fichiers de configuration, des archives ou des scripts, ou en profitant d'environnements CI/CD mal protégés. Ces jetons donnent directement accès à l'API GitHub et aux opérations Git.
- Cartographie des droits: l'attaquant interroge l'API pour lister les dépôts accessibles, leurs branches et les workflows actifs, puis priorise les cibles en fonction de leur portée et de leur exposition¹.
- Modification et dissimulation: le dépôt est cloné, le code modifié pour inclure un payload (exfiltration de clés, porte dérobée, téléchargement de modules), puis les commits sont poussés. Le recours au force-push permet de réécrire l'historique et d'effacer des traces visibles, compliquant les audits rétroactifs.
- Obfuscation du payload: le code injecté est souvent encodé, fragmenté ou chargé dynamiquement (exec/compile) pour échapper à une inspection statique et aux règles de signature simples².
- Persistance et propagation: certains payloads cherchent à collecter d'autres secrets (variables d'environnement, fichiers de configuration) et à les exfiltrer, élargissant l'impact au-delà du dépôt initial².
Pourquoi les scans classiques manquent parfois la menace
L'obfuscation et le chargement dynamique rendent la détection par des scanners statiques purement basés sur des signatures peu fiables. Une combinaison de règles heuristiques visant des patterns d'encodage, d'alertes sur les comportements anormaux en CI/CD et d'analyse runtime apporte une meilleure couverture³.
Indicateurs de compromission (IoC) et détection
Plusieurs signes doivent déclencher une enquête immédiate:
- Pushs forcés (force-push) sur des branches protégées ou historiques réécrits sans justification claire.
- Commits contenant code encodé, utilisation inhabituelle d'exec/compile, import dynamique de modules externes.
- Apparition soudaine de scripts qui aspirent des variables d'environnement ou tentent de contacter des domaines externes inconnus.
- Utilisation de nouveaux tokens ou accès API à des heures inhabituelles ou depuis des IP géographiques anormales.
Pour chaque dépôt sensible, conservez des snapshots réguliers et activez des protections de branche empêchant le force-push par défaut. Les journaux d'accès et d'actions via l'API GitHub doivent être collectés et corrélés avec les événements CI/CD pour identifier rapidement une activité anormale³.
Études de cas
Projets de recherche en Machine Learning compromis
Plusieurs dépôts de recherche en IA ont été modifiés avec des scripts visant à voler des clés d'accès vers des services cloud. Les équipes de recherche utilisent souvent des configurations avec des secrets intégrés ou des accès larges aux ressources cloud; cela a facilité l'impact. En injectant du code dans des bibliothèques partagées, l'attaquant a obtenu une propagation rapide et silencieuse¹ ².
Tableau de bord Streamlit en production

Un tableau de bord interne déployé en production a reçu un commit malveillant qui exfiltrait des données critiques vers un domaine externe. L'incident a mis en évidence deux problèmes récurrents: l'usage de dépendances obsolètes et la présence de pipelines CI/CD sans contrôle strict d'exécution des workflows. La remédiation a nécessité la révocation des jetons, la restauration depuis un snapshot sûr et l'analyse forensique des postes contributeurs¹.
Paquets PyPI ciblés
Des versions malveillantes ont été publiées sur PyPI, parfois retirées après détection, mais leur installation avait déjà touché des environnements. Ce mode opératoire illustre le risque de contamination via des artefacts publiés et la nécessité d'un contrôle de la chaîne de publication et de la signature des artefacts².
Perspectives et recommandations opérationnelles
GlassWorm rappelle que la cybersécurité des développements passe par la gestion stricte des identifiants et par des contrôles de processus, pas seulement par des mises à jour de bibliothèques. Actions concrètes à prioriser:
- Restreindre les permissions des jetons: appliquer le principe du moindre privilège et privilégier les jetons à portée limitée et durée courte. Les jetons à privilèges fins et les flux OIDC pour GitHub Actions réduisent la surface d'attaque³.
- Rotation et révocation automatisées: implémenter la rotation systématique des secrets et un processus automatisé pour révoquer les jetons suspectés compromis.
- Protéger les branches critiques: activer les règles empêchant le force-push, exiger des revues de code et limiter qui peut fusionner vers les branches de production.
- Monitorer et alerter: collecter les logs d'API, surveiller les patterns d'accès inhabituels et mettre en place des règles heuristiques pour détecter l'obfuscation et les comportements suspects en CI/CD.
- Former les équipes: sensibiliser développeurs et responsables de projets aux bonnes pratiques de gestion des secrets et aux risques liés à l'exposition involontaire de jetons.
La coordination entre équipes sécurité et développement est indispensable: les outils seuls ne suffisent pas si les processus restent permissifs. Des exercices réguliers de simulation et des revues post-incident permettent d'ajuster les contrôles et d'améliorer la résilience.