ActualitésMacroAttaque coordonnée sur la chaîne d'approvisionnement : des crates Rust populaires compromises par un malware s'exécutant à la compilation

Attaque coordonnée sur la chaîne d'approvisionnement : des crates Rust populaires compromises par un malware s'exécutant à la compilation

Auteur: Metaverse Post·

Points clés

  • Des versions malveillantes des crates Rust arrayref, internment et append-only-vec ont été modifiées pour dépendre de proc-macro1, un typosquat de proc-macro2 qui exécutait un malware lors des compilations Cargo.
  • L'implant multiplateforme a infecté des systèmes Linux, macOS et Windows, collectant des informations système et des données de navigation Chromium tout en établissant une persistance et une communication de commande et de contrôle.
  • L'équipe de réponse à la sécurité de Rust a supprimé les versions infectées et verrouillé le compte du mainteneur, concluant que la machine du développeur ou ses identifiants de publication avaient probablement été compromis plutôt que le mainteneur ait agi de manière malveillante.
  • arrayref avait accumulé environ 152 millions de téléchargements et apparaît dans des arborescences de dépendances incluant des composants liés à Solana, créant une large surface d'attaque couvrant les machines de développement et l'infrastructure CI/CD.
  • Cargo ignorant les versions retirées (yanked) lors du calcul de nouvelles arborescences de dépendances, mais respectant les versions déjà enregistrées dans les fichiers Cargo.lock, l'exposition réelle dépend du fichier lock épinglé de chaque projet.
Attaque coordonnée sur la chaîne d'approvisionnement : des crates Rust populaires compromises par un malware s'exécutant à la compilation

Le 20 août 2026, des chercheurs en sécurité ont identifié une attaque coordonnée sur la chaîne d'approvisionnement visant trois crates Rust largement utilisées publiées sur crates.io. Les paquets compromis — arrayref version 0.3.10, internment 0.8.7 et append-only-vec 0.1.9 — ont été modifiés pour inclure une dépendance malveillante exécutant du code à distance lors d'une compilation standard. L'équipe de réponse à la sécurité de Rust a rapidement supprimé les versions concernées et verrouillé le compte du mainteneur, indiquant que la machine du développeur légitime ou ses identifiants de publication avaient probablement été compromis, plutôt que le mainteneur ait agi avec une intention malveillante.

Une dépendance typosquatée a déployé la charge utile

L'attaque s'est appuyée sur une crate typosquatée nommée proc-macro1, qui usurpait l'identité de la bibliothèque légitime proc-macro2. Lorsque Cargo résolvait la dépendance, il exécutait automatiquement un script de compilation malveillant qui reconstituait des adresses de commande et de contrôle à partir de données obfusquées en Base64, désactivait la vérification TLS et téléchargeait une charge utile propre à la plateforme depuis un serveur contrôlé par l'attaquant. Comme la compromission survenait au moment de la compilation, la simple compilation d'un projet dépendant de manière transitive de l'une des crates malveillantes pouvait infecter un poste de travail de développeur ou un hôte d'intégration continue, alors même que le code de l'application n'a jamais directement invoqué de fonction suspecte.

L'usurpation visait l'un des éléments constitutifs les plus omniprésents de Rust — proc-macro2 sous-tend la gestion des macros pour une grande partie des crates publiées — et les registres tels que crates.io, npm et PyPI attribuent les noms de paquets selon le principe du premier arrivé, premier servi, une politique qui a longtemps fait du typosquatting une technique privilégiée d'attaque de la chaîne d'approvisionnement à travers les écosystèmes de langages.

Comportement du backdoor multiplateforme

Le malware opérait sur Linux, macOS et Windows. Sur Linux et macOS, il déposait un exécutable dans des répertoires temporaires et le lançait de manière détachée. Sous Windows, il déployait des scripts PowerShell et Visual Basic pour contourner les politiques d'exécution et lancer des processus cachés. Le backdoor de deuxième phase profilait ensuite le système infecté, collectant les noms d'utilisateur, les noms d'hôte, les applications installées et les données de navigation des navigateurs fondés sur Chromium. Il établissait une persistance au niveau de l'utilisateur via des clés de registre Run, des services utilisateur systemd ou des LaunchAgents macOS, maintenait la communication avec un point de terminaison de commande et de contrôle et prenait en charge des instructions à distance pour des exécutions ultérieures et des changements de configuration.

La société de sécurité Socket a documenté la compromission sur X :

Popular Rust crates compromised: Affected versions of arrayref, internment, and append-only-vec were modified to depend on proc-macro1, a malicious typosquat of proc-macro2. Its build script downloaded and executed malware during Cargo builds. Analysis:

— Socket (@SocketSecurity), August 20, 2026

Exposition élargie de l'écosystème et mesures correctives

L'incident a des implications importantes pour l'écosystème Rust et l'infrastructure blockchain adjacente. arrayref seule avait accumulé environ 152 millions de téléchargements avant la compromission et figure dans des arborescences de dépendances incluant des composants liés à Solana et des frameworks d'interface graphique populaires. Bien que les projets en aval n'aient pas été compromis par nature, sauf s'ils résolvaient et construisaient explicitement les versions malveillantes, l'utilisation transitive très répandue de la crate crée une large surface d'attaque couvrant les environnements de développement, les pipelines CI/CD et les infrastructures de publication automatisées qui abritent souvent des jetons sensibles et des éléments de signature.

Cet épisode s'inscrit par ailleurs dans une vague plus large de compromissions de registres. En août 2025, une campagne suivie sous le nom de rk0x a utilisé des identifiants de mainteneurs volés pour publier des versions piégées de crates Rust populaires, collectant des identifiants de navigateur et des portefeuilles de cryptomonnaies, tandis que npm et PyPI ont à plusieurs reprises été confrontés à des campagnes de typosquatting et de prise de contrôle de comptes. Le backdoor XZ Utils de mars 2024 a de la même manière montré comment une seule bibliothèque open source largement utilisée peut devenir un point d'étranglement touchant un grand nombre de systèmes en aval.

Les enquêteurs ont identifié des crates de préparation supplémentaires contrôlées par l'attaquant — proc-macro-en, aovine, arone, aronenao et tinymember — qui ont ensuite été retirées du registre. L'acteur de la menace a également retiré (« yanked ») les versions légitimes antérieures d'arrayref, orientant potentiellement la résolution des dépendances vers la version malveillante avant l'intervention des administrateurs. Selon les règles de résolution de Cargo, les versions retirées sont ignorées lors du calcul de nouvelles arborescences de dépendances, mais les versions déjà consignées dans un Cargo.lock continuent d'être compilées ; l'exposition réelle dépend donc des fichiers lock épinglés et non du seul état du registre.

Il est conseillé aux organisations d'auditer les fichiers Cargo.lock, les inventaires de dépendances et les journaux de compilation afin de rechercher les versions concernées et les indicateurs associés. Tout système ayant compilé l'une des versions malveillantes doit être considéré comme potentiellement compromis, ce qui exige la rotation des secrets accessibles à l'environnement de compilation, la recherche forensique des artefacts réseau et hôte connus et la reconstruction des logiciels depuis des environnements propres vérifiés. Les défenseurs doivent également surveiller les connexions à l'infrastructure de commande et de contrôle identifiée ainsi que les sorties déterministes de l'algorithme de génération de domaines associées à l'implant. Les outils de l'écosystème appuient ce triage : cargo tree énumère les dépendances transitives à examiner, et la base de données d'avis RustSec, consultée via cargo audit, répertorie les versions de crates connues comme vulnérables.

Source : Metaverse Post