PHP, nouvelle faille concernant des serveurs NGINX

Si votre site utilise PHP sur un serveur NGINX et a la fonctionnalité PHP-FPM activé pour de meilleurs performances, alors faites attention à la nouvelle vulnérabilité qui permet à des pirates d’exploiter votre serveur à distance.

La vulnérabilité, CVE-2019-11043, affecte les sites qui ont certaines configurations de PHP-FPM qui peuvent être exploités facilement car une preuve de concept de cette faille est déjà disponible au public.

PHP-FPM  (FastCGI Process Manager) est une implémentation alternative à PHP FastCGI avec quelques fonctionnalités additionnelles particulièrement utiles pour les environnements à haute charge.

La principale vulnérabilité est un problème de débordement de mémoire de “env_path_info” dans le module PHP-FPM. En la combinant avec d’autres failles, cela permet aux pirates d’exécuter du code arbitraire à distance sur des serveurs web vulnérables.

La vulnérabilité a été découverte par Andrew Danau, un chercheur en sécurité de Wallarm pendant qu’il cherchait des bugs dans une compétition de capture de drapeau. Cette faille a ensuite été “militarisé” par deux autres chercheurs, Omar Ganiev et Emil Lerner, pour développer un exploit d’exécution de code à distance.

Quels sites PHP sont vulnérables aux pirates?

Bien que l’exploit ait été conçu pour cibler spécifiquement les serveurs vulnérables utilisant les versions 7+, la faille de PHP-FPM affecte aussi les versions antérieures et peut être exploité en utilisant d’autres techniques.

En bref, un site est vulnérable, si:

  • NGINX est configuré pour transférer les requêtes de pages vers le processeur PHP-FPM,
  • la directive fastcgi_split_path_info est présente dans la configuration et inclut une expression régulière commençant avec le caractère ‘^’ et finissant avec le caractère ‘$’,
  • la variable PATH_INFO est définie avec la directive fastcgi_param,
  • il n’y a aucune vérification comme try_files $uri =404 ou if (-f $uri) pour déterminer si un fichier existe ou pas.

Cette configuration vulnérable de NGINX et PHP-FPM ressemble à l’exemple suivant:

nginx php fpm

Ici, la directive fastcgi_split_path_info est utilisée pour séparer l’URL de pages en deux parties, la valeur de l’une aide le moteur PHP-FPM à apprendre le nom du script et l’autre contient l’info de chemin.

Comment fonctionne l’exécution de code à distance de PHP FPM?

Selon les chercheurs, l’expression régulière de l’échantillon, qui définit la directive fastcgi_split_path_info, comme montré, peut être manipulé en utilisant le caractère de nouvelle ligne pour que la fonction de séparation définisse le chemin d’info sur vide.

Il y’a un pointeur arithmétique dans le code FPM qui assume que env_path_info a un préfixe similaire au chemin du script sans vérifier l’existence du fichier sur le serveur, le problème peut être exploité par un pirate pour écraser les données dans la mémoire en demandant des URL spéciales des sites ciblés.

php fpm
php fpm code execution

En arrière plan, la preuve de concept [1 (PHuiP-FPizdaM), 2 ] a réuni ces deux chaînes pour manipuler la mémoire et ajouter des valeurs personnalisées de php.ini dans le fichier de configuration PHP-FPM d’un serveur ciblé, permettant aux pirates d’exécuter du code arbitraire à l’aide d’un shell Web..

php fpm nginx

“En utilisant une longueur choisie du chemin de l’URL et de la chaîne de requête, un pirate peut forcer path_info à pointer précisément vers le premier octet de la structure _fcgi_data_seg . La mise à zéro déplace le champ `char* pos` en arrière, et ensuite FCGI_PUTENV écrase quelques données (y compris d’autres variables fast cgi) avec le chemin de script,” ont déclaré les chercheurs dans un rapport de bug soumis au projet.

“En utilisant cette technique, j’ai été capable de créer une fausse variable fcgi PHP_VALUE et j’ai ensuite utilisé une chaîne de valeurs de configuration pour obtenir de l’exécution de code.”

Mise à jour de PHP 7 pour patcher la faille FPM

La liste de conditions préalables pour l’exploitation n’est pas rare car les configurations sont utilisées par plusieurs hébergeurs web et sont disponibles sur Internet dans des tutoriels de PHP FPM.

L’un de ces hébergeurs affectés est Nextcloud qui a publié un rapport alertant ses utilisateurs que “la configuration par défaut des serveurs NGINX de Nextcloud est aussi vulnérable à cette attaque” et recommandant aux administrateurs systèmes d’agir immédiatement.

Un patch pour cette vulnérabilité a été distribué près d’un mois après que les chercheurs l’aient signalé à l’équipe de développeur.

Comme la preuve de concept est déjà disponible et le patch a été distribué il y’a 4 jours, il est probable que les pirates aient déjà commencé à scanner l’Internet pour trouver des sites vulnérables.

Il est recommandé aux utilisateurs de mettre à jour vers les versions 7.3.11 et 7.2.24.

Si cet article vous a plu, jetez un œil à notre précédent article concernant une faille de PHP.