Vulnerabilitat PHP-fpm que permet l'execució remota de codi al servidor

Disponible versions correctives de PHP 7.3.11, 7.1.33 i 7.2.24, en què eliminat crític vulnerabilitat (CVE-2019-11043) a l'extensió PHP-FPM (FastCGI Process Manager), que us permet executar el vostre codi de manera remota al sistema. Per atacar servidors que utilitzen PHP-FPM juntament amb Nginx per executar scripts PHP, ja està disponible públicament treballador explotar.

L'atac és possible en configuracions nginx en què el reenviament a PHP-FPM es realitza separant parts de l'URL mitjançant "fastcgi_split_path_info" i definint la variable d'entorn PATH_INFO, però sense comprovar abans l'existència del fitxer mitjançant el "try_files $fastcgi_script_name" directiva o el "if (!-f $) arrel_document$nom_script_fastcgi)". El problema també ho és apareix a la configuració que s'ofereix per a la plataforma NextCloud. Per exemple, configuracions amb estructures com:

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

Podeu fer un seguiment de la resolució del problema als kits de distribució en aquestes pàgines: Debian, RHEL, Ubuntu, SUSE/openSUSE, FreeBSD, Arc, Fedora. Com a solució alternativa, podeu afegir una comprovació de l'existència del fitxer PHP sol·licitat després de la línia "fastcgi_split_path_info":

try_files $fastcgi_script_name =404;

El problema és causat per un error en manipular els punters d'un fitxer sapi/fpm/fpm/fpm_main.c. Quan s'assigna un punter, se suposa que el valor de la variable d'entorn PATH_INFO ha de contenir un prefix que coincideixi amb el camí de l'script PHP.
Si la directiva fastcgi_split_path_info especifica dividir el camí de l'script mitjançant una expressió regular sensible a la nova línia (per exemple, molts exemples suggereixen utilitzar "^(.+?\.php)(/.*)$"), un atacant podria assegurar-se que un el valor buit s'escriu a la variable d'entorn PATH_INFO. En aquest cas, més enllà de l'execució dut a terme escrivint path_info[0] a zero i cridant a FCGI_PUTENV.

En sol·licitar una URL formatada d'una manera determinada, un atacant pot aconseguir un desplaçament del punter path_info al primer byte de l'estructura "_fcgi_data_seg" i escriure un zero en aquest byte provocarà el moviment del "char* pos" punter a una àrea de memòria ubicada anteriorment. El següent anomenat FCGI_PUTENV sobreescriurà les dades d'aquesta memòria amb un valor que l'atacant pugui controlar. La memòria especificada també emmagatzema els valors d'altres variables FastCGI, i escrivint les seves dades, un atacant pot crear una variable PHP_VALUE fictícia i aconseguir l'execució del seu codi.

Font: opennet.ru

Afegeix comentari