Kwetsbaarheid in php-fpm die het mogelijk maakt om op afstand code op de server uit te voeren

Beschikbaar correctieve releases van PHP 7.3.11, 7.1.33 en 7.2.24, waarin opgelost kritiek kwetsbaarheid (CVE-2019-11043) in de PHP-FPM-extensie (FastCGI-processenbeheerder), die het mogelijk maakt om op afstand eigen code op het systeem uit te voeren. Voor servers die PHP-scripts uitvoeren via PHP-FPM in combinatie met Nginx, is er al publiekelijk beschikbare werkende een exploit.

De aanval is mogelijk in Nginx-configuraties waarin PHP-FPM wordt aangesproken met scheiding van URL-onderdelen door middel van "fastcgi_split_path_info" en het definiƫren van de omgevingsvariabele PATH_INFO, maar zonder voorafgaande controle op het bestaan van het bestand met de directive "try_files $fastcgi_script_name" of de constructie "if (!-f $document_root$fastcgi_script_name)". Dit probleem geldt ook verschijnt voor de instellingen die worden aangeboden voor het NextCloud-platform. Bijvoorbeeld, configuraties zijn kwetsbaar met constructies zoals:

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

Het volgen van de oplossing van dit probleem in de distributies kan op de volgende pagina's: Debian, RHEL, Ubuntu, SUSE/openSUSE, FreeBSD, Arch, Fedora. Als een bypass-methode ter bescherming kan na de regel "fastcgi_split_path_info" een controle op het bestaan van het opgevraagde PHP-bestand worden toegevoegd:

try_files $fastcgi_script_name =404;

Het probleem wordt veroorzaakt door een fout bij het manipuleren van pointers in het bestand sapi/fpm/fpm/fpm_main.c. Bij het toewijzen van een pointer wordt aangenomen dat de waarde van de omgevingsvariabele PATH_INFO altijd een prefix bevat die overeenkomt met het pad naar het PHP-script.
Als in de directive fastcgi_split_path_info het pad naar het script wordt gesplitst met behulp van een reguliere expressie die gevoelig is voor het doorgeven van een newline-teken (bijvoorbeeld in veel voorbeelden wordt aangeraden om "^(.+?\.php)(\/.*)$" te gebruiken), kan de aanvaller een leeg waarde in het omgevingsvariabele PATH_INFO laten schrijven. In dat geval zal verder in de uitvoering plaatsvinden de schrijfoperatie naar path_info[0] met nul en het aanroepen van FCGI_PUTENV.

Door een op een bepaalde manier opgemaakt URL aan te vragen, kan de aanvaller de pointer path_info naar de eerste byte van de structuur "_fcgi_data_seg" verschuiven, en het schrijven van nul naar deze byte zal leiden tot het verplaatsen van de pointer "char* pos" naar een eerder geheugenadres. De daaropvolgende aanroep van FCGI_PUTENV zal gegevens in dat geheugen overschrijven met een waarde die door de aanvaller kan worden gecontroleerd. In dat geheugen worden ook de waarden van andere FastCGI-variabelen opgeslagen, en door zijn gegevens te schrijven kan de aanvaller een valse variabele PHP_VALUE creƫren en zijn code laten uitvoeren.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster