
La prossima volta che lanciate un «cargo build» e vi rilassate aspettando che il compilatore faccia il suo lavoro, ricordatevi che potreste stare involontariamente eseguendo un payload di un hacker sconosciuto sul vostro sistema.
Non è un’ipotesi da film distopico tipo «Mr. Robot», è quello che è successo di recente con il crate «arrayref». In pratica, qualcuno ha giocato sporco usando il classico trucco del typosquatting: ha creato una versione quasi identica a quella originale, una specie di doppieggio sfigato, chiamata «proc-macro1», per ingannare gli sviluppatori meno attenti. Il problema non è solo il nome simile, ma quello che questo pacchetto fa sotto il cofano durante la fase di compilazione.
Per chi non mastica Rust con la stessa intensità con cui mastica pizza e codice, le macro procedurali sono strumenti potentissimi che permettono di generare codice durante la compilazione. Il trucco qui è che il build script di questa versione malevola si sveglia, si connette a un server remoto e scarica un binario precompilato. In pratica, mentre il vostro computer cercava di risolvere dei tipi di dati, stava anche installando un malware silente.
È il classico scenario in cui la comodità dell’ecosistema moderno si trasforma in un’arma. Sappiamo tutti che la gestione delle dipendenze è un campo minato, ma quando un attacco sfrutta proprio la logica del compilatore, la questione diventa seria. Non è una legge che arriva da Bruxelles a dirci come dobbiamo programmare (per fortuna, qui non stiamo parlando di regolamenti burocratici che complicano solo la vita), ma è un richiamo alla responsabilità di chi scrive codice.
Certo, potremmo dire che la colpa è di chi ha creato il pacchetto malevolo, ma la vera lezione qui riguarda la fiducia cieca. In un mondo dove basta un errore di battitura nel file Cargo.toml per compromettere la propria macchina, l’idea di ‘importare e dimenticare’ sta diventando pericolosamente obsoleta. Se usate macro procedurali o script di build che toccano la rete, state fondamentalmente aprendo una porta sul retro della vostra workstation.
Quindi, un consiglio da amico: controllate i nomi, leggete i build script e, se potete, fate girare le build in ambienti isolati. Non vogliamo che il vostro prossimo progetto open source finisca per far parte di una botnet russa mentre cercate solo di implementare un array più efficiente.
Source: Malicious Rust crate Arrayref runs a build-time payload
