Խոցելիություն php-fpm-ում, որը թույլ է տալիս սերվերի վրա կոդի հեռավոր կատարումը

Մատչելի PHP 7.3.11, 7.1.33 և 7.2.24 ուղղիչ թողարկումները, որոնցում վերացվել է քննադատական խոցելիություն (CVE-2019-11043) PHP-FPM (FastCGI Process Manager) ընդլայնման մեջ, որը թույլ է տալիս հեռակա կարգով կատարել ձեր կոդը համակարգում: Սերվերների վրա հարձակվելու համար, որոնք օգտագործում են PHP-FPM՝ PHP սկրիպտները Nginx-ի հետ համատեղ գործարկելու համար, այն արդեն հասանելի է հանրությանը: աշխատող շահագործել.

Հարձակումը հնարավոր է nginx կոնֆիգուրացիաներում, որոնցում PHP-FPM-ում վերահասցեավորումն իրականացվում է URL-ի մասերը բաժանելով՝ օգտագործելով «fastcgi_split_path_info» և սահմանելով PATH_INFO միջավայրի փոփոխականը, բայց առանց նախապես ստուգելու ֆայլի գոյությունը «try_files $fastcgi_script_name»-ով: հրահանգը կամ «if (!-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- ը, Կամար, 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

Добавить комментарий