correctieve releases van PHP 7.3.11, 7.1.33 en 7.2.24, waarin kritiek (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 .
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 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: , , , , , , . 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 . 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 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
