Chyba zabezpečení v php-fpm, která umožňuje vzdálené spuštění kódu na serveru

Dostupný opravná vydání PHP 7.3.11, 7.1.33 a 7.2.24, ve kterých vyloučeno kritický zranitelnost (CVE-2019-11043) v rozšíření PHP-FPM (FastCGI Process Manager), které vám umožňuje vzdáleně spouštět váš kód v systému. Pro útok na servery, které používají PHP-FPM ke spouštění PHP skriptů ve spojení s Nginx, je již veřejně dostupný pracovní využívat.

Útok je možný v konfiguracích nginx, ve kterých se předávání v PHP-FPM provádí rozdělením částí URL pomocí "fastcgi_split_path_info" a definováním proměnné prostředí PATH_INFO, ale bez předchozí kontroly existence souboru pomocí "try_files $fastcgi_script_name" direktiva nebo "if (!-f $ kořenový_adresář_dokumentu$fastcgi_script_name)". problém včetně projevuje se v nastaveních nabízených pro platformu NextCloud. Zranitelné jsou například konfigurace s konstrukcemi formuláře:

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

Řešení problémů v distribucích můžete sledovat na těchto stránkách: Debian, RHEL, ubuntu, SUSE/openSUSE, FreeBSD, Oblouk, Fedora. Jako řešení zabezpečení můžete za řádek „fastcgi_split_path_info“ přidat kontrolu existence požadovaného souboru PHP:

try_files $fastcgi_script_name =404;

Problém je způsoben chybou při manipulaci s ukazateli v souboru sapi/fpm/fpm/fpm_main.c. Při přiřazování ukazatele se předpokládá, že hodnota proměnné prostředí PATH_INFO nutně obsahuje prefix, který odpovídá cestě k PHP skriptu.
Pokud direktiva fastcgi_split_path_info určuje rozdělení cesty ke skriptu pomocí regulárního výrazu, který je citlivý na přenos znaku nového řádku (například v mnoha příkladech se doporučuje použít "^(.+?\.php)(/. *)$"), pak může útočník dosáhnout zapsání prázdné hodnoty do proměnné prostředí PATH_INFO. V tomto případě dále po provedení provedeno zápis path_info[0] na nulu a volání FCGI_PUTENV.

Požadováním adresy URL naformátované určitým způsobem může útočník přesunout ukazatel path_info na první bajt struktury „_fcgi_data_seg“ a zápis nuly do tohoto bajtu přesune ukazatel „char * pos“ do oblasti paměti dříve. FCGI_PUTENV volané jako další přepíše data v této paměti hodnotou, kterou může útočník ovládat. Zadaná paměť také ukládá hodnoty dalších proměnných FastCGI a zapsáním jejich dat může útočník vytvořit fiktivní proměnnou PHP_VALUE a dosáhnout spuštění svého kódu.

Zdroj: opennet.ru

Přidat komentář