Php-fpm haavatavus, mis võimaldab serveris koodi kaugkäivitada

Saadaval PHP 7.3.11, 7.1.33 ja 7.2.24 parandusväljaanded, milles kõrvaldatud kriitiline haavatavus (CVE-2019-11043) PHP-FPM (FastCGI protsessihaldur) laienduses, mis võimaldab teil oma koodi süsteemis kaugkäivitada. Rünnata servereid, mis kasutavad PHP-FPM-i PHP-skriptide käitamiseks koos Nginxiga, on see juba avalikult saadaval töö ära kasutada.

Rünnak on võimalik nginxi konfiguratsioonides, kus PHP-FPM-i edastamine toimub URL-i osade tükeldamisel, kasutades "fastcgi_split_path_info" ja määratledes keskkonnamuutuja PATH_INFO, kuid eelnevalt kontrollimata faili olemasolu "try_files $fastcgi_script_name" abil. käskkiri või "if (!-f $ document_root$fastcgi_script_name)". probleem, sealhulgas ilmub NextCloudi platvormi jaoks pakutavates seadetes. Näiteks vormi konstruktsioonidega konfiguratsioonid on haavatavad:

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

Distributsioonide tõrkeotsingut saate jälgida järgmistel lehtedel: Debian, RHEL, Ubuntu, SUSE/openSUSE, FreeBSD, Kaar, Fedora. Turvalahendusena saate pärast rida "fastcgi_split_path_info" lisada kontrolli taotletud PHP-faili olemasolu kohta:

try_files $fastcgi_script_name =404;

Probleemi põhjuseks on viga failis osutitega manipuleerimisel sapi/fpm/fpm/fpm_main.c. Osuti määramisel eeldatakse, et PATH_INFO keskkonnamuutuja väärtus sisaldab tingimata eesliidet, mis ühtib PHP skripti teega.
Kui käsk fastcgi_split_path_info määrab skripti tee tükeldamise regulaaravaldise abil, mis on tundlik reavahetuse märgi edastamise suhtes (näiteks paljudes näidetes soovitatakse kasutada "^(.+?\.php)(/. *)$"), siis võib ründaja saavutada keskkonnamuutuja PATH_INFO tühja väärtuse kirjutamise. Sel juhul täitmist edasi teostatud tee_info[0] kirjutamine nulliks ja FCGI_PUTENV kutsumine.

Teatud viisil vormindatud URL-i taotlemisel saab ründaja liigutada kursori path_info struktuuri „_fcgi_data_seg” esimesele baidile ja sellele baidile nulli kirjutamine viib kursori „char * pos” varem liikunud mälualale. Järgmisena kutsutav FCGI_PUTENV kirjutab selles mälus olevad andmed üle väärtusega, mida ründaja saab juhtida. Määratud mällu salvestatakse ka teiste FastCGI muutujate väärtused ja nende andmeid kirjutades saab ründaja luua näiva PHP_VALUE muutuja ja saavutada oma koodi täitmise.

Allikas: opennet.ru

Lisa kommentaar