Sårbarhed i php-fpm, der tillader fjernudførelse af kode på serveren

Tilgængelig rettelsesudgivelser af PHP 7.3.11, 7.1.33 og 7.2.24, hvori elimineret kritisk sårbarhed (CVE-2019-11043) i PHP-FPM (FastCGI Process Manager) udvidelsen, der giver dig mulighed for at fjernkøre din kode på systemet. For at angribe servere, der bruger PHP-FPM til at køre PHP-scripts i forbindelse med Nginx, er det allerede offentligt tilgængeligt arbejder udnytte.

Angrebet er muligt i nginx-konfigurationer, hvor videresendelse i PHP-FPM udføres ved at opdele dele af URL'en ved hjælp af "fastcgi_split_path_info" og definere PATH_INFO miljøvariablen, men uden først at kontrollere eksistensen af ​​filen med "try_files $fastcgi_script_name" direktivet eller "if (!-f $ document_root$fastcgi_script_name)". problem inklusiv kommer til syne i indstillingerne, der tilbydes til NextCloud-platformen. For eksempel er konfigurationer med formkonstruktioner sårbare:

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

Du kan følge fejlfindingen i distributioner på disse sider: Debian, RHEL, Ubuntu, SUSE/openSUSE, FreeBSD, Arch, Fedora. Som en sikkerhedsløsning kan du efter linjen "fastcgi_split_path_info" tilføje en kontrol for eksistensen af ​​den anmodede PHP-fil:

try_files $fastcgi_script_name =404;

Problemet er forårsaget af en fejl under manipulation af pointere i filen sapi/fpm/fpm/fpm_main.c. Når der tildeles en pointer, antages det, at værdien af ​​miljøvariablen PATH_INFO nødvendigvis indeholder et præfiks, der matcher stien til PHP-scriptet.
Hvis fastcgi_split_path_info-direktivet specificerer at opdele stien til scriptet ved hjælp af et regulært udtryk, der er følsomt over for transmissionen af ​​newline-tegnet (for eksempel, i mange eksempler foreslås det at bruge "^(.+?\.php)(/. *)$"), så kan angriberen opnå at skrive en tom værdi til miljøvariablen PATH_INFO. I dette tilfælde længere hen ad udførelsen udført skriver path_info[0] til nul og kalder FCGI_PUTENV.

Ved at anmode om en URL formateret på en bestemt måde, kan en angriber flytte path_info-markøren til den første byte af "_fcgi_data_seg"-strukturen, og skrivning af nul til denne byte vil flytte "char * pos"-markøren til det tidligere hukommelsesområde. FCGI_PUTENV kaldet næste vil overskrive dataene i denne hukommelse med en værdi, som angriberen kan kontrollere. Den angivne hukommelse gemmer også værdierne af andre FastCGI-variabler, og ved at skrive deres data kan angriberen oprette en dummy PHP_VALUE-variabel og opnå eksekvering af sin kode.

Kilde: opennet.ru

Tilføj en kommentar