Ranjivost u php-fpm-u koja omogućava daljinsko izvršavanje koda na serveru

Dostupni korektivna izdanja PHP-a 7.3.11, 7.1.33 i 7.2.24, u kojima eliminisan kritička ranjivost (CVE-2019-11043) u ekstenziji PHP-FPM (FastCGI Process Manager), koja vam omogućava da daljinski izvršite svoj kod na sistemu. Za napad na servere koji koriste PHP-FPM u sprezi sa Nginxom za pokretanje PHP skripti, već je javno dostupan radnik exploit.

Napad je moguć u nginx konfiguracijama u kojima se prosljeđivanje na PHP-FPM vrši odvajanjem dijelova URL-a pomoću “fastcgi_split_path_info” i definiranjem varijable okruženja PATH_INFO, ali bez prethodne provjere postojanja datoteke pomoću “try_files $fastcgi_script_name” direktiva ili "if (!-f $) root_dokument$fastcgi_script_name)". Problem je takođe manifestovani u postavkama ponuđenim za NextCloud platformu. Na primjer, konfiguracije sa strukturama kao što su:

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

Rješenje problema možete pratiti u distribucijskim kompletima na ovim stranicama: Debian, RHEL, Ubuntu, SUSE/openSUSE, FreeBSD, svod, fedora. Kao rješenje, možete dodati provjeru postojanja tražene PHP datoteke nakon reda “fastcgi_split_path_info”:

try_files $fastcgi_script_name =404;

Problem je uzrokovan greškom prilikom manipulacije pokazivačima u datoteci sapi/fpm/fpm/fpm_main.c. Kada se dodjeljuje pokazivač, pretpostavlja se da vrijednost PATH_INFO varijable okruženja mora sadržavati prefiks koji odgovara putanji do PHP skripte.
Ako direktiva fastcgi_split_path_info specificira podjelu putanje skripte pomoću regularnog izraza osjetljivog na novi red (na primjer, mnogi primjeri sugeriraju korištenje "^(.+?\.php)(/.*)$"), tada napadač može osigurati da prazna vrijednost se upisuje u varijablu okruženja PATH_INFO. U ovom slučaju, dalje uz izvršenje izvršeno pisanje path_info[0] na nulu i pozivanje FCGI_PUTENV.

Zahtjevom za URL formatiran na određeni način, napadač može postići pomak path_info pokazivača na prvi bajt strukture "_fcgi_data_seg", a upisivanje nule u ovaj bajt će dovesti do pomicanja "char* pos" pokazivač na prethodno locirano memorijsko područje. Sljedeći nazvani FCGI_PUTENV će prepisati podatke u ovoj memoriji vrijednošću koju napadač može kontrolirati. Navedena memorija također pohranjuje vrijednosti drugih FastCGI varijabli, a upisivanjem njihovih podataka napadač može kreirati fiktivnu PHP_VALUE varijablu i postići izvršenje svog koda.

izvor: opennet.ru

Dodajte komentar