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
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:
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
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
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