Pythonin haavoittuvuus, joka sallii järjestelmäkomentojen kutsumisen hiekkalaatikkoskripteistä

Pythonissa on julkaistu menetelmä, jolla voidaan ohittaa Pythonissa eristetyt koodin suoritusjärjestelmät, joka perustuu pitkään tunnetun Python 2.7:ssä ilmestyneen bugiin, joka tunnistettiin vuonna 2012, eikä sitä ole vielä korjattu Python 3:ssa. Virhe mahdollistaa erityisesti linkitettyjen Python-koodi, joka aloittaa pääsyn jo vapautettuun muistiin (Use-After-Free) Pythonissa. Aluksi oletettiin, että virhe ei aiheuttanut turvallisuusuhkaa ja vain hyvin harvoissa tapauksissa, yleensä keinotekoisesti luotu, voi johtaa skriptin epänormaaliin lopettamiseen.

Tietoturvatutkija salanimellä kn32 kiinnostui ongelmasta ja onnistui valmistelemaan toimivan hyväksikäytön, joka mahdollistaa minkä tahansa järjestelmäkomennon kutsumisen ilman suoraa pääsyä menetelmiin, kuten os.system. Hyökkäys on toteutettu puhtaalla Pythonilla ja toimii ilman ulkoisten kirjastojen tuontia ja ilman "code.__new__" -käsittelijän asentamista. Koukuista käytetään vain "builtin.__id__", mikä ei yleensä ole kiellettyä. Käytännön puolella ehdotettua koodia voidaan käyttää eristysmekanismien ohittamiseen eri palveluissa ja ympäristöissä (esimerkiksi oppimisympäristöissä, online-shellissä, sisäänrakennetuissa käsittelijöissä jne.), jotka mahdollistavat Python-koodin suorittamisen, mutta rajoittavat käytettävissä olevat puhelut eivätkä salli kutsumenetelmiä, kuten os.system.

Ehdotettu koodi on analoginen os.system-kutsulle, joka toimii hyödyntämällä CPythonin haavoittuvuutta. Hyödyntäminen toimii kaikkien Python 3 -versioiden kanssa järjestelmissä, joissa on x86-64-arkkitehtuuri, ja se osoittaa vakaan toiminnan Ubuntu 22.04:ssä, vaikka PIE-, RELRO- ja CET-suojaustilat olisivat käytössä. Työ rajoittuu tietojen hankkimiseen Python-koodista suoritettavan CPython-koodin yhden funktion osoitteesta. Tämän osoitteen perusteella lasketaan CPythonin perusosoite muistissa ja system()-funktion osoite muistiin ladatussa libc-instanssissa. Lopussa aloitetaan suora siirtyminen tiettyyn järjestelmäosoitteeseen korvaamalla ensimmäisen argumentin osoitin rivillä "/bin/sh".

Pythonin haavoittuvuus, joka sallii järjestelmäkomentojen kutsumisen hiekkalaatikkoskripteistä


Lähde: opennet.ru

Lisää kommentti