Serverda masofaviy kodni bajarishga imkon beruvchi PHP-fpm zaifligi

Dostupny PHP 7.3.11, 7.1.33 va 7.2.24 tuzatuvchi versiyalari, unda bartaraf etildi kriticheskaya zaiflik (CVE-2019-11043) PHP-FPM (FastCGI Process Manager) kengaytmasida, bu sizning kodingizni tizimda masofadan turib bajarish imkonini beradi. PHP skriptlarini ishga tushirish uchun Nginx bilan birgalikda PHP-FPM ishlatadigan serverlarga hujum qilish uchun u allaqachon hamma uchun ochiq ishchi ekspluatatsiya qilish.

Hujum nginx konfiguratsiyalarida mumkin, bunda PHP-FPM ga yoʻnaltirish URL qismlarini “fastcgi_split_path_info” yordamida ajratish va PATH_INFO muhit oʻzgaruvchisini aniqlash orqali amalga oshiriladi, lekin avval “try_files $fastcgi_script_name” yordamida fayl mavjudligini tekshirmasdan turib. direktivasi yoki “if (!-f $) document_root$fastcgi_script_name)”. Muammo ham proyavlyaetsya NextCloud platformasi uchun taklif qilingan sozlamalarda. Masalan, quyidagi kabi tuzilmalar bilan konfiguratsiyalar:

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

Siz ushbu sahifalardagi tarqatish to'plamlarida muammoning echimini kuzatishingiz mumkin: Debian, RHEL, Ubuntu, SUSE/openSUSE, FreeBSD, ark, Fedora. Vaqtinchalik yechim sifatida “fastcgi_split_path_info” qatoridan keyin so‘ralgan PHP fayli mavjudligini tekshirishni qo‘shishingiz mumkin:

try_files $fastcgi_script_name =404;

Muammo fayldagi ko'rsatkichlarni boshqarishda xatolik tufayli yuzaga keladi sapi/fpm/fpm/fpm_main.c. Ko'rsatkichni tayinlashda PATH_INFO muhit o'zgaruvchisining qiymati PHP skripti yo'liga mos keladigan prefiksni o'z ichiga olishi kerak deb taxmin qilinadi.
Agar fastcgi_split_path_info direktivasi yangi qatorga sezgir muntazam ifoda yordamida skript yo'lini ajratishni belgilasa (masalan, ko'p misollar "^(.+?\.php)(/.*)$" dan foydalanishni taklif qiladi), u holda tajovuzkor bo'sh qiymat PATH_INFO muhit o'zgaruvchisiga yoziladi. Bu holda, ijro davomida yanada oshiriladi path_info[0] ni nolga yozish va FCGI_PUTENV ni chaqirish.

Muayyan tarzda formatlangan URL manzilini so'rash orqali tajovuzkor path_info ko'rsatkichini "_fcgi_data_seg" strukturasining birinchi baytiga o'tkazishga erishishi mumkin va bu baytga nol yozish "char* pos" ning harakatiga olib keladi. avval joylashgan xotira maydoniga ko'rsatgich. Keyingi FCGI_PUTENV deb nomlangan ushbu xotiradagi ma'lumotlarni tajovuzkor boshqarishi mumkin bo'lgan qiymat bilan qayta yozadi. Belgilangan xotira boshqa FastCGI o'zgaruvchilari qiymatlarini ham saqlaydi va ularning ma'lumotlarini yozish orqali tajovuzkor xayoliy PHP_VALUE o'zgaruvchisini yaratishi va o'z kodining bajarilishiga erishishi mumkin.

Manba: opennet.ru

a Izoh qo'shish