Sårbarhet i php-fpm som tillater ekstern kjøring av kode på serveren

Tilgjengelig korrigerende utgivelser av PHP 7.3.11, 7.1.33 og 7.2.24, der eliminert kritisk sårbarhet (CVE-2019-11043) i PHP-FPM (FastCGI Process Manager) utvidelsen, som lar deg eksternt kjøre koden din på systemet. For å angripe servere som bruker PHP-FPM i forbindelse med Nginx for å kjøre PHP-skript, er det allerede offentlig tilgjengelig arbeider utnytte.

Angrepet er mulig i nginx-konfigurasjoner der videresending til PHP-FPM utføres ved å skille deler av URL-en ved å bruke "fastcgi_split_path_info" og definere PATH_INFO-miljøvariabelen, men uten først å sjekke eksistensen av filen ved å bruke "try_files $fastcgi_script_name" direktivet eller "if (!-f $) document_root$fastcgi_script_name)". Problemet er også vises i innstillingene som tilbys for NextCloud-plattformen. For eksempel konfigurasjoner med strukturer som:

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

Du kan spore løsningen på problemet i distribusjonssett på disse sidene: Debian, RHEL, Ubuntu, SUSE / openSUSE, FreeBSD, Arch, Fedora. Som en løsning kan du legge til en sjekk for eksistensen av den forespurte PHP-filen etter "fastcgi_split_path_info"-linjen:

try_files $fastcgi_script_name =404;

Problemet er forårsaket av en feil ved manipulering av pekere i en fil sapi/fpm/fpm/fpm_main.c. Når du tildeler en peker, antas det at verdien til miljøvariabelen PATH_INFO må inneholde et prefiks som samsvarer med banen til PHP-skriptet.
Hvis fastcgi_split_path_info-direktivet spesifiserer å dele skriptbanen ved å bruke et nylinjesensitivt regulært uttrykk (for eksempel foreslår mange eksempler bruk av "^(.+?\.php)(/.*)$"), kan en angriper sørge for at en tomme verdi skrives til PATH_INFO miljøvariabelen. I dette tilfellet, videre langs utførelsen utført skriver path_info[0] til null og ringer FCGI_PUTENV.

Ved å be om en URL formatert på en bestemt måte, kan en angriper oppnå en forskyvning av path_info-pekeren til den første byten i "_fcgi_data_seg"-strukturen, og å skrive en null til denne byten vil føre til bevegelse av "char* posen" peker til et tidligere lokalisert minneområde. Den neste kalt FCGI_PUTENV vil overskrive dataene i dette minnet med en verdi som angriperen kan kontrollere. Det spesifiserte minnet lagrer også verdiene til andre FastCGI-variabler, og ved å skrive dataene deres kan en angriper lage en fiktiv PHP_VALUE-variabel og oppnå kjøring av koden deres.

Kilde: opennet.ru

Legg til en kommentar