Luka w php-fpm, pozwalająca na zdalne wykonanie kodu na serwerze

Dostępne poprawki do PHP 7.3.11, 7.1.33 i 7.2.24, w których naprawiono krytyczny luka (CVE-2019-11043) w rozszerzeniu PHP-FPM (menedżer procesów FastCGI), co umożliwia zdalne wykonanie własnego kodu w systemie. Dla ataku na serwery, które uruchamiają skrypty PHP za pomocą PHP-FPM w połączeniu z Nginx, jest już publicznie dostępne działający eksploit.

Atak jest możliwy w konfiguracjach nginx, w których przekazywanie do PHP-FPM odbywa się poprzez podział części URL za pomocą „fastcgi_split_path_info” oraz określenie zmiennej środowiskowej PATH_INFO, ale bez wcześniejszego sprawdzenia istnienia pliku dyrektywą „try_files $fastcgi_script_name” lub konstrukcją „if (!-f $document_root$fastcgi_script_name)”. Problem dotyczy także objawia się ustawień oferowanych dla platformy NextCloud. Na przykład, podatne są konfiguracje z konstrukcjami typu:

location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}

Śledzenie rozwiązania problemu w dystrybucjach można znaleźć na tych stronach: Debian, RHEL, Ubuntu, SUSE/openSUSE, FreeBSD, Arch, Fedora. Jako obejście zabezpieczenia po linii „fastcgi_split_path_info” można dodać sprawdzenie istnienia żądanego pliku PHP:

try_files $fastcgi_script_name =404;

Problem jest spowodowany błędem przy manipulacji wskaźnikami w pliku sapi/fpm/fpm/fpm_main.c. Zakłada się, że przypisanie wskaźnika ma wartość zmiennej środowiskowej PATH_INFO, która koniecznie zawiera prefiks odpowiadający ścieżce do skryptu PHP.
Jeśli w dyrektywie fastcgi_split_path_info określono podział ścieżki do skryptu z użyciem wyrażenia regularnego wrażliwego na przekazywanie znaku nowej linii (na przykład, w wielu przykładach sugeruje się użycie „^(.+?\.php)(/.*)$”), to atakujący może uzyskać zapis do zmiennej środowiskowej PATH_INFO pustą wartość. W takim przypadku dalsze wykonanie jest prowadzone prowadzi do zapisu w path_info[0] zera i wywołania FCGI_PUTENV.

Wysyłając odpowiednio sformatowane URL, atakujący może spowodować przesunięcie wskaźnika path_info na pierwszy bajt struktury „_fcgi_data_seg”, a zapis zera w tym bajcie spowoduje przesunięcie wskaźnika „char* pos” do wcześniejszego obszaru pamięci. Następnie wywołany FCGI_PUTENV nadpisze dane w tej pamięci wartością, nad którą atakujący ma kontrolę. W tej pamięci przechowywane są również wartości innych zmiennych FastCGI, a zapisując swoje dane, atakujący może stworzyć fikcyjną zmienną PHP_VALUE i wymusić wykonanie swojego kodu.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster