Objavljen je metod za zaobilaženje sustava izoliranog izvršavanja koda na Pythonu, koji se temelji na već dugo poznatoj grešci otkrivenoj u Pythonu 2.7, identificiranoj 2012. godine i koja do danas nije ispravljena u Pythonu 3. Greška omogućuje da se uz pomoć posebno strukturiranog koda na Pythonu inicira pristup već oslobođenoj memoriji (Use-After-Free) u CPythonu. Izvorno je pretpostavljeno da greška ne predstavlja sigurnosnu prijetnju i da može dovesti do prekida izvođenja skripte samo u vrlo rijetkim, obično umjetno stvorenim, slučajevima.
Istraživač sigurnosti pod pseudonimom kn32 zainteresirao se za problem i uspio je pripremiti funkcionalni exploit koji omogućuje izvršavanje bilo koje sistemske komande bez izravnog pristupa metodama poput os.system. Exploit je implementiran na čistom Pythonu i radi bez uvoza vanjskih biblioteka i bez instalacije obradnika 'code.__new__'. Od hook-ova koristi se samo 'builtin.__id__', koji obično nije zabranjen. Iz praktične perspektive, predloženi kod može se koristiti za zaobilaženje mehanizama izolacije u raznim uslugama i okruženjima (na primjer, u obrazovnim okruženjima, online sučeljima, ugrađenim obrtnicima itd.) koji omogućuju izvođenje koda na Pythonu, ali ograničavaju dostupne pozive i ne dopuštaju pristup takvim metodama kao što je os.system.
Predloženi kod predstavlja analog poziva os.system koji radi iskorištavanjem ranjivosti u CPythonu. Exploit radi sa svim verzijama Pythona 3 na sustavima s arhitekturom x86-64 i demonstrira stabilan rad u Ubuntuu 22.04, čak i kada su uključeni načini zaštite PIE, RELRO i CET. Rad se svodi na dobivanje iz koda na Pythonu informacija o adresi jedne od funkcija u izvršnom kodu CPythona. Na temelju te adrese izračunava se osnovna adresa CPythona u memoriji i adresa funkcije system() u učitanom primjerku libc. Na kraju se inicira izravni prijelaz na određenu adresu system s zamjenom pokazivača prvog argumenta na string '/bin/sh'.

Izvor: opennet.ru
