Dobësi në Python që lejon që komandat e sistemit të thirren nga skriptet e izoluara

Është publikuar një metodë për të anashkaluar sistemet e ekzekutimit të kodit të izoluar në Python, bazuar në përdorimin e një gabimi të njohur prej kohësh që u shfaq në Python 2.7, u identifikua në vitin 2012 dhe nuk është korrigjuar ende në Python 3. Defekti lejon përdorimin e lidhur posaçërisht Kodi Python për të inicuar aksesin në memorien tashmë të liruar (Përdorim-Pas-Free) në Python. Fillimisht, u supozua se gabimi nuk përbënte një kërcënim sigurie dhe vetëm në raste shumë të rralla, zakonisht të krijuara artificialisht, mund të çonte në një përfundim jonormal të skenarit.

Një studiues sigurie me pseudonimin kn32 u interesua për problemin dhe arriti të përgatisë një shfrytëzim pune që bën të mundur thirrjen e çdo komande të sistemit pa pasur akses të drejtpërdrejtë në metoda si os.system. Shfrytëzimi zbatohet në Python të pastër dhe funksionon pa importuar biblioteka të jashtme dhe pa instaluar mbajtësin "code.__new__". Nga grepa përdoret vetëm "builtin.__id__", e cila zakonisht nuk është e 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ësimi, predha në internet, mbajtës të integruar, etj.), të cilët lejojnë ekzekutimin e kodit Python, por kufizojnë thirrjet e disponueshme dhe mos lejoni metodat e thirrjeve si os.system.

Kodi i propozuar është një analog i thirrjes os.system, i cili funksionon duke shfrytëzuar një dobësi në CPython. Shfrytëzimi funksionon me të gjitha versionet e Python 3 në sistemet me arkitekturë x86-64 dhe demonstron funksionim të qëndrueshëm në Ubuntu 22.04, edhe kur janë aktivizuar mënyrat e mbrojtjes PIE, RELRO dhe CET. Puna ka të bëjë me marrjen e informacionit nga kodi Python për adresën e një prej funksioneve në kodin e ekzekutueshëm 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ë fund, inicohet një kalim i drejtpërdrejtë në një adresë specifike të sistemit me zëvendësimin e treguesit të argumentit të parë në rreshtin "/bin/sh".

Dobësi në Python që lejon që komandat e sistemit të thirren nga skriptet e izoluara


Burimi: opennet.ru

Shto një koment