Sécurité et confidentialité

Attaque de la chaîne d'approvisionnement Ethersphere : les clés du portefeuille Swarm volées via une compromission de l'intégration continue

Les attaquants ont utilisé des identifiants CI volés pour publier des versions malveillantes de bee-js et Swarm Desktop, installant des backdoors et volant les clés des portefeuilles des nœuds.

Illustration d'une chaîne numérique brisée représentant une attaque de la chaîne d'approvisionnement
Illustration générée pour cet article

Traduit automatiquement depuis l'original anglais.

Le 9 novembre 2026, des attaquants ont compromis l'automatisation des releases du projet Ethersphere pour distribuer un logiciel malveillant via deux de ses outils principaux. L'incident visait le réseau de stockage décentralisé Swarm en injectant du code malveillant dans bee-js version 13.3.0 et Swarm Desktop version 0.56.2. Ces versions compromises étaient conçues pour voler les clés privées des portefeuilles et installer des backdoors persistantes sur les systèmes Windows, macOS et Linux, avant d'être retirées quelques heures plus tard.

Ce qui s'est passé

L'attaque a exploité l'infrastructure d'intégration continue (CI) du projet lui-même, spécifiquement un compte nommé bee-worker utilisé pour les releases automatisées. Les attaquants ont publié une release GitHub pour bee-js 13.3.0, ce qui a déclenché le workflow de publication npm du projet sans nécessiter d'approbation manuelle. Ce processus a généré des registres de provenance valides, faisant paraître le paquet légitime malgré la présence de code malveillant. Le paquet est resté disponible sur npm pendant environ 75 minutes, de 00:09 à 01:25 UTC, durant lesquelles il a été téléchargé environ 10 fois, principalement par des scanners de sécurité et des miroirs.

Simultanément, les attaquants ont lancé manuellement un workflow de build pour Swarm Desktop 0.56.2 qui avait accès aux certificats de signature Apple et Windows. Cela leur a permis de produire une application macOS notariée et un installeur Windows signé qui contournait les alertes de sécurité standard. L'application desktop malveillante a été distribuée via le système de mise à jour intégré aux utilisateurs Windows x64 et Mac Apple Silicon dans les dix minutes suivant sa publication. À 08:27 UTC, la version compromise avait été téléchargée 65 fois. Les mainteneurs ont retiré la release après environ 8,5 heures et ont émis une version propre, 0.56.3, qui est identique à la précédente version sûre 0.56.1 mais signée avec un nouveau certificat.

Fonctionnement

Les deux releases malveillantes contenaient un loader léger qui téléchargeait et exécutait des charges utiles supplémentaires depuis un serveur distant situé à api.frameworkmetrics[.]xyz. Dans bee-js, ce loader s'exécutait sous forme de script postinstall, fonctionnant automatiquement lors de l'installation même si la bibliothèque n'était pas importée par l'utilisateur. Dans Swarm Desktop, le loader s'exécutait chaque fois que l'application démarrait. Le code téléchargé recherchait des fichiers spécifiques dans le répertoire de données de Swarm Desktop : config.yaml et data-dir/keys/swarm.key. Bien que le fichier clé soit un keystore Ethereum chiffré, l'application stockait le mot de passe de déchiffrement en clair dans config.yaml, permettant aux attaquants d'accéder entièrement au portefeuille du nœud.

Au-delà du vol d'identifiants, la charge utile installait des backdoors persistantes adaptées à chaque système d'exploitation. Sur Linux et macOS, elle déployait un shell distant basé sur Go nommé evjawbreaker, caché dans un dossier ~/.solidity et configuré pour fonctionner comme un service en arrière-plan ou un LaunchAgent. Sur Windows, elle installait un client d'accès à distance ScreenConnect légitime, utilisant un contournement connu du contrôle de compte d'utilisateur (UAC) pour obtenir des privilèges administrateur si possible. Les attaquants contrôlaient ces backdoors via des adresses stockées dans un smart contract Ethereum, leur permettant de mettre à jour dynamiquement les serveurs de commande et de contrôle.

Détails clés

  • Versions compromises : bee-js 13.3.0 et Swarm Desktop 0.56.2 étaient les seules releases affectées.
  • Vecteur d'attaque : Des identifiants CI volés pour le compte bee-worker ont permis une publication et une signature non autorisées.
  • Vol de données : Le malware a volé swarm.key et le mot de passe en clair de config.yaml, exposant les fonds du nœud.
  • Persistance des backdoors : Le malware a installé des services tels que solidity-langsupport-runner.service sur Linux et ScreenConnect sur Windows.
  • Statut de remédiation : La version 0.56.3 remplace l'application desktop malveillante, mais les utilisateurs Linux doivent remplacer manuellement les paquets.
  • Hypothèse de compromission : Toute machine ayant exécuté bee-js 13.3.0 ou Swarm Desktop 0.56.2 est considérée comme entièrement compromise.

Pourquoi c'est important

Cet incident met en évidence le risque critique posé par les pipelines CI/CD compromis dans les projets open source. Parce que les attaquants utilisaient les propres outils d'automatisation du projet, les paquets résultants portaient des provenances et des signatures numériques valides, contournant efficacement les mécanismes de confiance sur lesquels les développeurs s'appuient. Cela démontre que la sécurité de la chaîne d'approvisionnement ne concerne pas seulement la vérification de l'intégrité du code, mais aussi la sécurisation de l'infrastructure qui construit et publie ce code. Pour les équipes utilisant des workflows automatisés, l'absence d'étapes d'approbation humaine obligatoires pour la publication peut transformer une fuite d'identifiants en une attaque majeure de la chaîne d'approvisionnement.

Pour les développeurs construisant sur Swarm ou utilisant des outils de stockage décentralisé similaires, l'impact va au-delà de simples mises à jour logicielles. Le vol des clés de nœud et des mots de passe signifie que les actifs financiers stockés dans ces portefeuilles sont immédiatement en danger. De plus, l'installation de backdoors persistantes signifie que simplement mettre à jour ou réinstaller le logiciel ne supprime pas la menace. Les ingénieurs doivent traiter les machines affectées comme violées, nécessitant une rotation complète des secrets et potentiellement une reconstruction des systèmes à partir d'images fiables pour assurer une remédiation complète.

Que pouvez-vous faire

  • Vérifiez vos lockfiles et vos logs CI pour toute référence à @ethersphere/bee-js@13.3.0 et épinglez vos dépendances à la version 13.2.0.
  • Inspectez le fichier bee-desktop.log pour la ligne "Bee Desktop version: 0.56.2 (production)" afin de déterminer si vous avez exécuté l'application malveillante.
  • Si vous avez exécuté Swarm Desktop 0.56.2, déplacez immédiatement tous les fonds du nœud, les soldes du carnet de chèques (chequebook) et les stakes vers une nouvelle clé depuis un appareil propre.
  • Supprimez les backdoors persistantes en supprimant le dossier ~/.solidity sur Linux/macOS et le service ScreenConnect Client sur Windows.
  • Faites pivoter tous les mots de passe, tokens et clés API auxquels tout utilisateur ou job CI ayant installé le paquet bee-js compromis avait accès.
  • Reconstruisez toute machine ayant exécuté le code malveillant à partir d'une image de base fiable plutôt que de tenter de la nettoyer sur place.
  • #supply chain security
  • #malware
  • #swarm network
  • #ci/cd security
  • #cryptocurrency

Outils de la Boutique Bytechap

Continuer la lecture

Tous les articles