Сервер дээр алсаас код гүйцэтгэх боломжийг олгодог PHP-fpm эмзэг байдал

Боломжтой PHP 7.3.11, 7.1.33, 7.2.24-ийн залруулах хувилбарууд, үүнд хасагдсан шүүмжлэлтэй эмзэг байдал (CVE-2019-11043) PHP-FPM (FastCGI Процессын Менежер) өргөтгөл доторх кодыг систем дээр алсаас ажиллуулах боломжтой. PHP скриптүүдийг ажиллуулахын тулд Nginx-тэй хамт PHP-FPM ашигладаг серверүүд рүү халдахын тулд үүнийг аль хэдийн нийтэд нээлттэй болгосон. ажилчин ашиглах.

Энэ халдлага нь "fastcgi_split_path_info" ашиглан URL-ын хэсгүүдийг салгаж, PATH_INFO орчны хувьсагчийг тодорхойлох замаар PHP-FPM рүү дамжуулах nginx тохиргоонд боломжтой боловч эхлээд "try_files $fastcgi_script_name" ашиглан файл байгаа эсэхийг шалгахгүйгээр хийх боломжтой. заавар эсвэл “хэрэв (!-f $) document_root$fastcgi_script_name)". Асуудал бас л байна илэрсэн NextCloud платформд санал болгож буй тохиргоонд. Жишээлбэл, дараах бүтэцтэй тохиргоонууд:

байршил ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^ (. +? \. php) (/.*) $;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php: 9000;
}

Та эдгээр хуудсан дээрх түгээлтийн багц дахь асуудлын шийдлийг хянах боломжтой. Debian, RHEL, Ubuntu, SUSE/openSUSE, FreeBSD-ийн, Нуман, Федора. Үүнийг шийдвэрлэхийн тулд та "fastcgi_split_path_info" мөрийн дараа хүссэн PHP файл байгаа эсэхийг шалгах тэмдэг нэмж болно.

try_files $fastcgi_script_name =404;

Асуудал нь файл дахь заагчийг удирдах үед гарсан алдаанаас үүдэлтэй sapi/fpm/fpm/fpm_main.c. Заагчийг оноохдоо PATH_INFO орчны хувьсагчийн утга нь PHP скриптийн замд тохирох угтварыг агуулсан байх ёстой гэж үздэг.
Хэрэв fastcgi_split_path_info заавар нь шинэ мөрөнд мэдрэмтгий тогтмол илэрхийлэл ашиглан скриптийн замыг хуваахыг зааж өгсөн бол (жишээлбэл, "^(.+?\.php)(/.*)$" ашиглахыг санал болгож байна), халдагчид хоосон утгыг PATH_INFO орчны хувьсагч руу бичнэ. Энэ тохиолдолд цааш нь гүйцэтгэлийн дагуу хэрэгжүүлсэн path_info[0]-г тэг болгож FCGI_PUTENV руу залгаж байна.

Тодорхой хэлбэрээр форматлагдсан URL-г хүссэнээр халдагчид path_info заагчийг "_fcgi_data_seg" бүтцийн эхний байт руу шилжүүлэх боломжтой бөгөөд энэ байт руу тэг бичих нь "char* pos"-ын хөдөлгөөнд хүргэнэ. өмнө нь байрлуулсан санах ойн хэсэг рүү заагч. Дараагийн FCGI_PUTENV нь энэ санах ой дахь өгөгдлийг халдагчийн хянаж чадах утгыг дарж бичнэ. Заасан санах ой нь бусад FastCGI хувьсагчийн утгуудыг хадгалдаг бөгөөд өгөгдлөө бичснээр халдагчид зохиомол PHP_VALUE хувьсагч үүсгэж, кодоо гүйцэтгэх боломжтой.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх