Një ndryshim në Python që lejon thirrjen e komandave sistemike nga skriptet e izoluar

U publikua një metodë për të anashkaluar sistemet e ekzekutimit të izoluar të kodit në gjuhën Python, e bazuar në një gabim të njohur prej kohësh që u shfaq në Python 2.7, i zbuluar në vitin 2012 dhe ende i pa rregulluar në Python 3. Gabimi lejon, përmes një kodi të veçuar në gjuhën Python, të iniciatohet qasja në një memorje të lirë (Use-After-Free) në CPython. Fillimisht u mendua se gabimi nuk paraqet një kërcënim për sigurinë dhe se vetëm në raste shumë të rralla, zakonisht të krijuara artificialisht, mund të çojë në përfundimin e papritur të skriptit.

Një hulumtues i sigurisë me emrin kn32 u interesua për problemin dhe arriti të përgatisë një eksploatues funksional, i cili ofron mundësinë për të thirrur çdo komandë sistemike, pa pasur qasje të drejtpërdrejtë në metoda si os.system. Ekspoatuesi është implementuar në gjuhën e pastër Python dhe punon pa importimin e bibliotekave të jashtme dhe pa instaluar handler-in "code.__new__". Nga hook-ët përdoret vetëm "builtin.__id__", i cili zakonisht nuk është i ndaluar. Nga ana 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, në interfanca online, në menaxherë të integruar, etj.) që lejojnë ekzekutimin e kodit në gjuhën Python, por që kufizojnë thirrjet e disponueshme dhe nuk lejojnë qasje në metoda të tilla si os.system.

Kodi i propozuar është një analog i thirrjes os.system, duke funksionuar përmes shfrytëzimit të një dobësie në CPython. Shfrytëzimi punon me të gjitha versionet e Python 3 në sistemet me arkitekturë x86-64 dhe tregon funksionim stabil në Ubuntu 22.04, madje me aktivizimin e mënyrave të mbrojtjes PIE, RELRO dhe CET. Funksioni përfshin marrjen e informacionit nga kodi në gjuhën Python për adresën e një prej funksioneve në kodin ekzekutiv të CPython. Bazuar në këtë adresë, llogaritet adresa bazë e CPython në memorie dhe adresa e funksionit system() në instancën libc të ngarkuar në memorie. Në përfundim, inicirohet një kalim i drejtpërdrejtë në adresën e caktuar të sistemit duke zëvendësuar treguesin e argumentit të parë me stringun "/bin/sh".

Një ndryshim në Python që lejon thirrjen e komandave sistemike nga skriptet e izoluar


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