Vulnerabilità BatBadBut che coinvolge le librerie standard di vari linguaggi di programmazione.

Le applicazioni che eseguono script in formato bat e cmd sulla piattaforma Windows utilizzando le funzioni di avvio dei processi standard sono vulnerabili a un problema che potrebbe consentire l'esecuzione di codice non autorizzato nel caso in cui vengano passati argomenti all'avvio senza un'adeguata escape dei caratteri speciali. Questa vulnerabilità ha ricevuto il nome in codice 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 è considerato una vulnerabilità poiché coinvolge funzioni di libreria come Command::arg e Command::args in Rust, che sono progettate per trasmettere direttamente gli argomenti al processo senza elaborazione da parte dell'interprete di comandi. Si presume che lo sviluppatore dell'applicazione possa non controllare gli argomenti, poiché vengono passati direttamente al processo avviato. Mentre nei sistemi Unix gli argomenti vengono passati al processo uno alla volta in un array, in Windows, utilizzando l'API CreateProcess, gli argomenti sono presentati come una singola stringa, il cui parsing è a carico del 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 durante la chiamata. Il programma cmd.exe contiene una logica complessa per la separazione degli argomenti, per distinguere tra i propri argomenti, quelli dello script eseguito e gli argomenti di questo script. Per proteggere da sostituzioni di argomenti sulla piattaforma Windows, le librerie standard dei linguaggi di programmazione utilizzano handler di escape separati, che, come si è scoperto, possono essere aggirati manipolando le virgolette doppie.

Ad esempio, in un programma che chiama lo script ‘./test.bat’ con un argomento basato su dati forniti dall'utente, un attaccante potrebbe passare il valore ‘»&calc.exe’, che, all'esecuzione dello script, verrebbe espanso nella stringa ‘C:\Windows\System32\cmd.exe /c .\test.bat «»&calc.exe’ e porterebbe all'avvio del processo calc.exe. Questo metodo funziona anche quando si avviano script in modo implicito, quando si avvia il file eseguibile con il nome ‘test’ senza specificare l'estensione, e in uno dei percorsi elencati nella variabile PATH si trova il 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 fase di preparazione aggiornamenti per risolvere la vulnerabilità in Node.js e PHP (sono già stati emessi i tag 8.2.18 e 8.3.5, ma i rilasci non sono stati ancora annunciati). I progetti Python, Ruby, Go, Erlang e Haskell si sono limitati a inserire un avviso nella documentazione riguardo alla vulnerabilità che si manifesta in assenza di un adeguato escaping dei caratteri speciali.

In Rust 1.77.2 è stata aggiunta un'ulteriore verifica nella libreria standard, che restituisce un errore quando ci sono caratteri speciali negli argomenti di uno script eseguibile, per i quali non è possibile garantire un'adeguata sicurezza durante l'escaping. Per gli sviluppatori che implementano autonomamente la logica di escaping, è fornito il metodo CommandExt::raw_arg, che disabilita completamente l'escaping a livello di chiamate di libreria.

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

Fonte: opennet.ru

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