php-fpm pažeidžiamumas, leidžiantis nuotoliniu būdu vykdyti kodą serveryje

Prieinamas PHP 7.3.11, 7.1.33 ir 7.2.24 taisymo leidimai, kuriuose pašalinta kritiškas pažeidžiamumas (CVE-2019-11043) PHP-FPM (FastCGI Process Manager) plėtinyje, leidžiančiame nuotoliniu būdu vykdyti kodą sistemoje. Norėdami pulti serverius, kurie naudoja PHP-FPM PHP scenarijus paleisti kartu su Nginx, tai jau yra viešai prieinama darbininkas išnaudoti.

Ataka galima naudojant nginx konfigūracijas, kuriose PHP-FPM persiuntimas vykdomas padalijant URL dalis naudojant "fastcgi_split_path_info" ir apibrėžiant PATH_INFO aplinkos kintamąjį, bet prieš tai nepatikrinus, ar yra failas su "try_files $fastcgi_script_name" direktyva arba „if (!-f $ document_root$fastcgi_script_name)“. problema, įskaitant pasirodo „NextCloud“ platformai siūlomuose nustatymuose. Pavyzdžiui, konfigūracijos su formos konstrukcijomis yra pažeidžiamos:

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

Galite sekti distribucijos trikčių šalinimą šiuose puslapiuose: debian, RHEL, ubuntu, SUSE / openSUSE, FreeBSD, Arka, Minkšta fetrinė skrybėlė. Kaip saugumo sprendimą, po eilutės „fastcgi_split_path_info“ galite pridėti patikrinimą, ar yra prašomas PHP failas:

try_files $fastcgi_script_name =404;

Problemą sukėlė klaida manipuliuojant failo rodyklėmis sapi/fpm/fpm/fpm_main.c. Priskiriant rodyklę, daroma prielaida, kad PATH_INFO aplinkos kintamojo reikšmė būtinai turi priešdėlį, atitinkantį PHP scenarijaus kelią.
Jei direktyva fastcgi_split_path_info nurodo scenarijaus kelio padalijimą naudojant reguliariąją išraišką, kuri yra jautri naujos eilutės simbolio perdavimui (pavyzdžiui, daugelyje pavyzdžių siūloma naudoti „^(.+?\.php)(/. *)$"), tada užpuolikas gali įrašyti tuščią reikšmę į aplinkos kintamąjį PATH_INFO. Šiuo atveju toliau vykdymo eigoje atliekami parašyti path_info[0] iki nulio ir iškviesti FCGI_PUTENV.

Prašydamas tam tikru būdu suformatuoto URL, užpuolikas gali perkelti „path_info“ žymeklį į pirmąjį „_fcgi_data_seg“ struktūros baitą, o įrašius nulį į šį baitą, žymeklis „char * pos“ bus perkeltas į anksčiau buvusią atminties sritį. Toliau iškviestas FCGI_PUTENV perrašys duomenis šioje atmintyje reikšme, kurią užpuolikas gali valdyti. Nurodytoje atmintyje taip pat saugomos kitų FastCGI kintamųjų reikšmės, o įrašydamas jų duomenis, užpuolikas gali sukurti fiktyvų PHP_VALUE kintamąjį ir pasiekti savo kodo vykdymą.

Šaltinis: opennet.ru

Добавить комментарий