Kerentanan PHP-fpm anu ngamungkinkeun palaksanaan kode jauh dina server

Aya release corrective PHP 7.3.11, 7.1.33 jeung 7.2.24, nu ngaleungitkeun kritis karentanan (CVE-2019-11043) dina ekstensi PHP-FPM (FastCGI Process Manager), anu ngamungkinkeun anjeun ngaéksekusi kode anjeun jarak jauh dina sistem. Pikeun nyerang server anu nganggo PHP-FPM babarengan sareng Nginx pikeun ngajalankeun skrip PHP, éta parantos sayogi umum. damel mangpaatkeun.

Serangan kasebut mungkin dina konfigurasi nginx dimana diteruskeun kana PHP-FPM dilaksanakeun ku cara misahkeun bagian tina URL nganggo "fastcgi_split_path_info" sareng nangtukeun variabel lingkungan PATH_INFO, tapi tanpa mariksa heula ayana file nganggo "try_files $fastcgi_script_name" diréktif atawa "lamun (!-f $) document_root $ fastcgi_script_name)". Masalahna oge nembongan dina setélan ditawarkeun pikeun platform NextCloud. Salaku conto, konfigurasi sareng struktur sapertos:

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

Anjeun tiasa ngalacak résolusi masalah dina kit distribusi dina halaman ieu: Debian, RHEL, Ubuntu, SUSE / openSUSE, FreeBSD, bengkokan, Fedora. Salaku workaround, anjeun tiasa nambihan cek pikeun ayana file PHP anu dipénta saatos garis "fastcgi_split_path_info":

try_files $ fastcgi_script_name = 404;

Masalahna disababkeun ku kasalahan nalika ngamanipulasi pointer dina file sapi/fpm/fpm/fpm_main.c. Nalika napelkeun pointer, dianggap yén nilai variabel lingkungan PATH_INFO kedah ngandung awalan anu cocog sareng jalur kana naskah PHP.
Upami diréktif fastcgi_split_path_info netepkeun ngabagi jalur skrip nganggo éksprési biasa anu sénsitip baris anyar (contona, seueur conto nyarankeun ngagunakeun "^(.+?\.php)(/.*)$"), teras panyerang tiasa mastikeun yén nilai kosong ditulis kana variabel lingkungan PATH_INFO. Dina hal ieu, salajengna sapanjang palaksanaan dilaksanakan nulis path_info [0] ka enol jeung nelepon FCGI_PUTENV.

Ku nyuhunkeun URL anu diformat ku cara anu tangtu, panyerang tiasa ngahontal peralihan panunjuk path_info kana bait munggaran tina struktur "_fcgi_data_seg", sareng nyerat nol kana bait ieu bakal ngakibatkeun gerakan "char * pos" pointer ka wewengkon memori lokasina saméméhna. Disebut FCGI_PUTENV salajengna bakal nimpa data dina mémori ieu kalayan nilai anu tiasa dikontrol ku panyerang. Mémori anu ditangtukeun ogé nyimpen nilai-nilai variabel FastCGI anu sanés, sareng ku nyerat datana, panyerang tiasa nyiptakeun variabel PHP_VALUE fiktif sareng ngahontal palaksanaan kodena.

sumber: opennet.ru

Tambahkeun komentar