Kwesbaarheid in php-fpm wat eksterne kode-uitvoering op die bediener moontlik maak

Beskikbaar regstellingvrystellings van PHP 7.3.11, 7.1.33 en 7.2.24, waarin uitgeskakel krities kwesbaarheid (CVE-2019-11043) in die PHP-FPM (FastCGI Process Manager) uitbreiding wat jou toelaat om jou kode op afstand uit te voer op die stelsel. Om bedieners aan te val wat PHP-FPM gebruik om PHP-skrifte saam met Nginx uit te voer, is dit reeds publiek beskikbaar die werker uitbuit.

Die aanval is moontlik in nginx-konfigurasies waarin aanstuur in PHP-FPM uitgevoer word deur dele van die URL te verdeel deur "fastcgi_split_path_info" te gebruik en die PATH_INFO omgewingsveranderlike te definieer, maar sonder om eers die bestaan ​​van die lêer na te gaan met die "try_files $fastcgi_script_name" opdrag of die "if (!-f $ document_root$fastcgi_script_name)". probleem insluitend verskyn in die instellings wat vir die NextCloud-platform aangebied word. Byvoorbeeld, konfigurasies met konstruksies van die vorm is kwesbaar:

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

U kan die probleemoplossing in verspreidings op hierdie bladsye volg: Debian, RHEL, Ubuntu, SUSE/openSUSE, FreeBSD, Boog, Fedora. As 'n sekuriteitsoplossing, na die "fastcgi_split_path_info"-reël, kan jy 'n tjek byvoeg vir die bestaan ​​van die gevraagde PHP-lêer:

probeer_lêers $fastcgi_script_name =404;

Die probleem word veroorsaak deur 'n fout tydens die manipulering van wysers in die lêer sapi/fpm/fpm/fpm_main.c. Wanneer 'n wyser toegewys word, word aanvaar dat die waarde van die PATH_INFO omgewingsveranderlike noodwendig 'n voorvoegsel bevat wat ooreenstem met die pad na die PHP-skrip.
As die fastcgi_split_path_info-instruksie die verdeling van die pad na die skrif spesifiseer deur 'n gewone uitdrukking te gebruik wat sensitief is vir die oordrag van die nuwelynkarakter (byvoorbeeld, in baie voorbeelde word voorgestel om "^(.+?\.php)(/. *)$"), dan kan die aanvaller 'n leë waarde na die PATH_INFO omgewingsveranderlike skryf. In hierdie geval, verder langs die uitvoering uitgevoer skryf pad_inligting[0] na nul en roep FCGI_PUTENV.

Deur 'n URL wat op 'n sekere manier geformateer is, te versoek, kan 'n aanvaller die pad_inligting-wyser na die eerste greep van die "_fcgi_data_seg"-struktuur skuif, en om nul na hierdie greep te skryf, sal die "char * pos"-wyser na die vorige geheue-area skuif. Die FCGI_PUTENV wat volgende genoem word, sal die data in hierdie geheue oorskryf met 'n waarde wat die aanvaller kan beheer. Die gespesifiseerde geheue stoor ook die waardes van ander FastCGI-veranderlikes, en deur hul data te skryf, kan die aanvaller 'n dummy PHP_VALUE-veranderlike skep en die uitvoering van sy kode bereik.

Bron: opennet.ru

Voeg 'n opmerking