Varnarleysi í Python sem gerir kleift að kalla kerfisskipanir úr einangruðum skriftum

Aðferð hefur verið gefin út til að komast framhjá einangruðum kóða keyrslukerfum í Python, byggt á notkun á löngu þekktri villu sem birtist í Python 2.7, var auðkennd árið 2012 og hefur ekki enn verið leiðrétt í Python 3. Villan gerir kleift að nota sérstaklega tengda Python kóða til að hefja aðgang að þegar losað minni (Use-After-Free) í Python. Upphaflega var gert ráð fyrir að villan hefði ekki í för með sér öryggisógn og aðeins í mjög sjaldgæfum tilfellum, venjulega tilbúnar, gæti það leitt til óeðlilegrar lokunar á handritinu.

Öryggisrannsakandi undir dulnefninu kn32 fékk áhuga á vandamálinu og tókst að útbúa starfandi hagnýtingu sem gerir það mögulegt að kalla hvaða kerfisskipun sem er án þess að hafa beinan aðgang að aðferðum eins og os.system. The exploit er útfært í hreinu Python og virkar án þess að flytja inn ytri bókasöfn og án þess að setja upp „code.__new__“ meðhöndlunina. Af krókunum er aðeins „builtin.__id__“ notað, sem er venjulega ekki bannað. Á hagnýtu hliðinni er hægt að nota fyrirhugaðan kóða til að komast framhjá einangrunaraðferðum í ýmsum þjónustum og umhverfi (til dæmis í námsumhverfi, netskeljum, innbyggðum meðhöndlum osfrv.), sem leyfa framkvæmd Python kóða, en takmarka tiltæk símtöl og leyfa ekki hringingaraðferðir eins og os.system.

Fyrirhugaður kóði er hliðstæða os.system kallsins, sem virkar með því að nýta sér veikleika í CPython. The exploit virkar með öllum útgáfum af Python 3 á kerfum með x86-64 arkitektúr og sýnir stöðuga virkni á Ubuntu 22.04, jafnvel þegar PIE, RELRO og CET verndarstillingar eru virkar. Vinnan snýst um að fá upplýsingar úr Python kóða um heimilisfang einnar af aðgerðunum í keyranlega CPython kóðanum. Byggt á þessu heimilisfangi er grunnvistfang CPython í minni og heimilisfang system() fallsins í libc tilvikinu sem er hlaðið í minni reiknað út. Í lokin eru bein umskipti yfir á tiltekið kerfisfang hafið með því að skipta bendilinn á fyrstu rökræðunni í línuna „/bin/sh“.

Varnarleysi í Python sem gerir kleift að kalla kerfisskipanir úr einangruðum skriftum


Heimild: opennet.ru

Bæta við athugasemd