Un crate Rust a rulat malware la compilare. 86 de minute.
Un crate Rust cu patru macro-uri și 260 de milioane de descărcări adaugă o dependență, iar `cargo build` rulează binarul unui străin pe mașina ta.
Un crate Rust cu patru macro-uri și 260 de milioane de descărcări adaugă o dependență, iar `cargo build` rulează binarul unui străin pe mașina ta. 20 august 2026: arrayref 0.3.10 aterizează pe crates.io depinzând de proc-macro1 — nu proc-macro2, cel real — al cărui script de construire descarcă un "payload", îl plasează în /tmp/rust-setup și îl lansează detașat în timp ce proiectul tău compilează. Versiunile curate sunt "yanked" astfel încât propria avertizare a lui Cargo te ghidează către cea "otrăvită". 86 de minute mai târziu este șters.
Citiți ediția scrisă (engleză) ↗
Ce acoperă acest videoclip
- cargo build rulează binarul unui străin
- Dovezile: Rust Blog, SafeDep, Hacker News
- Acesta este The Daily Diff, postmortem
- Cronologie: 02:11 staging → 07:15 publicat → 08:41 șters
- Mecanism: build.rs, fără sandbox, momeala yank
Transcrierea tradusă
Tradus din narațiunea originală în engleză. Audio-ul și subtitrările disponibile sunt controlate de YouTube.
cargo build rulează binarul unui străin
0:00 Un crate Rust cu patru macro-uri, cu un sfert de miliard de descărcări, adaugă o dependență, iar cargo build rulează un binar străin pe mașina ta. 20 august 2026. arrayref 0.3.10 aterizează pe crates.io depinzând de proc-macro1. Nu proc-macro2, cel real: o singură cifră greșită, iar scriptul său de construire rulează un payload în timp ce proiectul tău compilează. Echipa de securitate Rust îl șterge 86 de minute mai târziu.
Dovezile: Rust Blog, SafeDep, Hacker News
0:22 SafeDep publică "teardown-ul". Hacker News: 554 de puncte. Cum se întâmplă, de ce Cargo permite acest lucru și cine primește vina. Acesta este The Daily Diff, postmortem. Două dimineața, UTC.
Acesta este The Daily Diff, postmortem
0:33 Un cont numit d-tolney, o literă diferită de David Tolnay, care menține jumătate din Rust, publică proc-macro1 1.0.106: proc-macro2 real,
Cronologie: 02:11 staging → 07:15 publicat → 08:41 șters
0:41 redenumit. Staging. 07:11. Versiunea 1.0.107 adaugă un script de construire, plus base64, TLS și un client HTTP. Pentru un parser de token-uri. 07:15. Contul mentenantului republică arrayref ca 0.3.10 și șterge ("yanks") fiecare versiune mai veche. Cargo afișează: considerați actualizarea la o versiune care nu este ștersă ("yanked"). Singura rămasă este cea "otrăvită".
1:02 Avertismentul este momeala. În același minut, o firmă de securitate raportează incidentul la Rust. 07:54, o problemă RustSec. 08:29, o problemă pe depozit; atacatorul răspunde cu 0.3.11 și o a doua dependență malițioasă. 08:41, șters. Optzeci și șase de minute. De ce? Unu: Cargo construiește fiecare dependență declarată, apelată sau nu. O singură linie în manifest este suficientă.
1:21 Doi: un script de construire rulează pe mașina ta, ca tine, cu cheile tale SSH și token-ul cargo,
Mecanism: build.rs, fără sandbox, momeala yank
1:26 înainte ca codul tău să compileze. Fără sandbox, prin design: așa găsesc crate-urile bibliotecile C. Trei: în interior se află proc-macro2 real, deci construcția reușește. Payload-ul: un client TLS care are încredere în orice certificat, extrage un binar, îl plasează în /tmp/rust-setup și îl lansează detașat. Pe Windows, deturnează prin wscript pentru a scăpa de obiectul job al lui Cargo; o sursă comentariul o spune. A doua etapă, conform firului RustSec: un instrument de acces la distanță vizând
1:52 browsere și portofele crypto. Poetic, deoarece cei mai mari utilizatori ai arrayref includ secp256k1 și Solana. git blame. Modelul Cargo, cincizeci și cinci la sută: dependențele rulează cod pe mașina ta la compilare, fără sandbox, iar avertismentul "yank" a ghidat oamenii către
git blame — divizarea
2:07 otravă. Un cont, treizeci: un singur credential republică un crate în care un sfert de miliard de descărcări au încredere. Cifra unu, cincisprezece: o singură tastă de la cel mai de încredere crate Rust, și nimeni nu citește arborele. Raza de impact: 2.285 de descărcări în 86 de minute. Sub zece la sută din trafic, deoarece majoritatea fișierelor lock conțineau 0.3.9. crates.io spune că nu există dovezi de utilizare.
Raza de impact: 2.285 de descărcări
2:27 Două persoane pe firul RustSec nu sunt de acord; una găsește un serviciu systemd. Pe Hacker News, cel mai popular fir nu este despre malware. Este pagina crate-ului, unde 0.3.10 nu a existat niciodată. Verdict, postmortem: NEEDS REVIEW. Optzeci și șase de minute pentru a șterge, o postare pe blog în aceeași zi, contul blocat: acea parte este SHIP IT. Dar pagina crate-ului nu arată că s-a întâmplat nimic, cargo audit rămâne tăcut pe o copie
Verdict + linia de luni
2:48 cache, iar scripturile de construire încă rulează ca tine. Luni: rulează comanda de căutare a blogului Rust și tratează un avertisment "yank" ca o întrebare, nu o instrucțiune. Trimite-mi incidentul despre care încă nu ai voie să vorbești, în comentarii, sau la the daily diff dot dev. Și asta e diferența pentru astăzi. Sunt Niko de la Axrisi. Mergeți responsabil.
Surse
- 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



