Vulnerability sa Python na nagbibigay-daan sa mga system command na tawagan mula sa mga nakahiwalay na script

Ang isang paraan ay nai-publish upang i-bypass ang mga nakahiwalay na sistema ng pagpapatupad ng code sa Python, batay sa paggamit ng isang kilalang bug na lumitaw sa Python 2.7, ay natukoy noong 2012 at hindi pa naitama sa Python 3. Ang bug ay nagbibigay-daan sa paggamit ng espesyal na naka-link Python code upang simulan ang pag-access sa napalaya na memorya (Use-After-Free) sa Python. Sa una, ipinapalagay na ang error ay hindi nagdulot ng banta sa seguridad at sa napakabihirang mga kaso lamang, kadalasang artipisyal na nilikha, ay maaaring humantong sa isang abnormal na pagwawakas ng script.

Ang isang security researcher sa ilalim ng pseudonym kn32 ay naging interesado sa problema at nakapaghanda ng isang gumaganang pagsasamantala na ginagawang posible na tumawag sa anumang utos ng system nang walang direktang access sa mga pamamaraan tulad ng os.system. Ang pagsasamantala ay ipinatupad sa purong Python at gumagana nang hindi nag-i-import ng mga panlabas na aklatan at nang hindi ini-install ang "code.__new__" handler. Sa mga kawit, "builtin.__id__" lang ang ginagamit, na kadalasang hindi ipinagbabawal. Sa praktikal na bahagi, ang iminungkahing code ay maaaring gamitin upang i-bypass ang mga mekanismo ng paghihiwalay sa iba't ibang mga serbisyo at kapaligiran (halimbawa, sa mga kapaligiran sa pag-aaral, mga online na shell, mga built-in na handler, atbp.), na nagpapahintulot sa pagpapatupad ng Python code, ngunit nililimitahan ang mga available na tawag at hindi pinapayagan ang mga paraan ng pagtawag gaya ng os.system.

Ang iminungkahing code ay isang analogue ng os.system call, na gumagana sa pamamagitan ng pagsasamantala sa isang kahinaan sa CPython. Gumagana ang pagsasamantala sa lahat ng bersyon ng Python 3 sa mga system na may x86-64 na arkitektura at nagpapakita ng matatag na operasyon sa Ubuntu 22.04, kahit na pinagana ang mga mode ng proteksyon ng PIE, RELRO at CET. Ang gawain ay bumaba sa pagkuha ng impormasyon mula sa Python code tungkol sa address ng isa sa mga function sa executable CPython code. Batay sa address na ito, kinakalkula ang base address ng CPython sa memory at ang address ng system() function sa libc instance na na-load sa memory. Sa dulo, ang isang direktang paglipat sa isang partikular na address ng system ay sinisimulan sa pagpapalit ng pointer ng unang argumento sa linyang "/bin/sh".

Vulnerability sa Python na nagbibigay-daan sa mga system command na tawagan mula sa mga nakahiwalay na script


Pinagmulan: opennet.ru

Magdagdag ng komento