InfraFenceInfraFence

Live Security Operations

Commencer

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 :

Journaux d'accès Apache
sudo grep -rhiE '\?(%AD|[^ ]*(\+|%20)%AD)[a-z]' --include='*access*' --exclude='*.gz' /var/log/apache2 /var/log/httpd 2>/dev/null | tail -20

Sur un serveur Windows, vérifiez la version de PHP et si Apache l'exécute en CGI :

Invite de commandes Windows
php -v

Corriger (Windows)

  1. 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.
  2. Mieux encore, cessez d'exécuter PHP en CGI : utilisez-le en module Apache, en FastCGI ou en PHP-FPM.
  3. Sur XAMPP, si vous n'avez pas besoin de PHP-CGI, commentez la ligne ScriptAlias /php-cgi/ dans apache/conf/extra/httpd-xampp.conf et 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 :

Configuration Apache
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é

  1. L'agent note quels ports SSH et quels sites répondent.
  2. Il écrit la règle (identifiant ModSecurity 9920003) entre ses propres marqueurs dans son fichier ModSecurity, lance apachectl configtest et recharge Apache en douceur. Un test en échec remet le fichier précédent en place.
  3. Il vérifie que SSH et les sites répondent toujours, et retire le correctif sinon.
  4. 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 DetectionOnly se 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.