PHP-fpm biztonsági rés, amely távoli kódfuttatást tesz lehetővé a szerveren

Rendelkezésre álló a PHP 7.3.11, 7.1.33 és 7.2.24 javító kiadásai, amelyekben Eltüntetett kritikai sebezhetőség (CVE-2019-11043) a PHP-FPM (FastCGI Process Manager) bővítményben, amely lehetővé teszi a kód távoli végrehajtását a rendszeren. Az olyan szerverek támadásához, amelyek PHP-FPM-et használnak az Nginx-szel együtt PHP szkriptek futtatásához, ez már nyilvánosan elérhető dolgozó kihasználni.

A támadás az nginx konfigurációkban lehetséges, amelyekben a PHP-FPM-re való továbbítás az URL részeinek a „fastcgi_split_path_info” használatával történő elválasztásával és a PATH_INFO környezeti változó megadásával történik, de anélkül, hogy először ellenőriznénk a fájl létezését a „try_files $fastcgi_script_name” használatával. direktíva vagy az „if (!-f $) document_root$fastcgi_script_name)”. A probléma az is Megjelenik a NextCloud platformhoz kínált beállításokban. Például konfigurációk olyan struktúrákkal, mint:

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

A probléma megoldását az alábbi oldalakon található terjesztési készletekben követheti nyomon: Debian, RHEL, Ubuntu, SUSE/openSUSE, FreeBSD, Bolthajtás, Fedora. Megkerülő megoldásként a „fastcgi_split_path_info” sor után ellenőrizheti a kért PHP-fájl meglétét:

try_files $fastcgi_script_name =404;

A problémát a fájlban lévő mutatók manipulálása során fellépő hiba okozza sapi/fpm/fpm/fpm_main.c. A mutató hozzárendelésekor feltételezzük, hogy a PATH_INFO környezeti változó értékének tartalmaznia kell egy előtagot, amely megegyezik a PHP parancsfájl elérési útjával.
Ha a fastcgi_split_path_info direktíva a szkript elérési útjának felosztását írja elő egy újsorra érzékeny reguláris kifejezéssel (például sok példa a "^(.+?\.php)(/.*)$" használatát javasolja, akkor a támadó gondoskodhat arról, hogy egy üres érték kerül a PATH_INFO környezeti változóba. Ebben az esetben a végrehajtás során tovább végrehajtják a path_info[0] nullára írása és az FCGI_PUTENV meghívása.

Egy bizonyos módon formázott URL kérésével a támadó elérheti a path_info mutató eltolását az „_fcgi_data_seg” struktúra első bájtjára, és ha erre a bájtra nullát ír, az a „char* pos” mozgásához vezet. mutató egy korábban található memóriaterületre. A következő nevű FCGI_PUTENV felülírja a memóriában lévő adatokat a támadó által szabályozható értékkel. A megadott memória más FastCGI-változók értékeit is tárolja, és ezek adatainak írásával a támadó létrehozhat egy fiktív PHP_VALUE változót, és elérheti a kódjuk végrehajtását.

Forrás: opennet.ru

Hozzászólás