Pythoni haavatavus, mis võimaldab kutsuda süsteemikäske liivakastiskriptidest

Avaldatud on meetod Pythonis isoleeritud koodikäivitussüsteemidest mööda hiilimiseks, mis põhineb Python 2.7-s ilmunud ammutuntud vea kasutamisel, mis tuvastati 2012. aastal ja mida pole Python 3-s veel parandatud. Viga võimaldab kasutada spetsiaalselt lingitud Pythoni kood, et käivitada juurdepääs Pythonis juba vabastatud mälule (Use-After-Free). Esialgu eeldati, et viga ei kujuta endast turvaohtu ja ainult väga harvadel juhtudel, tavaliselt kunstlikult tekitatud, võib see kaasa tuua skripti ebanormaalse lõpetamise.

Pseudonüümi kn32 all olnud turvateadlane tundis probleemi vastu huvi ja tal õnnestus ette valmistada töötav funktsioon, mis võimaldab välja kutsuda mis tahes süsteemikäsku, ilma et tal oleks otsest juurdepääsu meetoditele nagu os.system. Exploit on rakendatud puhtas Pythonis ja töötab ilma väliseid teeke importimata ja töötlejat “code.__new__” installimata. Konksudest kasutatakse ainult “builtin.__id__”, mis tavaliselt ei ole keelatud. Praktilise poole pealt saab pakutud koodi kasutada eri teenustes ja keskkondades (näiteks õpikeskkondades, veebikestad, sisseehitatud töötlejad jne) isoleerimismehhanismidest möödahiilimiseks, mis võimaldavad küll Pythoni koodi käivitada, kuid piiravad saadaolevaid kõnesid ega luba kõnemeetodeid, nagu os.system.

Kavandatud kood on os.system kutse analoog, mis töötab CPythoni haavatavust ära kasutades. Kasutamine töötab kõigi Python 3 versioonidega x86-64 arhitektuuriga süsteemides ja demonstreerib stabiilset tööd Ubuntu 22.04-s isegi siis, kui PIE, RELRO ja CET kaitserežiimid on lubatud. Töö taandub Pythoni koodist teabe hankimisele käivitatava CPythoni koodi ühe funktsiooni aadressi kohta. Selle aadressi põhjal arvutatakse CPythoni baasaadress mälus ja funktsiooni system() aadress mällu laetud libc eksemplaris. Lõpus käivitatakse otsene üleminek konkreetsele süsteemiaadressile, asendades esimese argumendi osuti reale “/bin/sh”.

Pythoni haavatavus, mis võimaldab kutsuda süsteemikäske liivakastiskriptidest


Allikas: opennet.ru

Lisa kommentaar