Vulnerabilitatea PHP-fpm care permite executarea codului de la distanță pe server

Disponibil versiuni corective ale PHP 7.3.11, 7.1.33 și 7.2.24, în care eliminat critic vulnerabilitate (CVE-2019-11043) în extensia PHP-FPM (FastCGI Process Manager), care vă permite să executați codul de la distanță în sistem. Pentru a ataca serverele care folosesc PHP-FPM împreună cu Nginx pentru a rula scripturi PHP, acesta este deja disponibil public de lucru exploata.

Atacul este posibil în configurațiile nginx în care redirecționarea către PHP-FPM este efectuată prin separarea părților URL folosind „fastcgi_split_path_info” și definirea variabilei de mediu PATH_INFO, dar fără a verifica mai întâi existența fișierului folosind „try_files $fastcgi_script_name” directiva sau „dacă (!-f $) document_root$fastcgi_script_name)”. Problema este de asemenea apare în setările oferite pentru platforma NextCloud. De exemplu, configurații cu structuri precum:

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

Puteți urmări rezolvarea problemei în kiturile de distribuție pe aceste pagini: Debian, RHEL, Ubuntu, SUSE/openSUSE, FreeBSD, Arc, Fedora. Ca o soluție, puteți adăuga o verificare a existenței fișierului PHP solicitat după linia „fastcgi_split_path_info”:

try_files $fastcgi_script_name =404;

Problema este cauzată de o eroare la manipularea pointerilor dintr-un fișier sapi/fpm/fpm/fpm_main.c. Când se atribuie un pointer, se presupune că valoarea variabilei de mediu PATH_INFO trebuie să conțină un prefix care să se potrivească cu calea către scriptul PHP.
Dacă directiva fastcgi_split_path_info specifică împărțirea căii de script folosind o expresie regulată sensibilă la noua linie (de exemplu, multe exemple sugerează utilizarea „^(.+?\.php)(/.*)$”), atunci un atacator s-ar putea asigura că un valoarea goală este scrisă în variabila de mediu PATH_INFO. În acest caz, mai departe de-a lungul execuției efectuat scrierea path_info[0] la zero și apelarea FCGI_PUTENV.

Prin solicitarea unui URL formatat într-un anumit fel, un atacator poate realiza o deplasare a pointerului path_info la primul octet al structurii „_fcgi_data_seg”, iar scrierea unui zero la acest octet va duce la mișcarea „char* pos” pointer către o zonă de memorie localizată anterior. Următorul numit FCGI_PUTENV va suprascrie datele din această memorie cu o valoare pe care atacatorul o poate controla. Memoria specificată stochează, de asemenea, valorile altor variabile FastCGI, iar prin scrierea datelor acestora, un atacator poate crea o variabilă PHP_VALUE fictivă și poate realiza execuția codului lor.

Sursa: opennet.ru

Adauga un comentariu