En Rust-crate kørte malware under kompilering. 86 minutter.
En Rust-crate med fire makroer og 260 millioner downloads tilføjer en afhængighed, og `cargo build` kører en fremmeds binære fil på din maskine.
En Rust-crate med fire makroer og 260 millioner downloads tilføjer en afhængighed, og `cargo build` kører en fremmeds binære fil på din maskine. 20. august 2026: arrayref 0.3.10 lander på crates.io afhængig af proc-macro1 – ikke proc-macro2, den rigtige – hvis build-script downloader en payload, placerer den i /tmp/rust-setup og starter den fritliggende, mens dit projekt kompileres. De rene versioner "yankes", så Cargos egen advarsel fører dig til den forgiftede. 86 minutter senere slettes den.
Læs den skriftlige udgave (engelsk) ↗
Hvad denne video dækker
- cargo build kører en fremmeds binære fil
- Kvitteringerne: Rust Blog, SafeDep, Hacker News
- Dette er The Daily Diff, postmortem
- Tidslinje: 02:11 staging → 07:15 publiceret → 08:41 slettet
- Mekanisme: build.rs, ingen sandkasse, "yank"-lokkemidlet
Oversat udskrift
Oversat fra den originale engelske fortælling. Tilgængelig lyd og undertekster styres af YouTube.
cargo build kører en fremmeds binære fil
0:00 En Rust-crate med en kvart milliard downloads tilføjer en afhængighed, og cargo build kører en fremmeds binære fil på din maskine. 20. august 2026. arrayref 0.3.10 lander på crates.io afhængig af proc-macro1. Ikke proc-macro2, den rigtige: en cifferfejl, og dens build-script kører en payload, mens dit projekt kompilerer. Rusts sikkerhedsteam sletter den 86 minutter senere.
Kvitteringerne: Rust Blog, SafeDep, Hacker News
0:22 SafeDep publicerer nedbrydningen. Hacker News: 554 point. Hvordan det sker, hvorfor Cargo tillader det, og hvem der får skylden. Dette er The Daily Diff, postmortem. Klokken to om morgenen, UTC.
Dette er The Daily Diff, postmortem
0:33 En konto kaldet d-tolney, en bogstavs forskel fra David Tolnay, som vedligeholder halvdelen af Rust, publicerer proc-macro1 1.0.106: den rigtige
Tidslinje: 02:11 staging → 07:15 publiceret → 08:41 slettet
0:41 proc-macro2, omdøbt. Staging. 07:11. Version 1.0.107 tilføjer et build-script, plus base64, TLS og en HTTP-klient. Til en token-parser. 07:15. Vedligeholderens konto genpublicerer arrayref som 0.3.10 og yanker hver ældre version. Cargo skriver ud: overvej at opdatere til en version, der ikke er yanked. Den eneste tilbage er den forgiftede.
1:02 Advarslen er lokkemidlet. Samme minut rapporterer et sikkerhedsfirma det til Rust. 07:54, et RustSec-problem. 08:29, et problem på repo'et; angriberen svarer med 0.3.11 og en anden ondskabsfuld afhængighed. 08:41, slettet. Otteogtres minutter. Hvorfor? Én: Cargo bygger hver deklareret afhængighed, uanset om den kaldes eller ej. En manifestlinje er nok.
1:21 To: et build-script kører på din maskine, som dig, med dine SSH-nøgler og cargo-
Mekanisme: build.rs, ingen sandkasse, "yank"-lokkemidlet
1:26 token, før din kode kompilerer. Ingen sandkasse, efter design: det er sådan crates finder C-biblioteker. Tre: indeni er ægte proc-macro2, så buildet lykkes. Payloaden: en TLS-klient, der stoler på ethvert certifikat, henter en binær fil, lægger den i /tmp/rust-setup og starter den fritliggende. På Windows afledes den via wscript for at undslippe Cargos jobobjekt; en kilde- kommentar siger det. Anden fase, ifølge RustSec-tråden: et fjernadgangsværktøj rettet mod
1:52 browsere og krypto-tegnebøger. Poetisk, da arrayrefs største brugere inkluderer secp256k1 og Solana. git blame. Cargos model, femoghalvtreds procent: afhængigheder kører kode på din maskine ved kompileringstidspunktet, ingen sandkasse, og "yank"-advarslen ledte folk til
git blame — splittelsen
2:07 giften. Én konto, tredive: én legitimationsoplysning genpublicerer en crate, som en kvart milliard downloads stoler på. Tallet ét, femten: ét tastetryk fra Rusts mest betroede crate, og ingen læser træet. Skaderadius: 2.285 downloads på 86 minutter. Under ti procent af trafikken, fordi de fleste lockfiles indeholdt 0.3.9. crates.io siger ingen beviser for brug.
Skaderadius: 2.285 downloads
2:27 To personer i RustSec-tråden er uenige; den ene finder en systemd-tjeneste. På Hacker News handler top-tråden ikke om malwaren. Det er crate-siden, hvor 0.3.10 nu aldrig eksisterede. Dom, postmortem: NEEDS REVIEW. Otteogtres minutter til at slette, et blogindlæg samme dag, kontoen låst: den del er SHIP IT. Men crate-siden viser, at intet skete, cargo audit forbliver tavs om en cached
Dom + mandagslinjen
2:48 kopi, og build-scripts kører stadig som dig. Mandag: kør Rust-bloggens find-kommando, og behandl en "yank"-advarsel som et spørgsmål, ikke en instruktion. Send mig hændelsen, du stadig ikke må tale om, i kommentarerne, eller på the daily diff dot dev. Og det er The Daily Diff for i dag. Jeg er Niko fra Axrisi. Merge ansvarligt.
Kilder
- 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



