poprawki do PHP 7.3.11, 7.1.33 i 7.2.24, w których krytyczny (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 .
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 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: , , , , , , . 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 . 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 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
