Vulnerabilitat BatBadBut que afecta les biblioteques estàndard de diversos llenguatges de programació

Aplicacions que executen scripts bat i cmd a la plataforma Windows Si s'utilitzen funcions estàndard d'inici de processos, les aplicacions són vulnerables a una vulnerabilitat que permet l'execució de codi personalitzat si es passen arguments durant l'inici sense escapar correctament els caràcters especials. La vulnerabilitat, amb nom en clau BatBadBut, afecta les aplicacions que utilitzen biblioteques estàndard en llenguatges com Rust, PHP, Node.js, Python, Ruby, Go, Erlang i Haskell.

El problema està marcat com a vulnerabilitat perquè afecta funcions de biblioteca com ara Command::arg i Command::args a Rust, que estan dissenyades per passar arguments directament a un procés sense que l'intèrpret d'ordres els processi. La implicació és que el desenvolupador de l'aplicació potser no haurà de validar els arguments, ja que es passen directament al procés iniciat. Mentre que en sistemes Unix, els arguments es passen al procés individualment en una matriu, en Windows Quan s'utilitza l'API CreateProcess, els arguments es formaten com una sola cadena, l'anàlisi sintàctica de la qual és responsabilitat del procés que s'inicia.

Quan s'executen scripts bat i cmd a la plataforma Windows La funció CreateProcess() invoca implícitament l'executable cmd.exe, fins i tot si l'aplicació no l'especifica en cridar-lo. cmd.exe conté la seva pròpia lògica complexa de divisió d'arguments per separar els seus propis arguments, l'script que s'executa i els arguments d'aquest script. Per protegir-se contra la substitució d'arguments a la plataforma Windows Les biblioteques estàndard dels llenguatges de programació utilitzen controladors d'escapament separats, que, com es veu, es poden evitar manipulant les cometes dobles.

Per exemple, en un programa que crida l'script './test.bat' amb un argument basat en dades proporcionades per l'usuari, un atacant podria passar el valor '»&calc.exe', que s'expandiria a la cadena 'C:\' quan s'executés l'script.Windows`\System32\cmd.exe /c .\test.bat ""&calc.exe"'` iniciarà el procés calc.exe. Aquest mètode també funciona amb inicis implícits de scripts, quan s'inicia un fitxer executable anomenat "test" sense especificar una extensió i hi ha un fitxer anomenat "test.bat" en un dels directoris esmentats a la variable d'entorn PATH.

Ara s'ha publicat una correcció (CVE-2024-24576) per a la biblioteca estàndard de Rust i es va incloure a l'actualització Rust 1.77.2. Les actualitzacions per eliminar la vulnerabilitat de Node.js i PHP estan en procés de preparació (les etiquetes 8.2.18 i 8.3.5 ja s'han establert, però encara no s'han anunciat les versions). Els projectes Python, Ruby, Go, Erlang i Haskell s'han limitat fins ara a incloure a la documentació un avís sobre la manifestació d'una vulnerabilitat en absència d'una escapada adequada de caràcters especials.

A Rust 1.77.2, s'ha afegit una comprovació addicional a la biblioteca estàndard que retorna un error si hi ha caràcters especials a l'argument de l'script en execució, que no es pot garantir que s'escapa de manera segura. Per als desenvolupadors que implementen de manera independent la lògica d'escapament, es proporciona el mètode CommandExt::raw_arg, que desactiva completament l'escapada al costat de les trucades de biblioteca.

El que dificulta afegir protecció és que simplement escapar de cometes dobles no és suficient, ja que l'intèrpret d'ordres processa i expandeix variables com ara "%PATH%". Per exemple, es pot substituir una cometa manipulant la variable d'entorn "%CMDCMDLINE%" especificant "%CMDCMDLINE:~-1%&calc.exe" en lloc de ""&calc.exe".

Font: opennet.ru

Compreu allotjament fiable per a llocs amb protecció DDoS, servidors VPS VDS 🔥 Compra allotjament web fiable amb protecció DDoS, servidors VPS VDS | ProHoster