Kerentanan PHP-fpm sing ngidini eksekusi kode remot ing server

Kasedhiya release korektif PHP 7.3.11, 7.1.33 lan 7.2.24, kang diilangi kriтичСская kerentanan (CVE-2019-11043) ing ekstensi PHP-FPM (FastCGI Process Manager), sing ngidini sampeyan ngeksekusi kode ing sistem kanthi jarak jauh. Kanggo nyerang server sing nggunakake PHP-FPM bebarengan karo Nginx kanggo mbukak skrip PHP, iku wis kasedhiya kanggo umum. sing makarya ngeksploitasi.

Serangan kasebut bisa ditindakake ing konfigurasi nginx sing diterusake menyang PHP-FPM ditindakake kanthi misahake bagean saka URL nggunakake "fastcgi_split_path_info" lan nemtokake variabel lingkungan PATH_INFO, nanging tanpa mriksa dhisik anane file kasebut nggunakake "try_files $fastcgi_script_name" arahan utawa "yen (!-f $) document_root $fastcgi_script_name)". Masalahe uga katon ing setelan sing ditawakake kanggo platform NextCloud. Contone, konfigurasi karo struktur kaya:

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

Sampeyan bisa nglacak resolusi masalah ing kit distribusi ing kaca iki: Debian, RHEL, ubuntu, SUSE/openSUSE, FreeBSD, arch, Fedora. Minangka solusi, sampeyan bisa nambah priksa manawa file PHP sing dijaluk sawise baris "fastcgi_split_path_info":

try_files $fastcgi_script_name = 404;

Masalah kasebut disebabake kesalahan nalika manipulasi penunjuk ing file sapi/fpm/fpm/fpm_main.c. Nalika nemtokake pointer, dianggep yen nilai variabel lingkungan PATH_INFO kudu ngemot awalan sing cocog karo path menyang script PHP.
Yen arahan fastcgi_split_path_info nemtokake pamisah path script nggunakake ekspresi reguler sensitif baris anyar (contone, akeh conto nyaranake nggunakake "^(.+?\.php)(/.*)$"), banjur penyerang bisa njamin yen Nilai kosong ditulis menyang variabel lingkungan PATH_INFO. Ing kasus iki, luwih sadawane eksekusi digawa metu nulis path_info [0] menyang nul lan nelpon FCGI_PUTENV.

Kanthi njaluk URL sing diformat kanthi cara tartamtu, panyerang bisa ngowahi path_info pointer menyang byte pisanan saka struktur "_fcgi_data_seg", lan nulis nol menyang bait iki bakal nyebabake gerakan "char * pos" pointer menyang area memori sing ana sadurunge. Sabanjure sing diarani FCGI_PUTENV bakal nimpa data ing memori iki kanthi nilai sing bisa dikontrol dening panyerang. Memori sing ditemtokake uga nyimpen nilai variabel FastCGI liyane, lan kanthi nulis data kasebut, penyerang bisa nggawe variabel PHP_VALUE fiktif lan entuk eksekusi kode kasebut.

Source: opennet.ru

Add a comment