Ranjivost u Pythonu koja omogućuje pozivanje sistemskih naredbi iz izoliranih skripti

Objavljena je metoda za zaobilaženje izoliranih sustava za izvršavanje koda u Pythonu, koja se temelji na korištenju dugo poznate pogreške koja se pojavila u Pythonu 2.7, identificirana je 2012. i još nije ispravljena u Pythonu 3. Pogreška omogućuje korištenje posebno povezanih Python kod za pokretanje pristupa već oslobođenoj memoriji (Use-After-Free) u Pythonu. U početku se pretpostavljalo da pogreška ne predstavlja sigurnosnu prijetnju i samo u vrlo rijetkim slučajevima, obično umjetno stvorenim, može dovesti do abnormalnog prekida skripte.

Istraživač sigurnosti pod pseudonimom kn32 zainteresirao se za problem i uspio je pripremiti radni exploit koji omogućuje pozivanje bilo koje sistemske naredbe bez izravnog pristupa metodama poput os.system. Eksploatacija je implementirana u čistom Pythonu i radi bez uvoza vanjskih biblioteka i bez instaliranja rukovatelja “code.__new__”. Od kukica se koristi samo “builtin.__id__”, što obično nije zabranjeno. S praktične strane, predloženi kod može se koristiti za zaobilaženje mehanizama izolacije u različitim uslugama i okruženjima (na primjer, u okruženjima za učenje, mrežnim ljuskama, ugrađenim rukovateljima itd.), koji dopuštaju izvođenje Python koda, ali ograničavaju dostupne pozive i ne dopuštaju metode poziva kao što je os.system.

Predloženi kod analogan je pozivu os.system koji radi iskorištavanjem ranjivosti u CPythonu. Eksploatacija radi sa svim verzijama Pythona 3 na sustavima s x86-64 arhitekturom i pokazuje stabilan rad na Ubuntu 22.04, čak i kada su PIE, RELRO i CET načini zaštite omogućeni. Rad se svodi na dobivanje informacija iz Python koda o adresi jedne od funkcija u izvršnom CPython kodu. Na temelju ove adrese izračunava se osnovna adresa CPythona u memoriji i adresa funkcije system() u libc instanci učitanoj u memoriju. Na kraju se pokreće izravni prijelaz na određenu adresu sustava zamjenom pokazivača prvog argumenta na red “/bin/sh”.

Ranjivost u Pythonu koja omogućuje pozivanje sistemskih naredbi iz izoliranih skripti


Izvor: opennet.ru

Dodajte komentar