Una crate Rust ha eseguito malware in fase di compilazione. 86 minuti.
Una crate Rust a quattro macro con 260 milioni di download aggiunge una dipendenza, e `cargo build` esegue un binario sconosciuto sulla tua macchina.
Una crate Rust a quattro macro con 260 milioni di download aggiunge una dipendenza, e `cargo build` esegue un binario sconosciuto sulla tua macchina. 20 agosto 2026: arrayref 0.3.10 arriva su crates.io dipendente da proc-macro1 — non proc-macro2, quello vero — il cui script di build scarica un payload, lo rilascia in /tmp/rust-setup e lo avvia in modalità detached mentre il tuo progetto compila. Le versioni pulite vengono ritirate in modo che l'avviso di Cargo ti indirizzi a quella infetta. 86 minuti dopo viene eliminato.
Leggi l'edizione scritta (inglese) ↗
Contenuto di questo video
- cargo build esegue un binario sconosciuto
- Le ricevute: Rust Blog, SafeDep, Hacker News
- Questo è The Daily Diff, postmortem
- Cronologia: 02:11 staging → 07:15 pubblicato → 08:41 eliminato
- Meccanismo: build.rs, nessuna sandbox, l'esca del ritiro
Trascrizione tradotta
Tradotto dalla narrazione originale inglese. L'audio e i sottotitoli disponibili sono controllati da YouTube.
cargo build esegue un binario sconosciuto
0:00 Una crate Rust a quattro macro con un quarto di miliardo di download ne aggiunge una dipendenza, e cargo build esegue un binario sconosciuto sulla tua macchina. 20 agosto 2026. arrayref 0.3.10 arriva su crates.io dipendente da proc-macro1. Non proc-macro2, quello vero: una cifra sbagliata, e il suo script di build esegue un payload mentre il tuo progetto compila. Il team di sicurezza di Rust lo elimina 86 minuti dopo.
Le ricevute: Rust Blog, SafeDep, Hacker News
0:22 SafeDep pubblica la disamina. Hacker News: 554 punti. Come succede, perché Cargo lo permette e di chi è la colpa. Questo è The Daily Diff, postmortem. Le due del mattino, UTC.
Questo è The Daily Diff, postmortem
0:33 Un account chiamato d-tolney, una lettera da David Tolnay, che mantiene metà di Rust, pubblica proc-macro1 1.0.106: il vero
Cronologia: 02:11 staging → 07:15 pubblicato → 08:41 eliminato
0:41 proc-macro2, rinominato. Staging. 07:11. La versione 1.0.107 aggiunge uno script di build, più base64, TLS e un client HTTP. Per un parser di token. 07:15. L'account del manutentore ripubblica arrayref come 0.3.10 e ritira ogni versione precedente. Cargo stampa: considera l'aggiornamento a una versione che non è stata ritirata. L'unica rimasta è quella infetta.
1:02 L'avviso è l'esca. Nello stesso minuto, un'azienda di sicurezza lo segnala a Rust. 07:54, un problema RustSec. 08:29, un problema sulla repo; l'attaccante risponde con 0.3.11 e una seconda dipendenza malevola. 08:41, eliminato. Ottantasei minuti. Perché? Uno: Cargo compila ogni dipendenza dichiarata, chiamata o meno. Una riga nel manifesto è sufficiente.
1:21 Due: uno script di build viene eseguito sulla tua macchina, come te, con le tue chiavi SSH e il token di cargo,
Meccanismo: build.rs, nessuna sandbox, l'esca del ritiro
1:26 prima che il tuo codice compili. Nessuna sandbox, per design: è così che le crate trovano le librerie C. Tre: all'interno c'è il vero proc-macro2, quindi la build riesce. Il payload: un client TLS che si fida di qualsiasi certificato recupera un binario, lo rilascia in /tmp/rust-setup e lo avvia in modalità detached. Su Windows si devia tramite wscript per sfuggire all'oggetto job di Cargo; un commento del codice lo afferma. Il secondo stadio, secondo il thread di RustSec: uno strumento di accesso remoto mirato a
1:52 browser e wallet di criptovalute. Poetico, dato che i maggiori utilizzatori di arrayref includono secp256k1 e Solana. git blame. Il modello di Cargo, cinquantacinque percento: le dipendenze eseguono codice sulla tua macchina in fase di compilazione, nessuna sandbox, e l'avviso di ritiro ha indirizzato le persone al
git blame — la divisione
2:07 veleno. Un account, trenta: una credenziale ripubblica una crate di un quarto di miliardo di download si fida. La cifra uno, quindici: una battitura dalla crate più fidata di Rust, e nessuno legge l'albero. Raggio d'azione: 2.285 download in 86 minuti. Meno del dieci percento del traffico, perché la maggior parte dei lockfile conteneva 0.3.9. crates.io dice nessuna prova di utilizzo.
Raggio d'azione: 2.285 download
2:27 Due persone sul thread di RustSec non sono d'accordo; una trova un servizio systemd. Su Hacker News il thread principale non riguarda il malware. È la pagina della crate, dove 0.3.10 ora non è mai esistita. Verdetto, postmortem: NEEDS REVIEW. Ottantasei minuti per eliminare, un post sul blog lo stesso giorno, l'account bloccato: questa parte è SHIP IT. Ma la pagina della crate mostra che nulla è successo, cargo audit rimane in silenzio su una copia
Verdetto + la linea di lunedì
2:48 cache, e gli script di build vengono ancora eseguiti come te. Lunedì: esegui il comando find del blog di Rust e tratta un avviso di ritiro come una domanda, non un'istruzione. Inviami l'incidente di cui non ti è ancora permesso parlare, nei commenti, o su the daily diff dot dev. E questa è la differenza per oggi. Sono Niko di Axrisi. Unisci responsabilmente.
Fonti
- 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



