Vulnérabilité dans php-fpm permettant l'exécution de code à distance sur le serveur

Disponible versions correctives de PHP 7.3.11, 7.1.33 et 7.2.24, dans lesquelles éliminé critique vulnérabilité (CVE-2019-11043) dans l'extension PHP-FPM (FastCGI Process Manager), qui permet d'exécuter à distance votre code sur le système. Pour attaquer les serveurs qui utilisent PHP-FPM en conjonction avec Nginx pour exécuter des scripts PHP, il est déjà accessible au public de travail exploiter.

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 apparaît dans les paramètres proposés pour la plateforme NextCloud. Par exemple, des configurations avec des structures telles que :

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 : Debian, RHEL, Ubuntu, SUSE / openSUSE, FreeBSD, voûte, Fedora. Pour contourner le problème, vous pouvez ajouter une vérification de l'existence du fichier PHP demandé après la ligne « fastcgi_split_path_info » :

try_files $fastcgi_script_name =404;

Le problème est dû à une erreur lors de la manipulation des pointeurs dans un fichier sapi/fpm/fpm/fpm_main.c. Lors de l'attribution d'un pointeur, on suppose que la valeur de la variable d'environnement PATH_INFO doit contenir un préfixe qui correspond au chemin d'accès au script PHP.
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 est écrire path_info[0] à zéro et appeler FCGI_PUTENV.

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

Ajouter un commentaire