Серверде алыстан кодду аткарууга мүмкүндүк берген php-fpmдеги аялуу

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

Чабуул nginx конфигурацияларында мүмкүн, мында PHP-FPMге багыттоо URL бөлүктөрүн “fastcgi_split_path_info” аркылуу бөлүү жана PATH_INFO чөйрө өзгөрмөсүн аныктоо аркылуу, бирок алгач “try_files $fastcgi_script_name” аркылуу файлдын бар экенин текшербестен ишке ашырылат. директивасы же “if (!-f $) document_root$fastcgi_script_name)". Маселе дагы пайда болот NextCloud платформасы үчүн сунушталган орнотууларда. Мисалы, төмөнкүдөй структуралар менен конфигурациялар:

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

Сиз бул баракчалардагы бөлүштүрүү топтомдорундагы көйгөйдүн чечилишине көз салсаңыз болот: Debian, RHEL, Ubuntu, SUSE/openSUSE, FreeBSD, догоого окшоп кошулган жер, Fedora. Чечим катары, "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 өзгөрмөсүн түзүп, алардын кодунун аткарылышына жетише алат.

Source: opennet.ru

Комментарий кошуу