Ang kahinaan ng PHP-fpm na nagbibigay-daan sa pagpapatupad ng malayuang code sa server

Magagamit corrective release ng PHP 7.3.11, 7.1.33 at 7.2.24, kung saan inalis mapanganib kahinaan (CVE-2019-11043) sa extension ng PHP-FPM (FastCGI Process Manager), na nagbibigay-daan sa iyong malayuang isagawa ang iyong code sa system. Para atakehin ang mga server na gumagamit ng PHP-FPM kasabay ng Nginx para magpatakbo ng mga PHP script, available na ito sa publiko nagtatrabaho pagsamantalahan.

Posible ang pag-atake sa mga configuration ng nginx kung saan ang pagpapasa sa PHP-FPM ay isinasagawa sa pamamagitan ng paghihiwalay ng mga bahagi ng URL gamit ang "fastcgi_split_path_info" at pagtukoy sa PATH_INFO environment variable, ngunit nang hindi muna sinusuri ang pagkakaroon ng file gamit ang "try_files $fastcgi_script_name" direktiba o ang "kung (!-f $) document_root$fastcgi_script_name)". Ang problema rin ay ipinahayag sa mga setting na inaalok para sa NextCloud platform. Halimbawa, ang mga pagsasaayos na may mga istruktura tulad ng:

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

Maaari mong subaybayan ang paglutas ng problema sa mga distribution kit sa mga pahinang ito: Debian, RHEL, Ubuntu, SUSE/openSUSE, FreeBSD, Arko, Fedora. Bilang isang solusyon, maaari kang magdagdag ng tseke para sa pagkakaroon ng hiniling na PHP file pagkatapos ng linyang β€œfastcgi_split_path_info”:

try_files $fastcgi_script_name =404;

Ang problema ay sanhi ng isang error kapag nagmamanipula ng mga pointer sa isang file sapi/fpm/fpm/fpm_main.c. Kapag nagtatalaga ng pointer, ipinapalagay na ang value ng PATH_INFO environment variable ay dapat maglaman ng prefix na tumutugma sa path sa PHP script.
Kung ang fastcgi_split_path_info directive ay tumutukoy sa paghahati sa script path gamit ang isang newline-sensitive na regular na expression (halimbawa, maraming mga halimbawa ang nagmumungkahi ng paggamit ng "^(.+?\.php)(/.*)$"), pagkatapos ay masisiguro ng isang attacker na ang isang ang walang laman na halaga ay nakasulat sa PATH_INFO environment variable. Sa kasong ito, higit pa kasama ang pagpapatupad isinagawa pagsulat ng path_info[0] sa zero at pagtawag sa FCGI_PUTENV.

Sa pamamagitan ng paghiling ng URL na naka-format sa isang tiyak na paraan, maaaring makamit ng isang attacker ang paglipat ng path_info pointer sa unang byte ng istrukturang "_fcgi_data_seg", at ang pagsulat ng zero sa byte na ito ay hahantong sa paggalaw ng "char* pos" pointer sa isang dati nang matatagpuan na lugar ng memorya. Ang susunod na tinatawag na FCGI_PUTENV ay o-overwrite ang data sa memorya na ito ng isang halaga na makokontrol ng umaatake. Ang tinukoy na memorya ay nag-iimbak din ng mga halaga ng iba pang mga variable ng FastCGI, at sa pamamagitan ng pagsulat ng kanilang data, ang isang umaatake ay maaaring lumikha ng isang kathang-isip na PHP_VALUE variable at makamit ang pagpapatupad ng kanilang code.

Pinagmulan: opennet.ru

Magdagdag ng komento