Cenueshmëri në Python që lejon ekzekutimin e komandave të sistemit nga skripte të izoluara

ËshtĂ« publikuar njĂ« metodĂ« pĂ«r anashkalimin e sistemeve tĂ« ekzekutimit tĂ« izoluar tĂ« kodit nĂ« gjuhĂ«n Python, e bazuar nĂ« shfrytĂ«zimin e njĂ« defekti tĂ« njohur prej kohĂ«sh, i shfaqur nĂ« Python 2.7, i zbuluar nĂ« vitin 2012 dhe ende i pakorrigjuar nĂ« Python 3. Defekti lejon qĂ«, me ndihmĂ«n e kodit Python tĂ« ndĂ«rtuar posaçërisht, tĂ« shkaktohet qasje nĂ« memorie tashmĂ« tĂ« liruar (Use-After-Free) nĂ« CPython. Fillimisht supozohej se ky defekt nuk pĂ«rbĂ«nte rrezik pĂ«r sigurinĂ« dhe se vetĂ«m nĂ« raste shumĂ« tĂ« rralla, zakonisht tĂ« krijuara artificialisht, mund tĂ« çonte nĂ« ndĂ«rprerje tĂ« papritur tĂ« skriptit.

Një studiues i sigurisë me pseudonimin kn32 u interesua për këtë problem dhe arriti të përgatisë një exploit funksional, që bën të mundur ekzekutimin e çdo komande të sistemit pa pasur qasje të drejtpërdrejtë te metoda të tipit os.system. Exploit-i është realizuar vetëm me Python të pastër dhe funksionon pa importuar biblioteka të jashtme dhe pa vendosur trajtuesin «code.__new__». Nga hook-et përdoret vetëm «builtin.__id__», i cili zakonisht nuk ndalohet. Nga pikëpamja praktike, kodi i propozuar mund të përdoret për të anashkaluar mekanizmat e izolimit në shërbime dhe mjedise të ndryshme (për shembull, në mjedise mësimore, shell-e online, përpunues të integruar etj.) që lejojnë ekzekutimin e kodit Python, por kufizojnë thirrjet e disponueshme dhe nuk lejojnë përdorimin e metodave si os.system.

Kodi i propozuar përfaqëson një analog të thirrjes os.system, që funksionon përmes shfrytëzimit të cenueshmërisë në CPython. Exploit-i funksionon me të gjitha versionet e Python 3 në sisteme me arkitekturë x86-64 dhe demonstron funksionim të qëndrueshëm në Ubuntu 22.04, edhe kur janë të aktivizuara mekanizmat mbrojtës PIE, RELRO dhe CET. Funksionimi reduktohet në marrjen, nga kodi Python, të informacionit për adresën e njërit prej funksioneve në kodin e ekzekutueshëm të CPython. Në bazë të kësaj adrese llogaritet adresa bazë e CPython në memorie dhe adresa e funksionit system() në instancën e libc të ngarkuar në memorie. Në fund, niset një kalim i drejtpërdrejtë te adresa e caktuar e system me zëvendësimin e treguesit të argumentit të parë me vargun «/bin/sh».

Cenueshmëri në Python që lejon ekzekutimin e komandave të sistemit nga skripte të izoluara


Burimi: opennet.ru
Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster