Python ievainojamība, kas ļauj izsaukt sistēmas komandas no izolētiem skriptiem

Ir publicēta metode, kā apiet izolētas koda izpildes sistēmas Python, pamatojoties uz sen zināmas kļūdas izmantošanu, kas parādījās Python 2.7, tika identificēta 2012. gadā un vēl nav izlabota Python 3. Kļūda ļauj izmantot īpaši saistītus Python kods, lai sāktu piekļuvi jau atbrīvotajai atmiņai (izmantot pēc brīvas) programmā Python. Sākotnēji tika pieņemts, ka kļūda nerada draudus drošībai un tikai ļoti retos gadījumos, parasti mākslīgi radīta, var izraisīt neparastu skripta darbības pārtraukšanu.

Drošības pētnieks ar pseidonīmu kn32 sāka interesēties par problēmu, un viņam izdevās sagatavot darba izmantošanu, kas ļauj izsaukt jebkuru sistēmas komandu bez tiešas piekļuves tādām metodēm kā os.system. Ekspluatācija ir ieviesta tīrā Python un darbojas, neimportējot ārējās bibliotēkas un neinstalējot apdarinātāju “code.__new__”. No āķiem tiek izmantots tikai “builtin.__id__”, kas parasti nav aizliegts. No praktiskās puses piedāvāto kodu var izmantot, lai apietu izolācijas mehānismus dažādos servisos un vidēs (piemēram, mācību vidēs, tiešsaistes čaulās, iebūvētajos apdarinātājos utt.), kas ļauj izpildīt Python kodu, bet ierobežo pieejamos zvanus un neatļauj izsaukšanas metodes, piemēram, os.system.

Piedāvātais kods ir os.system izsaukuma analogs, kas darbojas, izmantojot CPython ievainojamību. Ekspluatācija darbojas ar visām Python 3 versijām sistēmās ar x86-64 arhitektūru un demonstrē stabilu darbību Ubuntu 22.04, pat ja ir iespējoti PIE, RELRO un CET aizsardzības režīmi. Darbs ir saistīts ar informācijas iegūšanu no Python koda par vienas no funkcijām izpildāmajā CPython kodā. Pamatojoties uz šo adresi, tiek aprēķināta CPython bāzes adrese atmiņā un sistēmas() adrese atmiņā ielādētajā libc instancē. Beigās tiek uzsākta tieša pāreja uz noteiktu sistēmas adresi, pirmā argumenta rādītāju aizstājot ar rindiņu “/bin/sh”.

Python ievainojamība, kas ļauj izsaukt sistēmas komandas no izolētiem skriptiem


Avots: opennet.ru

Pievieno komentāru