Une crate Rust a exécuté un malware à la compilation. 86 minutes.
Une crate Rust de quatre macros avec 260 millions de téléchargements ajoute une dépendance, et `cargo build` exécute un binaire inconnu sur votre machine.
Une crate Rust de quatre macros avec 260 millions de téléchargements ajoute une dépendance, et `cargo build` exécute un binaire inconnu sur votre machine. 20 août 2026 : arrayref 0.3.10 arrive sur crates.io dépendant de proc-macro1 — et non proc-macro2, le vrai — dont le script de construction télécharge une charge utile, la dépose dans /tmp/rust-setup et la lance détachée pendant que votre projet compile. Les versions saines sont retirées afin que l'avertissement de Cargo vous mène à la version empoisonnée. 86 minutes plus tard, elle est supprimée.
Lire l'édition écrite (anglais) ↗
Ce que couvre cette vidéo
- cargo build exécute un binaire inconnu
- Les preuves : Rust Blog, SafeDep, Hacker News
- Ceci est The Daily Diff, postmortem
- Chronologie : 02:11 en staging → 07:15 publié → 08:41 supprimé
- Mécanisme : build.rs, pas de sandbox, l'appât du « yank »
Transcription traduite
Traduit de la narration originale en anglais. L'audio et les sous-titres disponibles sont gérés par YouTube.
cargo build exécute un binaire inconnu
0:00 Une crate Rust de quatre macros avec un quart de milliard de téléchargements ajoute une dépendance, et cargo build exécute un binaire inconnu sur votre machine. 20 août 2026. arrayref 0.3.10 arrive sur crates.io dépendant de proc-macro1. Pas proc-macro2, le vrai : une seule erreur de chiffre, et son script de compilation exécute une charge utile pendant que votre projet compile. L'équipe de sécurité de Rust la supprime 86 minutes plus tard.
Les preuves : Rust Blog, SafeDep, Hacker News
0:22 SafeDep publie l'analyse détaillée. Hacker News : 554 points. Comment cela se produit, pourquoi Cargo le permet, et qui est à blâmer. Ceci est The Daily Diff, postmortem. Deux heures du matin, UTC.
Ceci est The Daily Diff, postmortem
0:33 Un compte appelé d-tolney, à une lettre près de David Tolnay, qui maintient la moitié de Rust, publie proc-macro1 1.0.106 : le vrai
Chronologie : 02:11 en staging → 07:15 publié → 08:41 supprimé
0:41 proc-macro2, renommé. En staging. 07:11. La version 1.0.107 ajoute un script de compilation, plus base64, TLS et un client HTTP. Pour un analyseur de jetons. 07:15. Le compte du mainteneur republie arrayref en 0.3.10 et retire toutes les versions antérieures. Cargo affiche : envisagez de mettre à jour vers une version qui n'est pas retirée. La seule restante est la version empoisonnée.
1:02 L'avertissement est l'appât. La même minute, une entreprise de sécurité le signale à Rust. 07:54, un problème RustSec. 08:29, un problème sur le dépôt ; l'attaquant répond avec 0.3.11 et une seconde dépendance malveillante. 08:41, supprimée. Quatre-vingt-six minutes. Pourquoi ? Un : Cargo construit toutes les dépendances déclarées, appelées ou non. Une ligne de manifeste suffit.
1:21 Deux : un script de compilation s'exécute sur votre machine, en tant que vous, avec vos clés SSH et votre jeton
Mécanisme : build.rs, pas de sandbox, l'appât du « yank »
1:26 cargo, avant que votre code ne compile. Pas de sandbox, par conception : c'est ainsi que les crates trouvent les bibliothèques C. Trois : à l'intérieur se trouve le vrai proc-macro2, donc la compilation réussit. La charge utile : un client TLS qui fait confiance à n'importe quel certificat récupère un binaire, le dépose dans /tmp/rust-setup et le lance détaché. Sous Windows, il passe par wscript pour échapper à l'objet de tâche de Cargo ; un commentaire de source le dit. La deuxième étape, selon le fil RustSec : un outil d'accès à distance visant les
1:52 navigateurs et les portefeuilles de crypto-monnaie. Poétique, puisque les plus grands utilisateurs d'arrayref incluent secp256k1 et Solana. git blame. Le modèle de Cargo, cinquante-cinq pour cent : les dépendances exécutent du code sur votre machine au moment de la compilation, sans sandbox, et l'avertissement de retrait a mené les gens au
git blame — la scission
2:07 poison. Un compte, trente : une seule identification republie une crate à laquelle un quart de milliard de téléchargements font confiance. Le chiffre un, quinze : une frappe de la crate la plus fiable de Rust, et personne ne lit l'arborescence. Rayon d'action : 2 285 téléchargements en 86 minutes. Moins de dix pour cent du trafic, car la plupart des lockfiles contenaient 0.3.9. crates.io dit qu'il n'y a aucune preuve d'utilisation.
Rayon d'action : 2 285 téléchargements
2:27 Deux personnes sur le fil RustSec sont en désaccord ; l'une trouve un service systemd. Sur Hacker News, le fil principal ne concerne pas le malware. C'est la page de la crate, où 0.3.10 n'a désormais jamais existé. Verdict, postmortem : NEEDS REVIEW. Quatre-vingt-six minutes pour supprimer, un article de blog le jour même, le compte verrouillé : cette partie est SHIP IT. Mais la page de la crate ne montre rien, cargo audit reste silencieux sur une copie
Verdict + la ligne du lundi
2:48 mise en cache, et les scripts de compilation s'exécutent toujours en tant que vous. Lundi : exécutez la commande de recherche du blog Rust, et traitez un avertissement de retrait comme une question, pas une instruction. Envoyez-moi l'incident dont vous n'êtes toujours pas autorisé à parler, dans les commentaires, ou sur the daily diff dot dev. Et c'est le diff pour aujourd'hui. Je suis Niko d'Axrisi. Fusionnez de manière responsable.
Sources
- Rust Blog, "Supply chain attack on arrayref" (security-response, Aug 20, 2026)blog.rust-lang.org
- RUSTSEC-2026-0260 (arrayref)github.com
- RustSec issue #3161 (the original report, IOCs, victims)github.com
- SafeDep technical analysissafedep.io
- GitHub issue on the repo (0.3.11 spotted)github.com
- crates.iocrates.io
- Hacker News (554 points)news.ycombinator.com
- BleepingComputerwww.bleepingcomputer.com



