versionet korrigjuese PHP 7.3.11, 7.1.33 dhe 7.2.24, të cilat kritike (CVE-2019-11043) në zgjerimin PHP-FPM (menaxheri i proceseve FastCGI), që lejon ekzekutimin e kodit tuaj në sistem nga distanca. Një exploit funksional është tashmë i disponueshëm publikuar për sulmet ndaj serverëve që përdorin PHP-FPM së bashku me Nginx për ekzekutimin e skripteve PHP. .
Sulmi është i mundur në konfigurimet nginx, ku kalimi në PHP-FPM bëhet me ndarje të pjesëve të URL-së përmes "fastcgi_split_path_info" dhe përcaktimin e variablit të mjedisit PATH_INFO, por pa verifikim paraprak të ekzistencës së skedarit nga direktiva "try_files $fastcgi_script_name" ose konstrukti "if (!-f $document_root$fastcgi_script_name)". Problemi gjithashtu ndodhet në cilësimet e ofruara për platformën NextCloud. Për shembull, konfigurimet me konstrukte të natyrshme mjaft të rrezikshme janë:
location ~ [^\/]\.php(\/|$) {
fastcgi_split_path_info ^(.+?\.php)(\/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}
Për të ndjekur zgjidhjen e problemit në shpërndarjet mund të vizitoni këto faqe: , , , , , , . Si një metodë për të mbrojtur pas linjës "fastcgi_split_path_info", mund të shtoni kontrollin e ekzistencës së skedarit PHP të kërkuar:
try_files $fastcgi_script_name =404;
Problemi shkaktohet nga një gabim në manipulimin e treguesve në skedarin . Gjatë caktimit të treguesit supozohet se vlera e variablit të mjedisit PATH_INFO duhet të përmbajë një prefix që përputhet me rrugën e skriptit PHP.
Nëse në direktivën fastcgi_split_path_info është e specifikuar ndarja e rrugës së skriptit me një shprehje të rregullt, që është e ndjeshme ndaj kalimit të karakterit të ndërrimit të linjës (për shembull, në shumë raste rekomandohet të përdoret "^(.+?\.php)(\/.*)$"), atëherë sulmuesi mund të arrijë të shkruajë në variablit të mjedisit PATH_INFO një vlerë të zbrazët. Në këtë rast, gjatë ekzekutimit do të ndodhi shkruhet në path_info[0] zero dhe thirrja e FCGI_PUTENV.
Duke kërkuar një URL të formuar në një mënyrë të caktuar, sulmuesi mund të arrijë të zhvendosë treguesin path_info në byte-in e parë të strukturës "_fcgi_data_seg", dhe shkruarja e zeros në këtë byte do të çojë në zhvendosjen e treguesit "char* pos" në një zonë më parë të memories. Thirrja që vjen më pas e FCGI_PUTENV do të mbushë të dhënat në këtë memorie me një vlerë që mund të kontrollojë sulmuesi. Në këtë memorie, gjithashtu ruhet vlera e variablave të tjerë FastCGI dhe duke shkruar të dhënat e tij, sulmuesi mund të krijohet një variabël fantazmë PHP_VALUE dhe arrin të ekzekutojë kodin e tij.
Burimi: opennet.ru
