Cette faille de sécurité critique dans PHP fait trembler les serveurs Web sous Windows
Une nouvelle faille de sécurité critique a été découverte dans PHP : CVE-2024-4577 ! En l'exploitant, un attaquant peut exécuter du code malveillant à distance sur le serveur Windows utilisé en tant que serveur Web. Faisons le point sur cette menace.
L'équipe de développement de PHP a corrigé plusieurs failles de sécurité dans son moteur de scripts PHP. L'une de ces vulnérabilités, associées à la référence CVE-2024-4577 mérite une attention particulière.
Découverte par le chercheur en sécurité Orange Tsai de DEVCORE, cette vulnérabilité d'injection d'arguments dans CGI affecte toutes les versions de PHP lorsque ce dernier est installé sur un serveur Windows. Pour être plus précis, toutes les versions de PHP, de 5.X à la dernière version 8.3.X sont vulnérables. Le problème, c'est que de nombreuses versions vulnérables ne sont plus prises en charge et ne pourront pas bénéficier d'un correctif de sécurité.
"Lors de l'implémentation de PHP, l'équipe n'a pas remarqué la fonctionnalité Best-Fit de conversion d'encodage dans le système d'exploitation Windows. Cette omission permet à des attaquants non authentifiés de contourner la protection précédente de CVE-2012-1823 par des séquences de caractères spécifiques.", précise le chercheur en sécurité dans son rapport.
Vous l'aurez compris, cette nouvelle vulnérabilité permet d'outrepasser un correctif de sécurité introduit il y a plus de 10 ans pour corriger la faille de sécurité CVE-2012-1823 présente dans PHP-CGI. En exploitant cette vulnérabilité, un attaquant peut compromettre le serveur Web.
Qui est vulnérable à cette faille de sécurité ?
Au-delà de la version de PHP utilisée, pour être vulnérable à la faille de sécurité CVE-2024-4577, le moteur de scripts PHP doit être utilisé sur Windows. L'article évoque un cas d'utilisation de PHP avec un serveur Web XAMPP sous Windows, mais ce n'est pas le seul moyen d'utiliser PHP-CGI sur Windows. En effet, il est tout à fait possible d'avoir un serveur IIS avec PHP-CGI actif, et dans ce cas, le serveur Web est également vulnérable. Nous pourrions aussi citer WAMP.
De plus, bien que cette vulnérabilité soit liée à PHP-CGI, elle peut être exploitée même si PHP n'est pas configuré en mode CGI. La seule condition, c'est que les exécutables PHP ("php.exe" ou "php-cgi.exe") soient stockés dans des répertoires accessibles par le serveur web. Ceci est la configuration par défaut de XAMPP, donc il y a probablement une grande majorité de serveurs XAMPP vulnérables.
Ce problème de sécurité est exploitable lorsque l'une de ces "locales" est utilisée dans la configuration de PHP : chinois traditionnel, chinois simplifié et japonais. Attention, les autres "locales" sont potentiellement vulnérables : Orange Tsai affirme qu'il n'a pas évalué toutes les configurations possibles.
Remarque : CGI pour Common Gateway Interface, est une interface utilisée sur les serveurs Web pour permettre l'exécution de programmes externes via des requêtes HTTP. Ceci est notamment utile au bon fonctionnement de certaines applications.
Comment se protéger de la CVE-2024-4577 ?
Le meilleur moyen de se protéger de cette vulnérabilité, c'est de passer sur les dernières de PHP, publiées il y a quelques jours, car elles contiennent un correctif. Il s'agit des versions suivantes : PHP 8.3.8, PHP 8.2.20, et PHP 8.1.29.
Si vous ne pouvez pas mettre à jour PHP maintenant, ou que vous utilisez une version de PHP qui n'est plus supportée, il existe une solution. En effet, une règle de réécriture d'URL basée sur l'utilisation du module PHP "mod_rewrite" permet de bloquer les attaques (mais ceci s'appliquerait uniquement aux locales évoquées ci-dessus).
RewriteEngine On
RewriteCond %{QUERY_STRING} ^%ad [NC]
RewriteRule .? – [F,L]
Par ailleurs, à la place de cette règle, si vous êtes certain que vous n'utilisez pas PHP-CGI et que vous utilisez XAMPP, vous pouvez désactiver la fonctionnalité sur votre serveur Web. Éditez le fichier suivant :
C:/xampp/apache/conf/extra/httpd-xampp.conf
Puis, commentez la ligne présentée ci-dessous en ajoutant un "#" au début de la ligne :
#ScriptAlias /php-cgi/ "C:/xampp/php/"
Enfin, sachez qu'un exploit PoC est déjà disponible (voir cette page). Cette vulnérabilité représente un risque important, donc mettez à jour si vous le pouvez.