Le applicazioni Windows spesso utilizzano una funzione di sistema chiamata CreateProcess che permette di avviare un nuovo processo. Essenzialmente, consente a un programma di caricare un'altra applicazione come processo separato. La funzione CreateProcess()
è spesso utilizzata nei programmi per eseguire altre applicazioni o comandi. Un ricercatore, ingegnere specializzato nelle problematiche relative alla sicurezza presso Flatt Security, racconta che non possiamo eseguire comandi Windows in modo sicuro.
L'esperto specifica di aver segnalato alcune vulnerabilità in diversi linguaggi di programmazione: consentono a un utente malintenzionato di eseguire l'iniezione di comandi su Windows quando ricorrono specifiche condizioni.
Eseguire comandi Windows: non lo si può fare in sicurezza
Le vulnerabilità complessivamente battezzate BatBadBut danno modo a un aggressore di iniettare comandi in tutte quelle applicazioni Windows che dipendono indirettamente dalla funzione CreateProcess()
, in casi specifici. Tale funzione avvia implicitamente cmd.exe
quando esegue file batch (.bat
, .cmd
, e così via…), anche se il programma non li utilizza a livello di riga di comando.
Il problema scaturisce dal fatto che cmd.exe
ha regole complicate per l'analisi degli argomenti dei comandi e i runtime dei linguaggi di programmazione spesso non riescono a gestire il cosiddetto escape in modo adeguato.
L'escape degli argomenti si riferisce alla procedura che consiste nel rendere sicuri gli argomenti di un comando in modo che essi possano essere interpretati correttamente, ad esempio da cmd.exe
in Windows. La riga di comando dei sistemi operativi Microsoft utilizza regole specifiche per l'interpretazione degli argomenti. Queste regole includono la gestione dei caratteri speciali, per evitare che possano provocare effetti indesiderati o potenzialmente dannosi.
I dettagli tecnici della vulnerabilità BatBadBut
La vulnerabilità BatBadBut sfrutta il modo con il quale i sistemi operativi Windows si occupano dell'esecuzione dei file batch attraverso la funzione CreateProcess()
. Un componente di sistema come cmd.exe
ha regole di parsing degli argomenti dei comandi che differiscono da quelle degli altri interpreti.
Ad esempio, utilizza il simbolo `^` come carattere di escape anziché il backslash (`\`): questo significa che la gestione degli escape degli argomenti deve essere fatta in modo specifico per cmd.exe
.
Alcuni linguaggi di programmazione non effettuano l'escape degli argomenti in modo adeguato quando si utilizzano file batch. Questo può portare a situazioni in cui i caratteri speciali o i comandi dannosi, passati come argomenti, possono essere interpretati erroneamente e quindi successivamente eseguiti.
Un malintenzionato potrebbe sfruttare la vulnerabilità per eseguire comandi dannosi o non autorizzati sul sistema: questo nel caso in cui riesca a controllare gli argomenti passati ai file batch.
Per attenuare la vulnerabilità, è necessario assicurarsi che gli argomenti trasferiti ai file batch siano correttamente sottoposti a escape e che le regole specifiche di parsing di cmd.exe
siano accuratamente rispettate.
Linguaggi di programmazione interessati dalla vulnerbailità
I linguaggi di programmazione identificati come vulnerabili o potenzialmente vulnerabili a BatBadBut, includono i seguenti:
- Python, Ruby, Go ed Erlang: documentazione aggiornata, con le informazioni per affrontare la problematica di sicurezza.
- Rust e Haskell: patch già disponibile.
- Java: non è prevista alcuna correzione per questa vulnerabilità.
- Node.js e PHP: sarà rilasciata una patch correttiva per affrontare la vulnerabilità.
È importante notare che nel caso di alcuni linguaggi si è ritenuto opportuno gestire la cosa attraverso un semplice aggiornamento della documentazione, mentre in altri frangenti si lavora su patch per la correzione della vulnerabilità.
Da dove nasce il nome BatBadBut
Il nome BatBadBut, scelto per riferirsi alla lacuna di sicurezza oggetto di trattazione, deriva dalla combinazione di due elementi:
- Bat: Si riferisce ai file batch, che sono tipicamente script utilizzabili sui sistemi operativi Windows. Questi file sono noti per l'automatizzazione dei processi e per l'esecuzione di una serie di comandi in sequenza.
- BadBut: È una sorta di gioco di parole che deriva dalla parola "bad" (cattivo) e "but" (ma). È indizio del fatto che la vulnerabilità in questione è legata al comportamento "cattivo" o indesiderato dei file batch. Potrebbe non essere la falla di sicurezza più pericolosa in assoluto ma deve essere conosciuta e correttamente gestita.
Credit immagine in apertura: iStock.com – Jacob Wackerhausen