Ranjivost u php-fpm-u koja dopušta daljinsko izvršavanje koda na poslužitelju

Dostupan ispravljena izdanja PHP-a 7.3.11, 7.1.33 i 7.2.24, u kojima eliminiran kritička ranjivost (CVE-2019-11043) u proširenju PHP-FPM (FastCGI Process Manager) koje vam omogućuje daljinsko izvršavanje koda na sustavu. Za napad na poslužitelje koji koriste PHP-FPM za pokretanje PHP skripti u kombinaciji s Nginxom, već je javno dostupan rad iskorištavati.

Napad je moguć u nginx konfiguracijama u kojima se prosljeđivanje u PHP-FPM-u provodi dijeljenjem dijelova URL-a pomoću "fastcgi_split_path_info" i definiranjem varijable okruženja PATH_INFO, ali bez prethodne provjere postojanja datoteke s "try_files $fastcgi_script_name" direktiva ili "if (!-f $ document_root$fastcgi_script_name)". problem uključujući pojavljuje se u ponuđenim postavkama za platformu NextCloud. Na primjer, konfiguracije s konstrukcijama oblika su ranjive:

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

Rješavanje problema u distribucijama možete pratiti na ovim stranicama: Debian, RHEL, Ubuntu, SUSE/openSUSE, FreeBSD, Svod, Fedora. Kao sigurnosno rješenje, nakon retka "fastcgi_split_path_info", možete dodati provjeru postojanja tražene PHP datoteke:

try_files $fastcgi_script_name =404;

Problem je uzrokovan pogreškom tijekom manipuliranja pokazivačima u datoteci sapi/fpm/fpm/fpm_main.c. Prilikom dodjele pokazivača pretpostavlja se da vrijednost varijable okruženja PATH_INFO nužno sadrži prefiks koji odgovara putu do PHP skripte.
Ako direktiva fastcgi_split_path_info specificira dijeljenje staze do skripte pomoću regularnog izraza koji je osjetljiv na prijenos znaka novog retka (na primjer, u mnogim primjerima predlaže se korištenje "^(.+?\.php)(/. *)$"), tada napadač može postići pisanje prazne vrijednosti u varijablu okruženja PATH_INFO. U ovom slučaju, dalje uz izvršenje provedena pisanje path_info[0] na nulu i pozivanje FCGI_PUTENV.

Zahtijevanjem URL-a formatiranog na određeni način, napadač može premjestiti pokazivač path_info na prvi bajt strukture “_fcgi_data_seg”, a pisanje nule u ovaj bajt premjestit će pokazivač “char * pos” na prethodno išlo memorijsko područje. FCGI_PUTENV pozvan sljedeći će prebrisati podatke u ovoj memoriji s vrijednošću koju napadač može kontrolirati. Navedena memorija također pohranjuje vrijednosti drugih FastCGI varijabli, a pisanjem njihovih podataka napadač može kreirati lažnu PHP_VALUE varijablu i postići izvršenje svog koda.

Izvor: opennet.ru

Dodajte komentar