La vulnerabilità BatBadBut, che colpisce le librerie standard di diversi linguaggi di programmazione

Le applicazioni che eseguono script in formato bat e cmd sulla piattaforma Windows utilizzando le funzioni native per l'esecuzione di processi sono vulnerabili a una falla che consente l'esecuzione di codice arbitrario nel caso di passaggio di argomenti senza una corretta escappatura dei caratteri speciali. Questa vulnerabilità è stata battezzata BatBadBut e si manifesta nelle applicazioni che utilizzano le librerie standard di linguaggi come Rust, PHP, Node.js, Python, Ruby, Go, Erlang e Haskell.

Il problema è stato etichettato come vulnerabilità poiché coinvolge funzioni di libreria come Command::arg e Command::args in Rust, progettate per la passaggio diretto degli argomenti al processo, senza l'elaborazione da parte del interprete dei comandi. Si presume che lo sviluppatore dell'applicazione possa non verificare gli argomenti, in quanto vengono passati direttamente al processo avviato. Mentre nei sistemi Unix gli argomenti vengono passati al processo singolarmente in un array, in Windows, utilizzando l'API CreateProcess, gli argomenti vengono forniti come un'unica stringa, la cui analisi ricade sul processo avviato.

Quando si eseguono script bat e cmd sulla piattaforma Windows, la funzione CreateProcess() richiama implicitamente il file eseguibile cmd.exe, anche se l'applicazione non lo specifica al momento della chiamata. Il programma cmd.exe contiene una propria logica complessa per la separazione degli argomenti, in grado di distinguere gli argomenti propri e quelli dello script in esecuzione. Per evitare la sostituzione degli argomenti sulla piattaforma Windows, le librerie standard dei linguaggi di programmazione utilizzano gestori di escaping separati, che si sono rivelati aggirabili mediante la manipolazione delle virgolette doppie.

Ad esempio, in un programma che chiama lo script ‘./test.bat’ con un argomento basato su dati forniti dall'utente, un attaccante può passare il valore ‘»&calc.exe’, che, al momento dell'esecuzione dello script, sarà espanso nella stringa ‘C:\Windows\System32\cmd.exe /c .\test.bat «»&calc.exe’ e porterà all'avvio del processo calc.exe. Questo metodo funziona anche all'avvio implicito degli script, quando viene eseguito un file eseguibile denominato “test” senza indicare l'estensione, se in una delle directory menzionate nella variabile d'ambiente PATH è presente un file “test.bat”.

Attualmente è stata rilasciata una correzione (CVE-2024-24576) per la libreria standard del linguaggio Rust ed è inclusa nell'aggiornamento Rust 1.77.2. Sono in preparazione aggiornamenti per la vulnerabilità per Node.js e PHP (sono già stati rilasciati i tag 8.2.18 e 8.3.5, ma i rilasci non sono ancora stati annunciati). I progetti Python, Ruby, Go, Erlang e Haskell hanno finora solo aggiunto una nota nella documentazione riguardante la vulnerabilità in assenza di un'adeguata escape dei caratteri speciali.

In Rust 1.77.2 è stata aggiunta un'ulteriore verifica nella libreria standard, che restituisce un errore se l'argomento di uno script in esecuzione contiene caratteri speciali che non possono essere garantiti come escapabili in modo sicuro. Per gli sviluppatori che implementano autonomamente la logica di escaping, è disponibile il metodo CommandExt::raw_arg, che disabilita completamente l'escaping lato chiamate di libreria.

L'aggiunta della protezione è ostacolata dal fatto che la semplice escapabilità delle virgolette doppie non è sufficiente, poiché l'interprete di comandi elabora e rivela variabili come «%PATH%». Ad esempio, la virgoletta può essere inserita manipolando la variabile di ambiente «%CMDCMDLINE%», specificando invece di ‘»&calc.exe’ — ‘%CMDCMDLINE:~-1%&calc.exe’.

Fonte: opennet.ru

Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster