A BatBadBut sérülékenység, amely különböző programozási nyelvek standard könyvtárait érinti.

A Windows platformon bat és cmd formátumú szkriptek futtatásához használt alkalmazások, amelyek a processzusok indítási funkcióit használják, sebezhetőséggel rendelkeznek, amely lehetővé teszi, hogy a támadó saját kódját futtassa, ha indításkor az érvek átadása nélkül külön kitakarás nem történik. A sebezhetőséget BatBadBut néven emlegetik, és olyan alkalmazásokban fordul elő, amelyek a Rust, PHP, Node.js, Python, Ruby, Go, Erlang és Haskell standard könyvtárait használják.

A problémát sebezhetőségként említik, mivel érinti a könyvtár funkcióit, mint például a Command::arg és a Command::args Rustban, amelyek közvetlenül adják át az érveket a folyamatnak a parancsértelmező feldolgozása nélkül. Feltételezik, hogy az alkalmazás fejlesztője nem ellenőrzi az érveket, mivel azok közvetlenül a futtatott folyamathoz kerülnek átadásra. Míg Unix rendszerekben az érveket külön tömbként adják át a folyamatnak, Windows alatt a CreateProcess API használata során az érvek egyetlen sorba kerülnek, amelynek elemzése a futtatott folyamatra hárul.

Windows platformon a bat és cmd szkriptek futtatásakor a CreateProcess() funkció implicit módon bevonja a cmd.exe futtatható fájlt, még akkor is, ha az alkalmazás nem jelzi azt a híváskor. A cmd.exe program saját összetett logikát tartalmaz az érvek elválasztására, hogy megkülönböztesse a saját paramétereit, a futtatott szkriptet és annak érveit. A Windows platformon a programozási nyelvek standard könyvtáraiban használt külön érvelési védelmek, amelyek az érvek behelyettesítése ellen védelmet nyújtanak, úgy tűnik, megkerülhetők a dupla idézőjelek manipulálásával.

Például egy olyan programban, amely a felhasználótól kapott adatok alapján a ‘./test.bat’ szkriptet hívja meg egy érvel, a támadó átadhatja az ‘»&calc.exe’ értéket, amely szkriptfuttatáskor a következőképpen bontódik le: ‘C:\Windows\System32\cmd.exe /c .\test.bat «»&calc.exe’ és a calc.exe folyamat elindításához vezet. A módszer működik anélkül, hogy a szkriptek nyilvánvalóan indulnának, amikor a 'test' névvel rendelkező futtatható fájl indul, anélkül, hogy a kiterjesztést megadnák, és a PATH környezeti változóban említett könyvtárak egyikében jelen van a 'test.bat' fájl.

Jelenleg már kiadták a Rust nyelv standard könyvtárához készült javítást (CVE-2024-24576), amely a Rust 1.77.2 frissítésbe került. Az Node.js és PHP sebezhetőségének javítására készülő frissítések folyamatban vannak (a 8.2.18 és 8.3.5 jelölések már ki lettek állítva, de a kiadások még nem lettek bejelentve). A Python, Ruby, Go, Erlang és Haskell projektek egyelőre csak a dokumentációban figyelmeztetnek a sebezhetőség megjelenésére a speciális karakterek megfelelő elrejtésének hiányában.

A Rust 1.77.2-ben a standard könyvtárhoz egy új ellenőrzés került hozzáadásra, amely hibaüzenetet ad vissza, ha a futtatni kívánt szkript argumentumában olyan speciális karakterek találhatók, amelyeket nem lehet garantáltan biztonságosan elrejteni. A saját elrejtési logikát megvalósító fejlesztők számára elérhető a CommandExt::raw_arg metódus, amely teljesen letiltja az elrejtést a könyvtári hívások oldalán.

A védelem hozzáadását nehezíti, hogy a dupla idézőjelek egyszerű elrejtése nem elegendő, mivel a parancsértelmező feldolgozza és kinyitja az olyan változókat, mint a „%PATH%”. Például az idézőjelet úgy lehet behelyettesíteni, hogy manipuláljuk a környezeti változót „%CMDCMDLINE%”, és a „'&calc.exe'” helyett a „'%CMDCMDLINE:~-1%&calc.exe'” -t adunk meg.

Forrás: opennet.ru

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster