CVE-2024-4577 : injection d'arguments PHP-CGI, vérifier et corriger
Dernière mise à jour:
PHP-CGI sous Windows, avec certaines pages de code (japonaise, chinoise et d'autres), convertit un trait d'union conditionnel (%AD) de la ligne de commande en tiret. Via Apache, la query string arrive à PHP-CGI sur la ligne de commande : une URL comme /?%ADd+allow_url_include%3d1 devient une option de PHP et mène à l'exécution de code.
La faille dépend d'une conversion de caractères propre à Windows : PHP sous Linux n'est pas concerné. Les scanners envoient les mêmes requêtes à tous les serveurs, Linux compris, et c'est pourquoi vous les voyez dans vos journaux.
En bref
- CVE
- CVE-2024-4577
- Logiciel
- PHP (PHP-CGI sous Windows)
- Versions concernées
- 8.3 avant 8.3.8, 8.2 avant 8.2.20, 8.1 avant 8.1.29 et plus anciennes, sous Windows
- Corrigé dans
- 8.1.29, 8.2.20, 8.3.8
- Score CVSS
- 9.8 Critique (NVD, CVSS 3.1) ·
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H - CISA Known Exploited Vulnerabilities
- Oui, ajoutée le 12 juin 2024
- Publiée par le NVD
- 9 juin 2024
- Correctif virtuel InfraFence
vp-cve-2024-4577(ModSecurity id 9920003)
Ce qui est concerné
PHP 8.3 avant 8.3.8, 8.2 avant 8.2.20, 8.1 avant 8.1.29 et les versions plus anciennes, sous Windows, quand PHP tourne en CGI (une directive Action d'Apache vers php-cgi.exe, ou le binaire PHP joignable depuis un dossier CGI). XAMPP pour Windows exposait PHP-CGI par défaut. PHP en module Apache, en FastCGI ou en PHP-FPM n'est pas concerné.
Vérifier si un serveur est vulnérable
Sous Linux, il n'y a rien à corriger pour cette CVE ; gardez PHP sur une version prise en charge et à jour pour les autres. Vous pouvez tout de même voir qui essaie :
sudo grep -rhiE '\?(%AD|[^ ]*(\+|%20)%AD)[a-z]' --include='*access*' --exclude='*.gz' /var/log/apache2 /var/log/httpd 2>/dev/null | tail -20Sur un serveur Windows, vérifiez la version de PHP et si Apache l'exécute en CGI :
php -vCorriger (Windows)
- Passez PHP à 8.3.8, 8.2.20 ou 8.1.29 ou ultérieur. Les versions qui ne sont plus prises en charge n'ont reçu aucun correctif : passez à une version prise en charge.
- Mieux encore, cessez d'exécuter PHP en CGI : utilisez-le en module Apache, en FastCGI ou en PHP-FPM.
- Sur XAMPP, si vous n'avez pas besoin de PHP-CGI, commentez la ligne
ScriptAlias /php-cgi/dansapache/conf/extra/httpd-xampp.confet redémarrez Apache.
En attendant de pouvoir mettre à jour, les chercheurs qui ont trouvé la faille ont publié cette règle Apache temporaire pour les paramètres régionaux concernés :
RewriteEngine On
RewriteCond %{QUERY_STRING} ^%ad [NC]
RewriteRule .? - [F,L]Comment InfraFence la bloque
Le correctif virtuel pour CVE-2024-4577 est une règle ModSecurity sur la query string : il bloque un trait d'union conditionnel (%AD ou l'octet brut) suivi d'une lettre au début de la query string ou après un + ou un espace encodé, la façon dont l'attaque passe une option.
Remarque: L'agent d'InfraFence tourne sous Linux, où PHP n'est pas vulnérable à cette CVE. Sur un serveur Linux, le correctif bloque les tentatives et les signale, pour que vous voyiez les scans ; il ne corrige rien qui était cassé.
Comment le correctif est appliqué
- L'agent note quels ports SSH et quels sites répondent.
- Il écrit la règle (identifiant ModSecurity 9920003) entre ses propres marqueurs dans son fichier ModSecurity, lance
apachectl configtestet recharge Apache en douceur. Un test en échec remet le fichier précédent en place. - Il vérifie que SSH et les sites répondent toujours, et retire le correctif sinon.
- Il vérifie que ModSecurity bloque réellement avec la règle, au moyen d'une requête de sonde locale inoffensive. Un ModSecurity en
DetectionOnlyse contente de journaliser : le correctif est alors retiré et signalé comme inefficace, jamais comme appliqué.
Chaque requête bloquée par le correctif est signalée avec CVE-2024-4577 (agent 1.0.37 ou ultérieur) : vous voyez les tentatives dans l'activité du serveur et sur la page Exploitation du tableau de bord, et vous savez ainsi que la vulnérabilité est tentée contre vous.
Attention: Un correctif virtuel bloque la forme connue de l'attaque sur les requêtes qui passent par Apache sur ce serveur. Il ne remplace pas la mise à jour : installez la version corrigée, puis retirez le correctif depuis Activité avec Annuler si vous n'en avez plus besoin.
Les correctifs virtuels nécessitent Apache avec ModSecurity, le réglage Autoriser les modifications de la configuration du serveur web, et aucun panneau d'hébergement ni outil de gestion de configuration aux commandes du serveur web ; ils font partie du plan Pro et d'AutoMode. Une personne les applique depuis l'analyse IA, ou AutoMode le fait. Voir Correctifs virtuels.
Sources
Les faits de cette page viennent de ces sources ; consultez-les pour les mises à jour.
Essayez gratuitement sur 1 serveur
Starter est gratuit pour un serveur, avec la protection complète et le blocage automatique. Sans carte bancaire.
Installez l'agent en root, avec votre jeton à la place de <TOKEN> :
curl -fsSL https://github.com/infrafence/infrafence-agent/releases/latest/download/install.sh | sudo bash -s -- --token <TOKEN>Le jeton se crée dans le tableau de bord, dans Serveurs › Ajouter un serveur.
