Crate Rust uruchomił złośliwe oprogramowanie w czasie kompilacji. 86 minut.
Crate Rust z czterema makrami i 260 milionami pobrań dodaje jedną zależność, a `cargo build` uruchamia obcy plik binarny na Twojej maszynie.
Crate Rust z czterema makrami i 260 milionami pobrań dodaje jedną zależność, a `cargo build` uruchamia obcy plik binarny na Twojej maszynie. 20 sierpnia 2026: arrayref 0.3.10 trafia na crates.io, zależąc od proc-macro1 — nie proc-macro2, tego prawdziwego — którego skrypt kompilacji pobiera ładunek, umieszcza go w /tmp/rust-setup i uruchamia w tle, podczas gdy Twój projekt się kompiluje. Czyste wersje są wycofane, więc własne ostrzeżenie Cargo prowadzi Cię do zatrutej wersji. 86 minut później zostaje usunięty.
Przeczytaj wydanie pisemne (angielski) ↗
Co obejmuje ten film
- cargo build uruchamia obcy plik binarny
- Potwierdzenia: Rust Blog, SafeDep, Hacker News
- To jest The Daily Diff, postmortem
- Oś czasu: 02:11 staging → 07:15 opublikowane → 08:41 usunięte
- Mechanizm: build.rs, brak piaskownicy, przynęta na wycofane
Przetłumaczona transkrypcja
Przetłumaczono z oryginalnej narracji angielskiej. Dostępne audio i napisy są kontrolowane przez YouTube.
cargo build uruchamia obcy plik binarny
0:00 Crate Rust z czterema makrami i ćwiercią miliarda pobrań dodaje jedną zależność, a cargo build uruchamia obcy plik binarny na Twojej maszynie. 20 sierpnia 2026. arrayref 0.3.10 trafia na crates.io, zależąc od proc-macro1. Nie proc-macro2, tego prawdziwego: jedna cyfra różnicy, a jego skrypt kompilacji uruchamia ładunek, podczas gdy Twój projekt się kompiluje. Zespół bezpieczeństwa Rust usuwa go 86 minut później.
Potwierdzenia: Rust Blog, SafeDep, Hacker News
0:22 SafeDep publikuje analizę. Hacker News: 554 punkty. Jak to się dzieje, dlaczego Cargo na to pozwala i kto ponosi winę. To jest The Daily Diff, postmortem. Druga w nocy, UTC.
To jest The Daily Diff, postmortem
0:33 Konto o nazwie d-tolney, jedna litera od David Tolnay, który utrzymuje połowę Rust, publikuje proc-macro1 1.0.106: prawdziwy
Oś czasu: 02:11 staging → 07:15 opublikowane → 08:41 usunięte
0:41 proc-macro2, zmieniony. Staging. 07:11. Wersja 1.0.107 dodaje skrypt kompilacji, plus base64, TLS i klienta HTTP. Dla parsera tokenów. 07:15. Konto opiekuna ponownie publikuje arrayref jako 0.3.10 i wycofuje każdą starszą wersję. Cargo drukuje: rozważ aktualizację do wersji, która nie została wycofana. Jedyną pozostałą jest zatruta.
1:02 Ostrzeżenie jest przynętą. W tej samej minucie firma ochroniarska zgłasza to do Rust. 07:54, problem RustSec. 08:29, problem w repozytorium; atakujący odpowiada z 0.3.11 i drugą złośliwą zależnością. 08:41, usunięte. Osiemdziesiąt sześć minut. Dlaczego? Jeden: Cargo buduje każdą zadeklarowaną zależność, wywołaną lub nie. Wystarczy jedna linia manifestu.
1:21 Dwa: skrypt kompilacji działa na Twojej maszynie, jako Ty, z Twoimi kluczami SSH i tokenem cargo,
Mechanizm: build.rs, brak piaskownicy, przynęta na wycofane
1:26 zanim Twój kod się skompiluje. Brak piaskownicy, z założenia: tak crate'y znajdują biblioteki C. Trzy: wewnątrz jest prawdziwy proc-macro2, więc kompilacja się udaje. Ładunek: klient TLS, który ufa każdemu certyfikatowi, pobiera plik binarny, umieszcza go w /tmp/rust-setup i uruchamia w tle. Na Windowsie omija poprzez wscript, aby uciec przed obiektem zadania Cargo; tak mówi komentarz źródłowy. Drugi etap, według wątku RustSec: narzędzie zdalnego dostępu skierowane na
1:52 przeglądarki i portfele krypto. Poetyckie, ponieważ największymi użytkownikami arrayref są secp256k1 i Solana. git blame. Model Cargo, pięćdziesiąt pięć procent: zależności uruchamiają kod na Twojej maszynie w czasie kompilacji, bez piaskownicy, a ostrzeżenie o wycofaniu prowadziło ludzi do
git blame — podział
2:07 trucizny. Jedno konto, trzydzieści: jedno poświadczenie ponownie publikuje crate, któremu ćwierć miliarda pobrań ufa. Cyfra jeden, piętnaście: jedno naciśnięcie klawisza z najbardziej zaufanego crate'a Rust, i nikt nie czyta drzewa. Promień rażenia: 2285 pobrań w 86 minut. Poniżej dziesięciu procent ruchu, ponieważ większość lockfiles zawierała 0.3.9. crates.io mówi o braku dowodów użycia.
Promień rażenia: 2285 pobrań
2:27 Dwie osoby w wątku RustSec nie zgadzają się; jedna znajduje usługę systemd. Na Hacker News główny wątek nie dotyczy złośliwego oprogramowania. To strona crate'a, gdzie 0.3.10 teraz nigdy nie istniało. Werdykt, postmortem: NEEDS REVIEW. Osiemdziesiąt sześć minut na usunięcie, wpis na blogu tego samego dnia, konto zablokowane: ta część to SHIP IT. Ale strona crate'a pokazuje, że nic się nie stało, cargo audit milczy na temat buforowanej
Werdykt + linia poniedziałkowa
2:48 kopii, a skrypty kompilacji nadal działają jako Ty. Poniedziałek: uruchom polecenie find z bloga Rust i traktuj ostrzeżenie o wycofaniu jako pytanie, a nie instrukcję. Wyślij mi incydent, o którym nadal nie wolno Ci mówić, w komentarzach, lub na the daily diff dot dev. I to tyle na dziś. Jestem Niko z Axrisi. Łącz odpowiedzialnie.
Źródła
- 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



