Kwetsbaarheid in php-fpm waardoor externe code op de server kan worden uitgevoerd

Beschikbaar corrigerende releases van PHP 7.3.11, 7.1.33 en 7.2.24, waarin geëlimineerd kritisch kwetsbaarheid (CVE-2019-11043) in de PHP-FPM (FastCGI Process Manager) extensie, waarmee u uw code op afstand op het systeem kunt uitvoeren. Om servers aan te vallen die PHP-FPM gebruiken in combinatie met Nginx om PHP-scripts uit te voeren, is het al openbaar beschikbaar werkend uitbuiten.

De aanval is mogelijk in nginx-configuraties waarin het doorsturen naar PHP-FPM wordt uitgevoerd door delen van de URL te scheiden met behulp van “fastcgi_split_path_info” en de omgevingsvariabele PATH_INFO te definiëren, maar zonder eerst het bestaan ​​van het bestand te controleren met behulp van de “try_files $fastcgi_script_name” richtlijn of de “if (!-f $) document_root$fastcgi_script_name)". Het probleem is ook komt naar voren in de instellingen die worden aangeboden voor het NextCloud-platform. Configuraties met structuren zoals:

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

U kunt de oplossing van het probleem in distributiekits volgen op deze pagina's: Debian, RHEL, Ubuntu, SUSE/openSUSE, FreeBSD, boog, Fedora. Als tijdelijke oplossing kunt u na de regel “fastcgi_split_path_info” een controle toevoegen op het bestaan ​​van het gevraagde PHP-bestand:

try_files $fastcgi_script_name =404;

Het probleem wordt veroorzaakt door een fout bij het manipuleren van pointers in een bestand sapi/fpm/fpm/fpm_main.c. Bij het toekennen van een pointer wordt ervan uitgegaan dat de waarde van de omgevingsvariabele PATH_INFO een prefix moet bevatten dat overeenkomt met het pad naar het PHP-script.
Als de fastcgi_split_path_info richtlijn specificeert dat het scriptpad moet worden gesplitst met behulp van een nieuweregelgevoelige reguliere expressie (veel voorbeelden suggereren bijvoorbeeld het gebruik van "^(.+?\.php)(/.*)$"), dan kan een aanvaller ervoor zorgen dat een Er wordt een lege waarde naar de omgevingsvariabele PATH_INFO geschreven. In dit geval verder in de uitvoering voerde uit path_info[0] naar nul schrijven en FCGI_PUTENV aanroepen.

Door een URL op te vragen die op een bepaalde manier is geformatteerd, kan een aanvaller een verschuiving van de path_info-aanwijzer naar de eerste byte van de “_fcgi_data_seg”-structuur bewerkstelligen, en het schrijven van een nul naar deze byte zal leiden tot de verplaatsing van de “char* pos” verwijzing naar een eerder gelokaliseerd geheugengebied. De volgende genaamd FCGI_PUTENV zal de gegevens in dit geheugen overschrijven met een waarde die de aanvaller kan controleren. Het gespecificeerde geheugen slaat ook de waarden van andere FastCGI-variabelen op, en door hun gegevens te schrijven kan een aanvaller een fictieve PHP_VALUE-variabele creëren en de uitvoering van zijn code bewerkstelligen.

Bron: opennet.ru

Voeg een reactie