Chyba zabezpečení v Pythonu, která umožňuje volat systémové příkazy z izolovaných skriptů

Byla publikována metoda, jak obejít izolované systémy spouštění kódu v Pythonu, založená na použití dlouho známé chyby, která se objevila v Pythonu 2.7, byla identifikována v roce 2012 a dosud nebyla opravena v Pythonu 3. Chyba umožňuje použití speciálně propojených Python kód pro zahájení přístupu k již uvolněné paměti (Use-After-Free) v Pythonu. Zpočátku se předpokládalo, že chyba nepředstavuje bezpečnostní hrozbu a jen ve velmi vzácných případech, obvykle uměle vytvořených, může vést k abnormálnímu ukončení skriptu.

O problém se začal zajímat bezpečnostní výzkumník pod pseudonymem kn32 a podařilo se mu připravit pracovní exploit, který umožňuje volat jakýkoli systémový příkaz, aniž by měl přímý přístup k metodám jako os.system. Exploit je implementován v čistém Pythonu a funguje bez importu externích knihoven a bez instalace obslužného programu „code.__new__“. Z háčků se používá pouze „builtin.__id__“, což obvykle není zakázáno. Z praktického hlediska lze navrhovaný kód použít k obejití izolačních mechanismů v různých službách a prostředích (například ve výukových prostředích, online shellech, vestavěných obslužných programech atd.), které umožňují spouštění kódu Python, ale omezují dostupná volání a nepovolují metody volání, jako je os.system.

Navrhovaný kód je analogem volání os.system, které funguje tak, že využívá zranitelnost v CPythonu. Tento exploit funguje se všemi verzemi Pythonu 3 na systémech s architekturou x86-64 a ukazuje stabilní provoz na Ubuntu 22.04, i když jsou povoleny režimy ochrany PIE, RELRO a CET. Práce spočívá v získání informací z kódu Pythonu o adrese jedné z funkcí ve spustitelném kódu CPythonu. Na základě této adresy se vypočítá základní adresa CPythonu v paměti a adresa funkce system() v instanci libc načtené v paměti. Na konci je iniciován přímý přechod na konkrétní systémovou adresu nahrazením ukazatele prvního argumentu na řádek „/bin/sh“.

Chyba zabezpečení v Pythonu, která umožňuje volat systémové příkazy z izolovaných skriptů


Zdroj: opennet.ru

Přidat komentář