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
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:
try_files $fastcgi_script_name =404;
Het probleem wordt veroorzaakt door een fout bij het manipuleren van pointers in een bestand
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
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