L'attaque est possible dans les configurations nginx dans lesquelles la redirection vers PHP-FPM s'effectue en séparant des parties de l'URL à l'aide de « fastcgi_split_path_info » et en définissant la variable d'environnement PATH_INFO, mais sans vérifier au préalable l'existence du fichier à l'aide de « try_files $fastcgi_script_name ». ou la construction « if (!-f $) » document_root$fastcgi_script_name)". Le problème est aussi
emplacement ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^ (. +? \. php) (/.*) $;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_passphp:9000 ;
}
Vous pouvez suivre la résolution du problème dans les kits de distribution sur ces pages :
try_files $fastcgi_script_name =404;
Le problème est dû à une erreur lors de la manipulation des pointeurs dans un fichier
Si la directive fastcgi_split_path_info spécifie de diviser le chemin du script à l'aide d'une expression régulière sensible aux nouvelles lignes (par exemple, de nombreux exemples suggèrent d'utiliser "^(.+?\.php)(/.*)$"), alors un attaquant pourrait garantir qu'un une valeur vide est écrite dans la variable d'environnement PATH_INFO. Dans ce cas, plus loin dans l'exécution
En demandant une URL formatée d'une certaine manière, un attaquant peut obtenir un déplacement du pointeur path_info vers le premier octet de la structure « _fcgi_data_seg », et écrire un zéro dans cet octet entraînera le déplacement du « char* pos ». pointeur vers une zone mémoire précédemment localisée. Le prochain appelé FCGI_PUTENV écrasera les données de cette mémoire avec une valeur que l'attaquant peut contrôler. La mémoire spécifiée stocke également les valeurs d'autres variables FastCGI, et en écrivant leurs données, un attaquant peut créer une variable PHP_VALUE fictive et réaliser l'exécution de son code.
Source: opennet.ru