+− THE DAILY DIFFdev & AI news
NEEDS REVIEW

Un crate Rust a exécuté un malware au moment de la compilation. 86 minutes.

Un crate Rust à quatre macros, avec 260 millions de téléchargements, ajoute une dépendance, et `cargo build` exécute le binaire d'un étranger sur votre machine.

Un crate Rust à quatre macros, avec 260 millions de téléchargements, ajoute une dépendance, et `cargo build` exécute le binaire d'un étranger sur votre machine. 20 août 2026 : arrayref 0.3.10 est publié sur crates.io et dépend de proc-macro1 – et non de 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 en tâche de fond pendant la compilation de votre projet. Les versions saines sont retirées, de sorte que l'avertissement de Cargo vous guide vers la version empoisonnée. 86 minutes plus tard, elle est supprimée.

Lire l'édition écrite (anglais) ↗

Ce que cette vidéo couvre

  • cargo build exécute le binaire d'un étranger
  • Les preuves : Rust Blog, SafeDep, Hacker News
  • Ceci est The Daily Diff, postmortem
  • Chronologie : 02:11 en attente → 07:15 publié → 08:41 supprimé
  • Mécanisme : build.rs, pas de bac à sable, l'appât "yank"

Transcription traduite

Traduit de la narration originale en anglais. L'audio et les sous-titres disponibles sont contrôlés par YouTube.

cargo build exécute le binaire d'un étranger

0:00 Un crate Rust à quatre macros avec un quart de milliard de téléchargements en ajoute une dépendance, et cargo build exécute le binaire d'un étranger sur votre machine. 20 août 2026. arrayref 0.3.10 est publié sur crates.io et dépend de proc-macro1. Non pas proc-macro2, le vrai : un chiffre en moins, et son script de construction exécute une charge utile pendant la compilation de votre projet. L'équipe de sécurité de Rust le 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 arrive, 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 nommé 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 attente → 07:15 publié → 08:41 supprimé

0:41 proc-macro2, renommé. En attente. 07:11. La version 1.0.107 ajoute un script de construction, 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 : considérez la mise à jour vers une version qui n'est pas retirée. La seule qui reste est celle qui est empoisonnée.

1:02 L'avertissement est l'appât. La même minute, une firme 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 deuxième dépendance malveillante. 08:41, supprimé. 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 construction s'exécute sur votre machine, en tant que vous, avec vos clés SSH et votre jeton

Mécanisme : build.rs, pas de bac à sable, l'appât "yank"

1:26 Cargo, avant la compilation de votre code. Pas de bac à sable, 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 construction 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 en tâche de fond. 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 ciblant

1:52 les navigateurs et les portefeuilles de crypto-monnaies. 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, pas de bac à sable, et l'avertissement de retrait a guidé les gens vers le

git blame — la scission

2:07 poison. Un compte, trente : une seule credential republie un crate en lequel un quart de milliard de téléchargements font confiance. Le chiffre un, quinze : une seule frappe de la crate la plus fiable de Rust, et personne ne lit l'arbre. Rayon d'action : 2 285 téléchargements en 86 minutes. Moins de dix pour cent du trafic, car la plupart des fichiers de verrouillage contenaient 0.3.9. crates.io ne trouve 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 du crate, où 0.3.10 n'a 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 du crate ne montre rien, cargo audit reste silencieux sur une copie en cache,

Verdict + la ligne du lundi

2:48 et les scripts de construction s'exécutent toujours en tant que vous. Lundi : exécutez la commande de recherche du blog Rust et considérez un avertissement de retrait comme une question, pas une instruction. Envoyez-moi l'incident dont vous n'avez toujours pas le droit de parler, dans les commentaires, ou à the daily diff dot dev. Et c'est la différence pour aujourd'hui. Je suis Niko d'Axrisi. Fusionnez de manière responsable.

Sources

  1. Rust Blog, "Supply chain attack on arrayref" (security-response, Aug 20, 2026)blog.rust-lang.org
  2. RUSTSEC-2026-0260 (arrayref)github.com
  3. RustSec issue #3161 (the original report, IOCs, victims)github.com
  4. SafeDep technical analysissafedep.io
  5. GitHub issue on the repo (0.3.11 spotted)github.com
  6. crates.iocrates.io
  7. Hacker News (554 points)news.ycombinator.com
  8. BleepingComputerwww.bleepingcomputer.com

Vidéos similaires