Уязвимост Π² php-fpm, която позволява ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΎ изпълнСниС Π½Π° ΠΊΠΎΠ΄ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π°

НаличСн ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Ρ‰ΠΈ вСрсии Π½Π° PHP 7.3.11, 7.1.33 ΠΈ 7.2.24, Π² ΠΊΠΎΠΈΡ‚ΠΎ Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡ€Π°Π½ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Π° уязвимост (CVE-2019-11043) Π² Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅Ρ‚ΠΎ PHP-FPM (FastCGI Process Manager), ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΈ позволява дистанционно Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚Π΅ своя ΠΊΠΎΠ΄ Π² систСмата. Π—Π° Π΄Π° Π°Ρ‚Π°ΠΊΡƒΠ²Π°Ρ‚Π΅ ΡΡŠΡ€Π²ΡŠΡ€ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ PHP-FPM във Π²Ρ€ΡŠΠ·ΠΊΠ° с Nginx Π·Π° изпълнСниС Π½Π° PHP скриптовС, Ρ‚ΠΎΠΉ Π²Π΅Ρ‡Π΅ Π΅ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎ Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ Ρ€Π°Π±ΠΎΡ‚Π° Сксплоатация.

Атаката Π΅ възмоТна Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π½Π° nginx, Π² ΠΊΠΎΠΈΡ‚ΠΎ прСнасочванСто към PHP-FPM сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Ρ‡Ρ€Π΅Π· раздСлянС Π½Π° части ΠΎΡ‚ URL с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° β€žfastcgi_split_path_infoβ€œ ΠΈ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° Π½Π° срСдата PATH_INFO, Π½ΠΎ Π±Π΅Π· ΠΏΡŠΡ€Π²ΠΎ Π΄Π° сС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ„Π°ΠΉΠ»Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° β€žtry_files $fastcgi_script_nameβ€œ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° ΠΈΠ»ΠΈ β€žif (!-f $) document_root$fastcgi_script_name)β€œ. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ ΡΡŠΡ‰ΠΎ Π΅ проявява Π² настройкитС, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π½ΠΈ Π·Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° NextCloud. НапримСр ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ със структури ΠΊΠ°Ρ‚ΠΎ:

мСстополоТСниС ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^ (. +? \. php) (/.*) $;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° прослСдитС Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ΠΈ Π·Π° разпространСниС Π½Π° Ρ‚Π΅Π·ΠΈ страници: Debian, RHEL, Ubuntu, SUSE/openSUSE, FreeBSD, Арка, Fedora. ΠšΠ°Ρ‚ΠΎ Π·Π°ΠΎΠ±ΠΈΠΊΠΎΠ»Π½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° искания PHP Ρ„Π°ΠΉΠ» слСд Ρ€Π΅Π΄Π° β€žfastcgi_split_path_infoβ€œ:

try_files $fastcgi_script_name =404;

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅Π½ ΠΎΡ‚ Π³Ρ€Π΅ΡˆΠΊΠ° ΠΏΡ€ΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ във Ρ„Π°ΠΉΠ» sapi/fpm/fpm/fpm_main.c. ΠšΠΎΠ³Π°Ρ‚ΠΎ присвояватС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π», сС ΠΏΡ€ΠΈΠ΅ΠΌΠ°, Ρ‡Π΅ стойността Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° Π½Π° срСдата PATH_INFO трябва Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° прСфикс, ΠΊΠΎΠΉΡ‚ΠΎ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π° Π½Π° ΠΏΡŠΡ‚Ρ към PHP скрипта.
Ако Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°Ρ‚Π° fastcgi_split_path_info ΡƒΠΊΠ°Π·Π²Π° раздСлянСто Π½Π° ΠΏΡŠΡ‚Ρ Π½Π° скрипта с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° чувствитСлСн към Π½ΠΎΠ² Ρ€Π΅Π΄ рСгулярСн ΠΈΠ·Ρ€Π°Π· (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° "^(.+?\.php)(/.*)$"), Ρ‚ΠΎΠ³Π°Π²Π° атакуващият ΠΌΠΎΠΆΠ΅ Π΄Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°, Ρ‡Π΅ ΠΏΡ€Π°Π·Π½Π° стойност сС записва Π² ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° Π½Π° срСдата PATH_INFO. Π’ Ρ‚ΠΎΠ·ΠΈ случай ΠΏΠΎ-Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ ΠΏΠΎ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ΅Π½Π° записванС Π½Π° path_info[0] Π΄ΠΎ Π½ΡƒΠ»Π° ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° FCGI_PUTENV.

Π§Ρ€Π΅Π· исканС Π½Π° URL, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€Π°Π½ ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π½Π°Ρ‡ΠΈΠ½, атакуващият ΠΌΠΎΠΆΠ΅ Π΄Π° постигнС измСстванС Π½Π° указатСля path_info към ΠΏΡŠΡ€Π²ΠΈΡ Π±Π°ΠΉΡ‚ Π½Π° структурата β€ž_fcgi_data_segβ€œ ΠΈ записванСто Π½Π° Π½ΡƒΠ»Π° Π² Ρ‚ΠΎΠ·ΠΈ Π±Π°ΠΉΡ‚ Ρ‰Π΅ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ прСмСстванС Π½Π° β€žchar* posβ€œ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π» към ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° област ΠΎΡ‚ ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°. БлСдващият, Π½Π°Ρ€Π΅Ρ‡Π΅Π½ FCGI_PUTENV, Ρ‰Π΅ ΠΏΡ€Π΅Π·Π°ΠΏΠΈΡˆΠ΅ Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π² Ρ‚Π°Π·ΠΈ ΠΏΠ°ΠΌΠ΅Ρ‚ със стойност, която атакуващият ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°. ΠŸΠΎΡΠΎΡ‡Π΅Π½Π°Ρ‚Π° ΠΏΠ°ΠΌΠ΅Ρ‚ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° стойноститС Π½Π° Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° FastCGI ΠΈ ΠΊΠ°Ρ‚ΠΎ напишС Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ, атакуващият ΠΌΠΎΠΆΠ΅ Π΄Π° създадС Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° PHP_VALUE ΠΈ Π΄Π° постигнС изпълнСниС Π½Π° своя ΠΊΠΎΠ΄.

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€