# Compromission de bee-js et Swarm Desktop par un backdoor C2

_Publié le 9 novembre 2026 — https://ip73.fr/2026/11/09/compromission-de-bee-js-et-swarm-desktop-par-un-backdoor-c2/_

En novembre 2026, des artefacts publiés par Ethersphere ont été contaminés : la version 13.3.0 de `bee-js` sur npm et la version 0.56.2 de Swarm Desktop sur GitHub. Selon l'équipe de recherche de Socket, des comptes mainteneurs ont été piratés pour injecter un chargeur malveillant dans ces deux composants, réutilisant une infrastructure de commande et de contrôle (C2) connue précédemment dans la campagne SleepyDuck / EtherDuck.

Ce chargeur, minuscule, est conçu pour se connecter à l'adresse `api[.]frameworkmetrics[.]xyz` afin de récupérer et d'exécuter du JavaScript avec des privilèges complets de Node.js. Le mécanisme d'infection sur `bee-js` a consisté à réécrire le script `scripts/generate-version.cjs` pour en faire un chargeur à distance, promu ensuite en *postinstall hook*. Le paquet a été publié par le flux de travail de publication légitime d'Ethersphere, y compris avec une provenance SLSA valide, ce qui complexifie l'analyse de l'intrusion.

## L'exploitation des pipelines de déploiement

L'attaque a frappé les systèmes d'automatisation de GitHub, utilisés par les deux projets pour leurs publications. Dans le cas de Swarm Desktop, les neuf paquets disponibles pour Linux, macOS et Windows proviennent d'une même exécution CI, et tous contiennent ce chargeur dans le processus principal Electron. D'ailleurs, la version macOS était signée avec l'identifiant développeur du projet et notariée par Apple, ce qui confère une apparence de légitimité à la distribution.

L'analyse de Socket révèle que l'acteur malveillant a réussi à obtenir des accès au sein des dépôts, ciblant spécifiquement les secrets et variables des workflows GitHub Actions. Les tentatives initiales, deux jours avant le déploiement, ont échoué à récolter des identifiants, mais l'accès préexistant a permis l'injection du code. Les comptes compromis semblent être `nugaon`, qui possédait des droits de *force-push* sur une branche maîtresse non sécurisée, et `bee-worker`, l'identité dédiée à l'automatisation des versions.

## Un lien avec des campagnes antérieures

Le C2 utilisé par ces chargeurs tire ses coordonnées depuis un contrat intelligent Ethereum spécifique (`0xf8a900Db50b3331be6B768bA460BB59f3E40C344`), lequel a été maintenu depuis mars 2026 et était déjà associé à des extensions Solidity malveillantes sur Open VSX. Il est clair que cette campagne s'inscrit dans une continuité d'opérations menées par le même acteur.

Le paquet `bee-js` a été retiré de npm environ soixante-quinze minutes après sa publication, tandis que la version de Swarm Desktop est restée disponible pendant environ huit heures et demie. On note que l'analyse de `bee-js` montre comment, lors de l'installation, le script peut appeler une API externe, même lorsqu'il est installé comme dépendance, ce qui est le vecteur d'exécution final. Ce comportement est d'ailleurs visible dans les modifications de code soumises à GitHub, qui incluent l'intégration de cette requête d'analyse.

Il faut surveiller la persistance de ce contrat C2 sur la blockchain, et si les mécanismes de sécurité des pipelines CI/CD, notamment la gestion des secrets et les droits d'accès, sont suffisamment robustes pour empêcher ce type d'exploitation en amont.

## Sources

- [chore(upcoming): release 13.3.0 · ethersphere/bee-js@de2f74e](https://github.com/ethersphere/bee-js/commit/de2f74e784b2eafa0d66fbb6d88b42ea11ee34cf), github.com
- [chore(master): release 0.56.2 · ethersphere/swarm-desktop@2de7270](https://github.com/ethersphere/swarm-desktop/commit/2de727046706062d38edfbbf8340f32d1eb2bdfb), github.com
- [Malicious bee-js npm Release and Swarm Desktop Releases Deliver SleepyDuck Ethereum C2 Backdoor](https://socket.dev/blog/bee-js-compromise?utm_medium=feed), Socket, 9 novembre 2026
