+− THE DAILY DIFFdev & AI news
NEEDS REVIEW

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

  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

Powiązane filmy