PHP-fpm vundebleco kiu permesas fora kodo ekzekuto sur la servilo

Disponebla korektaj eldonoj de PHP 7.3.11, 7.1.33 kaj 7.2.24, en kiuj eliminita kritikaj vundebleco (CVE-2019-11043) en la etendaĵo PHP-FPM (FastCGI Process Manager), kiu ebligas al vi malproksime ekzekuti vian kodon en la sistemo. Por ataki servilojn, kiuj uzas PHP-FPM kune kun Nginx por ruli PHP-skriptojn, ĝi jam estas publike disponebla. laboristo ekspluati.

La atako estas ebla en nginx-agordoj en kiuj plusendado al PHP-FPM estas farata disigante partojn de la URL uzante "fastcgi_split_path_info" kaj difinante la mediovariablon PATH_INFO, sed sen unue kontroli la ekziston de la dosiero uzante la "try_files $fastcgi_script_name" direktivo aŭ la "se (!-f $) dokument_radiko$fastcgi_script_name)". La problemo ankaŭ estas aperas en la agordoj ofertitaj por la NextCloud-platformo. Ekzemple, agordoj kun strukturoj kiel:

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

Vi povas spuri la solvon de la problemo en distribuaj iloj sur ĉi tiuj paĝoj: Debian, RELO, ubuntu, SUSE/malfermuSUSE, FreeBSD, Arko, Fedora. Kiel solvo, vi povas aldoni kontrolon pri la ekzisto de la petita PHP-dosiero post la linio "fastcgi_split_path_info":

provi_dosieroj $fastcgi_script_name =404;

La problemo estas kaŭzita de eraro dum manipulado de montriloj en dosiero sapi/fpm/fpm/fpm_main.c. Kiam oni atribuas montrilon, oni supozas, ke la valoro de la mediovariablo PATH_INFO devas enhavi prefikson, kiu kongruas kun la vojo al la PHP-skripto.
Se la direktivo fastcgi_split_path_info specifas disigi la skriptovojon per novlinio-sentema regula esprimo (ekzemple, multaj ekzemploj sugestas uzi "^(.+?\.php)(/.*)$"), tiam atakanto povus certigi ke malplena valoro estas skribita al la mediovariablo PATH_INFO. En ĉi tiu kazo, plu laŭ la ekzekuto efektivigita skribante path_info[0] al nulo kaj voki FCGI_PUTENV.

Petante URL formatitan en certa maniero, atakanto povas atingi movon de la path_info-montrilo al la unua bajto de la "_fcgi_data_seg" strukturo, kaj skribi nulon al ĉi tiu bajto kondukos al la movado de la "char* pos" montrilo al antaŭe lokita memorareo. La sekva nomita FCGI_PUTENV anstataŭigos la datumojn en ĉi tiu memoro kun valoro, kiun la atakanto povas kontroli. La specifita memoro ankaŭ konservas la valorojn de aliaj FastCGI-variabloj, kaj skribante iliajn datumojn, atakanto povas krei fikcian PHP_VALUE-variablon kaj atingi ekzekuton de sia kodo.

fonto: opennet.ru

Aldoni komenton