+− THE DAILY DIFFdev & AI news
NEEDS REVIEW

En Rust crate körde skadlig programvara vid kompilering. 86 minuter.

En Rust crate med fyra makron och 260 miljoner nedladdningar lägger till ett beroende, och `cargo build` kör en främlings binärfil på din maskin.

En Rust crate med fyra makron och 260 miljoner nedladdningar lägger till ett beroende, och `cargo build` kör en främlings binärfil på din maskin. 20 augusti 2026: arrayref 0.3.10 landar på crates.io beroende på proc-macro1 — inte proc-macro2, den riktiga — vars byggskript laddar ner en nyttolast, släpper den i /tmp/rust-setup och startar den fristående medan ditt projekt kompileras. De rena versionerna dras tillbaka så Cargos egen varning leder dig till den förgiftade. 86 minuter senare raderas den.

Läs den skrivna upplagan (engelska) ↗

Vad den här videon täcker

  • cargo build kör en främlings binärfil
  • Kvittona: Rust Blog, SafeDep, Hacker News
  • Detta är The Daily Diff, postmortem
  • Tidslinje: 02:11 staging → 07:15 publicerad → 08:41 raderad
  • Mekanism: build.rs, ingen sandlåda, yank-lockelsen

Översatt transkription

Översatt från den ursprungliga engelska berättelsen. Tillgängligt ljud och undertexter styrs av YouTube.

cargo build kör en främlings binärfil

0:00 En Rust crate med fyra makron och en kvarts miljard nedladdningar lägger till ett beroende, och cargo build kör en främlings binärfil på din maskin. 20 augusti 2026. arrayref 0.3.10 landar på crates.io beroende på proc-macro1. Inte proc-macro2, den riktiga: en siffra fel, och dess byggskript kör en nyttolast medan ditt projekt kompileras. Rusts säkerhetsteam raderar den 86 minuter senare.

Kvittona: Rust Blog, SafeDep, Hacker News

0:22 SafeDep publicerar genomgången. Hacker News: 554 poäng. Hur det händer, varför Cargo tillåter det, och vem som får skulden. Detta är The Daily Diff, postmortem. Två på morgonen, UTC.

Detta är The Daily Diff, postmortem

0:33 Ett konto kallat d-tolney, en bokstav från David Tolnay, som underhåller hälften av Rust, publicerar proc-macro1 1.0.106: riktig

Tidslinje: 02:11 staging → 07:15 publicerad → 08:41 raderad

0:41 proc-macro2, omdöpt. Staging. 07:11. Version 1.0.107 lägger till ett byggskript, plus base64, TLS och en HTTP-klient. För en tokenparser. 07:15. Underhållarens konto publicerar arrayref igen som 0.3.10 och drar tillbaka alla äldre versioner. Cargo skriver ut: överväg att uppdatera till en version som inte är tillbakadragen. Den enda som återstår är den förgiftade.

1:02 Varningen är lockelsen. Samma minut rapporterar ett säkerhetsföretag det till Rust. 07:54, ett RustSec-ärende. 08:29, ett ärende på repot; angriparen svarar med 0.3.11 och ett andra skadligt beroende. 08:41, raderat. Åttiosex minuter. Varför? Ett: Cargo bygger varje deklarerat beroende, oavsett om det anropas eller inte. En manifestrad räcker.

1:21 Två: ett byggskript körs på din maskin, som du, med dina SSH-nycklar och cargo

Mekanism: build.rs, ingen sandlåda, yank-lockelsen

1:26 token, innan din kod kompileras. Ingen sandlåda, med avsikt: det är så crates hittar C-bibliotek. Tre: inuti finns den riktiga proc-macro2, så byggandet lyckas. Nyttolasten: en TLS-klient som litar på alla certifikat hämtar en binärfil, släpper den i /tmp/rust-setup och startar den fristående. På Windows går den via wscript för att undvika Cargos jobbobjekt; en källkommentar säger det. Det andra steget, enligt RustSec-tråden: ett verktyg för fjärråtkomst riktat mot

1:52 webbläsare och kryptoplånböcker. Poetiskt, eftersom arrayrefs största användare inkluderar secp256k1 och Solana. git blame. Cargos modell, femtiofem procent: beroenden kör kod på din maskin vid kompilering, ingen sandlåda, och yank-varningen ledde folk till

git blame — uppdelningen

2:07 giftet. Ett konto, trettio: en referens publicerar en crate som en kvarts miljard nedladdningar litar på. Siffran ett, femton: ett tangenttryck från Rusts mest betrodda crate, och ingen läser trädet. Skadeomfång: 2 285 nedladdningar på 86 minuter. Under tio procent av trafiken, eftersom de flesta lockfiles höll 0.3.9. crates.io säger inga bevis på användning.

Skadeomfång: 2 285 nedladdningar

2:27 Två personer i RustSec-tråden håller inte med; en hittar en systemd-tjänst. På Hacker News handlar den översta tråden inte om den skadliga programvaran. Det är crate-sidan, där 0.3.10 nu aldrig existerade. Dom, postmortem: NEEDS REVIEW. Åttiosex minuter att radera, ett blogginlägg samma dag, kontot låst: den delen är SHIP IT. Men crate-sidan visar att inget hände, cargo audit förblir tyst om en cachad

Dom + måndagslinjen

2:48 kopia, och byggskript körs fortfarande som du. Måndag: kör Rust-bloggens find-kommando, och behandla en yank-varning som en fråga, inte en instruktion. Skicka mig incidenten du fortfarande inte får prata om, i kommentarerna, eller på the daily diff dot dev. Och det är diffen för idag. Jag är Niko från Axrisi. Slå ihop ansvarsfullt.

Källor

  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

Relaterade videor