ForceMemo : une variante de GlassWorm injecte des malwares dans des centaines de dépôts Python via des prises de contrôle de comptes GitHub
Une nouvelle variante du malware **GlassWorm**, baptisée ForceMemo, compromet activement des dépôts Python sur **GitHub** en exploitant des tokens volés et en employant une technique inédite de 'force-push'. Cette campagne souligne la sophistication croissante des attaques de la chaîne d'approvisionnement ciblant les développeurs.

La campagne de malware **GlassWorm** a évolué, alimentant désormais une attaque qui injecte du code malveillant dans des centaines de dépôts Python à l'aide de tokens **GitHub** volés. Cette nouvelle ramification, nommée ForceMemo, démontre la menace persistante posée par les attaques de la chaîne d'approvisionnement.
### ForceMemo : une analyse approfondie
Selon **StepSecurity**, les premiers signes de ces injections remontent au 8 mars 2026. Les attaquants obtiennent l'accès aux comptes des développeurs, puis réintègrent les derniers commits légitimes sur la branche par défaut des dépôts ciblés avec du code malveillant. De manière cruciale, ils utilisent un 'force-push' pour écraser l'historique existant, en conservant le message de commit original, l'auteur et la date de l'auteur pour éviter la détection.
« Quiconque exécute `pip install` à partir d'un dépôt compromis ou clone et exécute le code déclenchera le malware », a averti **StepSecurity**.
### La chaîne d'attaque
L'attaque ForceMemo se déroule en quatre étapes clés :
1. **Compromission initiale :** Les systèmes des développeurs sont infectés par le malware **GlassWorm**, souvent via des extensions malveillantes **VS Code** et **Cursor**. Cette variante de malware comprend un composant spécifiquement conçu pour voler des secrets, y compris des tokens **GitHub**.
2. **Abus des identifiants :** Les identifiants volés sont utilisés pour forcer l'envoi de modifications malveillantes à tous les dépôts gérés par le compte **GitHub** compromis. L'attaque réintègre des malwares obfusqués dans des fichiers Python nommés `setup.py`, `main.py` ou `app.py`.
3. **Livraison de la charge utile :** Une charge utile encodée en Base64 est ajoutée à la fin du fichier Python. Cette charge utile contient des vérifications pour déterminer si la locale du système est définie sur russe. Si c'est le cas, l'exécution est ignorée. Sinon, le malware interroge le champ mémo de transaction associé à un portefeuille **Solana** (`BjVeAjPrSKFiingBn4vZvghsGj9KCE8AJVtbc9S8o8SC`) précédemment lié à **GlassWorm** pour extraire l'URL de la charge utile.
4. **Exfiltration de données :** Des charges utiles supplémentaires sont téléchargées depuis le serveur, y compris du JavaScript crypté conçu pour voler des cryptomonnaies et d'autres données sensibles.

### Persistance et évasion
« La première transaction sur l'adresse C2 remonte au 27 novembre 2025 – plus de trois mois avant les premières injections dans les dépôts **GitHub** le 8 mars 2026 », a déclaré **StepSecurity**. Les attaquants mettent régulièrement à jour l'URL de la charge utile, parfois plusieurs fois par jour, démontrant un engagement à maintenir l'efficacité de l'attaque.
**Socket** a également signalé une nouvelle itération de **GlassWorm** qui améliore la survivabilité et l'évasion en tirant parti de `extensionPack` et `extensionDependencies` pour la distribution transitive des charges utiles.
### Campagne plus large et attribution
**Aikido Security** a attribué l'auteur de **GlassWorm** à une campagne de masse qui a compromis plus de 151 dépôts **GitHub** à l'aide de code malveillant dissimulé par des caractères Unicode invisibles. La charge utile décodée récupère les instructions C2 du même portefeuille **Solana**, indiquant un effort coordonné et persistant ciblant les dépôts **GitHub**.
L'infrastructure **Solana** partagée, combinée à différentes méthodes de livraison et d'obfuscation, suggère fortement que ForceMemo est un nouveau vecteur de livraison maintenu par l'acteur de menace **GlassWorm**. Cet acteur s'est étendu de la compromission des extensions **VS Code** à des prises de contrôle de comptes **GitHub** plus larges.
### Technique d'injection inédite
« L'attaquant injecte des malwares en forçant un push sur la branche par défaut des dépôts compromis », a souligné **StepSecurity**. « Cette technique réécrit l'historique git, préserve le message de commit et l'auteur d'origine, et ne laisse aucune trace de pull request ou de commit dans l'interface utilisateur de **GitHub**. Aucune autre campagne de chaîne d'approvisionnement documentée n'utilise cette méthode d'injection. »