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

Objavljena je metoda za zaobilaženje izolovanih sistema za izvršavanje koda u Pythonu, zasnovana na korišćenju davno poznate greške koja se pojavila u Pythonu 2.7, identifikovana je 2012. godine i još uvek nije ispravljena u Pythonu 3. Greška omogućava korišćenje posebno povezanih Python kod za pokretanje pristupa već oslobođenoj memoriji (Use-After-Free) u Pythonu. U početku se pretpostavljalo da greška ne predstavlja sigurnosnu prijetnju i da je samo u vrlo rijetkim slučajevima, obično umjetno stvorenim, mogla dovesti do abnormalnog ukidanja skripte.

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

Predloženi kod je analog poziva os.system, koji radi tako što iskorišćava ranjivost u CPython-u. Eksploatacija radi sa svim verzijama Pythona 3 na sistemima sa x86-64 arhitekturom i pokazuje stabilan rad na Ubuntu 22.04, čak i kada su omogućeni PIE, RELRO i CET zaštitni načini. Posao se svodi na dobijanje informacija iz Python koda o adresi jedne od funkcija u izvršnom CPython kodu. Na osnovu ove adrese izračunavaju se osnovna adresa CPython-a u memoriji i adresa funkcije system() u libc instanci učitanoj u memoriju. Na kraju se inicira direktan prijelaz na određenu sistemsku adresu zamjenom pokazivača prvog argumenta na liniju “/bin/sh”.

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


izvor: opennet.ru

Dodajte komentar