Zraniteľnosť v Pythone, ktorá umožňuje volanie systémových príkazov z izolovaných skriptov

Bola publikovaná metóda na obídenie izolovaných systémov vykonávania kódu v Pythone, založená na použití dlho známej chyby, ktorá sa objavila v Pythone 2.7, bola identifikovaná v roku 2012 a ešte nebola opravená v Pythone 3. Chyba umožňuje používať špeciálne prepojené Python kód na začatie hovoru do už uvoľnenej pamäte (Use-After-Free) v Pythone. Pôvodne sa predpokladalo, že chyba nepredstavuje bezpečnostnú hrozbu a len vo veľmi ojedinelých prípadoch, zvyčajne umelo vytvorených, môže viesť k abnormálnemu ukončeniu skriptu.

O problém sa začal zaujímať bezpečnostný výskumník pod pseudonymom kn32 a podarilo sa mu pripraviť pracovný exploit, ktorý umožňuje volať akýkoľvek systémový príkaz bez priameho prístupu k metódam ako os.system. Exploit je implementovaný v čistom Pythone a funguje bez importu externých knižníc a bez inštalácie obslužného programu „code.__new__“. Z háčikov sa používa iba „builtin.__id__“, čo zvyčajne nie je zakázané. Z praktického hľadiska možno navrhovaný kód použiť na obídenie izolačných mechanizmov v rôznych službách a prostrediach (napríklad vo vzdelávacích prostrediach, online shelloch, vstavaných obslužných programoch atď.), ktoré umožňujú spustenie kódu Python, ale obmedzujú dostupné volania a nepovoľujú metódy volania ako os.system.

Navrhovaný kód je analógom volania os.system, ktoré funguje tak, že využíva zraniteľnosť v CPythone. Využívanie funguje so všetkými verziami Pythonu 3 na systémoch s architektúrou x86-64 a demonštruje stabilnú prevádzku na Ubuntu 22.04, aj keď sú povolené režimy ochrany PIE, RELRO a CET. Práca spočíva v získaní informácií z kódu Python o adrese jednej z funkcií v spustiteľnom kóde CPython. Na základe tejto adresy sa vypočíta základná adresa CPythonu v pamäti a adresa funkcie system() v inštancii libc načítanej v pamäti. Na konci sa spustí priamy prechod na konkrétnu systémovú adresu nahradením ukazovateľa prvého argumentu na riadok „/bin/sh“.

Zraniteľnosť v Pythone, ktorá umožňuje volanie systémových príkazov z izolovaných skriptov


Zdroj: opennet.ru

Pridať komentár