A Python biztonsági rése, amely lehetővé teszi rendszerparancsok meghívását elkülönített szkriptekből

Kiadtak egy módszert az elszigetelt kódvégrehajtó rendszerek megkerülésére a Pythonban, amely egy régóta ismert, a Python 2.7-ben megjelent hibán alapul, amelyet 2012-ben azonosítottak, és a Python 3-ban még nem javították ki. A hiba lehetővé teszi a speciálisan linkelt Python kód a már felszabadult memóriához való hozzáférés kezdeményezéséhez (Use-After-Free) a Pythonban. Kezdetben azt feltételezték, hogy a hiba nem jelent biztonsági fenyegetést, és csak nagyon ritka, általában mesterségesen előidézett esetekben vezethet a szkript rendellenes leállásához.

A kn32 fedőnevű biztonsági kutató érdeklődni kezdett a probléma iránt, és sikerült egy működő exploitot készítenie, amely lehetővé teszi bármely rendszerparancs meghívását anélkül, hogy közvetlen hozzáférést kapna az olyan módszerekhez, mint az os.system. Az exploit tiszta Pythonban van megvalósítva, és külső könyvtárak importálása és a „code.__new__” kezelő telepítése nélkül működik. A horgok közül csak a „builtin.__id__” kerül felhasználásra, ami általában nem tiltott. Gyakorlati szempontból a javasolt kóddal megkerülhetőek az elkülönítési mechanizmusok különböző szolgáltatásokban és környezetekben (például tanulási környezetekben, online shellekben, beépített kezelőkben stb.), amelyek lehetővé teszik Python kód futtatását, de korlátozzák a elérhető hívásokat, és nem engedélyezi az olyan hívási módszereket, mint például az os.system.

A javasolt kód az os.system hívás analógja, amely a CPython biztonsági rését kihasználva működik. Az exploit a Python 3 összes verziójával működik x86-64 architektúrájú rendszereken, és stabil működést demonstrál az Ubuntu 22.04-en, még akkor is, ha a PIE, RELRO és CET védelmi módok engedélyezettek. A munka a Python-kódból információkat gyűjt a végrehajtható CPython-kód egyik függvényének címéről. Ez a cím alapján kerül kiszámításra a CPython alapcíme a memóriában és a rendszer() függvény címe a memóriába betöltött libc példányban. A végén egy adott rendszercímre való közvetlen áttérés indul az első argumentum mutatójának a „/bin/sh” sorra cserélésével.

A Python biztonsági rése, amely lehetővé teszi rendszerparancsok meghívását elkülönített szkriptekből


Forrás: opennet.ru

Hozzászólás