Sårbarhet i php-fpm som tillåter fjärrkörning av kod på servern

Tillgänglig korrigeringsversioner av PHP 7.3.11, 7.1.33 och 7.2.24, där utslagen kritisk sårbarhet (CVE-2019-11043) i tillägget PHP-FPM (FastCGI Process Manager) som låter dig köra din kod på distans på systemet. För att attackera servrar som använder PHP-FPM för att köra PHP-skript i kombination med Nginx, är det redan allmänt tillgängligt arbetar utnyttja.

Attacken är möjlig i nginx-konfigurationer där vidarebefordran i PHP-FPM utförs genom att dela delar av URL:en med "fastcgi_split_path_info" och definiera miljövariabeln PATH_INFO, men utan att först kontrollera existensen av filen med "try_files $fastcgi_script_name" direktivet eller "if (!-f $ document_root$fastcgi_script_name)". problem inklusive visas i inställningarna som erbjuds för NextCloud-plattformen. Till exempel är konfigurationer med formkonstruktioner sårbara:

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

Du kan följa felsökningen i distributioner på dessa sidor: Debian, RHEL, ubuntu, SUSE/openSUSE, FreeBSD, Arch, fedora. Som en säkerhetslösning kan du efter raden "fastcgi_split_path_info" lägga till en kontroll för att den begärda PHP-filen finns:

try_files $fastcgi_script_name =404;

Problemet orsakas av ett fel vid manipulering av pekare i filen sapi/fpm/fpm/fpm_main.c. När man tilldelar en pekare antas det att värdet på miljövariabeln PATH_INFO nödvändigtvis innehåller ett prefix som matchar sökvägen till PHP-skriptet.
Om direktivet fastcgi_split_path_info specificerar att dela sökvägen till skriptet med ett reguljärt uttryck som är känsligt för överföringen av nyradstecknet (till exempel, i många exempel föreslås det att använda "^(.+?\.php)(/. *)$"), då kan angriparen skriva ett tomt värde till miljövariabeln PATH_INFO. I det här fallet, längre fram i utförandet utförd skriver path_info[0] till noll och anropar FCGI_PUTENV.

Genom att begära en URL formaterad på ett visst sätt kan en angripare flytta path_info-pekaren till den första byten i "_fcgi_data_seg"-strukturen, och skriva noll till denna byte kommer att flytta "char * pos"-pekaren till det tidigare minnesområdet. Den FCGI_PUTENV som anropas nästa kommer att skriva över data i detta minne med ett värde som angriparen kan kontrollera. Det angivna minnet lagrar också värden för andra FastCGI-variabler, och genom att skriva deras data kan angriparen skapa en dummy PHP_VALUE-variabel och uppnå exekvering av sin kod.

Källa: opennet.ru

Lägg en kommentar