riportet e korrigjimit PHP 7.3.11, 7.1.33 dhe 7.2.24, në të cilat kritik (CVE-2019-11043) në zgjatjen PHP-FPM (menaxheri i proceseve FastCGI), e cila lejon ekzekutimin e kodit të tij në sistem në distancë. Për sulmin ndaj serverëve që përdorin PHP-FPM në kombinim me Nginx për të ekzekutuar skriptet PHP, tashmë është publikisht e disponueshme .
Sulmi është i mundshëm në konfigurimet e nginx, ku kalimi në PHP-FPM bëhet me ndarjen e pjesëve të URL-së duke përdorur «fastcgi_split_path_info» dhe përcaktimin e ndryshores PATH_INFO, por pa verifikuar paraprakisht ekzistencën e skedarit me direktivën «try_files $fastcgi_script_name» ose ndërtimin «if (!-f $document_root$fastcgi_script_name)». Problemi përfshin gjithashtu në konfigurimet e ofruara për platformën NextCloud. Për shembull, konfigurimet janë të cenueshme me ndërtimet në formën e:
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ë anashkalimi mbrojtjeje pas rreshtit «fastcgi_split_path_info», mund të shtoni një verifikim të ekzistencës së skedarit PHP të kërkuar:
try_files $fastcgi_script_name =404;
Problemi është shkaktuar nga një gabim në manovrimin e treguesve në skedarin . Kur nënshtrohet një tregues, supozohet se vlera e ndryshores PATH_INFO patjetër përmban një prefiks që përkon me rrugën e skriptit PHP.
Nëse në direktivën fastcgi_split_path_info është e përcaktuar ndarja e rrugës së skriptit duke përdorur një shprehje të rregullt, e ndjeshme ndaj kalimit të simboleve të këmbimit të rreshtit (për shembull, në shumë shembuj sugjerohet të përdoret «^(.+?\.php)(\/.*)$»), atëherë sulmuesi mund të arrijë të regjistrojë në ndryshoren PATH_INFO një vlerë bosh. Në këtë rast, më pas në ekzekutimin regjistrimi në path_info[0] zero dhe thirrja e FCGI_PUTENV.
Duke kërkuar një URL të strukturuar në një mënyrë të caktuar, sulmuesi mund të arrijë të zhvendosë treguesin path_info në bajtin e parë të strukturës «_fcgi_data_seg», dhe regjistrimi i zeros në këtë bajt do të çojë në zhvendosjen e treguesit «char* pos» në një zonë të mëparshme të memories. Thirrja e mëpasshme FCGI_PUTENV do të tejkalojë të dhënat në këtë memorie me një vlerë që sulmuesi mund ta kontrollojë. Në këtë memorie gjithashtu mbahen vlera të ndryshores së tjera FastCGI dhe duke regjistruar të dhënat e tij, sulmuesi mund të krijojë një ndryshore fiktive PHP_VALUE dhe të arrijë të ekzekutojë kodin e tij.
Burimi: opennet.ru
