Byl zveřejněn metod obcházení systémů izolovaného spouštění kódu v jazyce Python, založený na využití dlouho známé chyby, která se objevila ve verzi Python 2.7, odhalena v roce 2012 a dodnes neopravená v Python 3. Tato chyba umožňuje pomocí speciálně sestaveného kódu v jazyce Python iniciovat přístup k již uvolněné paměti (Use-After-Free) v CPython. Původně se předpokládalo, že chyba nepředstavuje bezpečnostní hrozbu a že pouze ve velmi vzácných případech, obvykle uměle vytvořených, může vést k nečekanému ukončení skriptu.
Bezpečnostní výzkumník pod přezdívkou kn32 se začal zajímat o tento problém a dokázal připravit funkční exploit, který umožňuje vyvolat jakýkoli systémový příkaz, aniž by měl přímý přístup k metodám typu os.system. Exploit je implementován v čistém jazyce Python a funguje bez importu externích knihoven a bez instalace zpracovatele „code.__new__“. Z hooků se používá pouze „builtin.__id__“, který obvykle není zakázán. Z praktického hlediska může navržený kód sloužit k obcházení izolačních mechanismů v různých službách a prostředích (například ve vzdělávacích prostředích, online shellích, vestavěných zpracovatelích atd.), která povolují spouštění kódu v Pythonu, ale omezují dostupné volání a neumožňují přístup k metodám jako os.system.
Navržený kód je analogií volání os.system, která funguje na základě zneužití zranitelnosti v CPython. Exploit funguje se všemi verzemi Python 3 na systémech s architekturou x86-64 a prokazuje stabilní fungování v Ubuntu 22.04, i při zapnutých ochranách jako jsou PIE, RELRO a CET. Fungování spočívá v získání informací z kódu v jazyce Python o adrese jedné z funkcí v prováděném kódu CPython. Na základě této adresy se vypočítává základní adresa CPython v paměti a adresa funkce system() v načtené instanci libc. Na závěr se iniciuje přímý skok na konkrétní adresu system s přepínačem ukazatele prvního argumentu na řetězec „/bin/sh“.

Zdroj: opennet.ru
