Windows a rischio command injection per una falla in Rust

Rilevata una grave falla nel linguaggio di programmazione Rust che permette attacchi di tipo Injection su sistemi Windows.

Avatar di Marco Silvestri

a cura di Marco Silvestri

Editor

Una vulnerabilità critica presente nella libreria standard del linguaggio di programmazione Rust espone i sistemi operativi Windows a potenziali attacchi Command Injection. La falla, catalogata con il codice CVE-2024-24576, deriva da debolezze nella gestione dei comandi e degli argomenti del sistema operativo e permette agli aggressori di eseguire comandi imprevisti e potenzialmente dannosi.

GitHub ha classificato questa vulnerabilità come di gravità critica, attribuendole il punteggio massimo di 10/10 nella scala CVSS.

Gli attacchi possono essere condotti da aggressori non autenticati, con bassa complessità e senza necessità di interazione da parte dell'utente. Il gruppo di risposta alla sicurezza di Rust ha rilevato che la libreria standard non effettuava correttamente l'escape degli argomenti quando si invocavano file batch (con estensioni .bat e .cmd) su Windows mediante l'API Command.

Questa lacuna consente ad un attaccante, in grado di controllare gli argomenti passati al processo avviato, di eseguire comandi shell arbitrari aggirando le misure di escape. La criticità di questa vulnerabilità è massima nel caso in cui si invochino file batch su Windows con argomenti non fidati. Nessun'altra piattaforma o utilizzo risulta influenzato.

Tutte le versioni di Rust precedenti alla 1.77.2 su Windows sono vulnerabili se il codice di un programma o una delle sue dipendenze invoca ed esegue file batch con argomenti non fidati. Il team di sicurezza di Rust si è trovato di fronte a una sfida significativa nel gestire la complessità di cmd.exe, non essendo in grado di trovare una soluzione che garantisse una corretta escape degli argomenti in tutti i casi. Di conseguenza, è stato necessario migliorare la robustezza del codice di escape e modificare l'API Command. Se l'API Command non riesce a effettuare l'escape di un argomento in modo sicuro durante l'avvio del processo, restituisce un errore di InvalidInput.

Per coloro che implementano l'escape in modo autonomo o gestiscono solo input fidati su Windows, è possibile utilizzare il metodo CommandExt::raw_arg per bypassare la logica di escape della libreria standard. Nel febbraio dello stesso anno, l'Ufficio del Direttore Nazionale per la Cyber Sicurezza della Casa Bianca ha esortato le aziende tecnologiche ad adottare linguaggi di programmazione sicuri dalla prospettiva della gestione della memoria, come Rust, con l'obiettivo di migliorare la sicurezza del software riducendo il numero di vulnerabilità legate alla sicurezza della memoria.