Une vulnérabilité critique de PHP sur Windows

Par:
fredericmazue

ven, 14/06/2024 - 11:32

Une vulnérabilité critique de PHP sur Windows a été découverte  sur toutes les versions de PHP de 5.x à 8.x. Sur Windows signifie qu'un server Web IIS avec le module php-cgi est vulnérable. Mais cela signifie aussi que les utilisateurs de XAMPP sont vulnérables. De plus il est important de savoir que si cette vulnérabilité est liée à php-cgi elle peut malgré tout être exploitée en dehors su mode cgi si les exécutables php.exe ou php-cgi.exe sont accessibles au serveur web.

Cette vulnérabilité est estampillée CVE-2024-4577. Elle existe sur Windows car si le système est configuré pour utiliser certaines pages de codes, il peut utiliser le comportement « Best-Fit » pour remplacer les caractères dans la ligne de commande donnée aux fonctions de l'API Win32. Le module PHP CGI peut alors interpréter à tort ces caractères comme des options PHP, ce qui peut permettre à un utilisateur malveillant de transmettre des options au binaire PHP en cours d'exécution, et ainsi de révéler le code source des scripts, d'exécuter du code PHP arbitraire sur le serveur, etc.

Cette vulnérabilité est exploitable via la simple insertion d’un caractère « Soft Hyphen » dans les paramètres d’une URL. Ce caractère est converti automatiquement en trait d’union classique via la fonctionnalité « Best-Fit » de Windows. Ce qui permet de contourner un mécanisme de vérification de PHP, et ainsi lui faire exécuter du code via l’exécutable « php.exe ».

Une URL attaquante peut-être repérée par la présence d’un caractère « Soft-Hyphen »  dedans, caracère dont l'encodage est %ad.

Le site beaglesecurity.com précise qu'à l'heure actuelle, il a été confirmé qu'un attaquant non autorisé peut exécuter du code arbitraire sur des serveurs distants exécutant Windows dans les paramètres régionaux suivants :

  • Chinois traditionnel (page de code 950)
  • Chinois simplifié (page de codes 936)
  • Japonais (page de code 932)

Pour Windows exécuté dans d'autres langues telles que l'anglais, le coréen et l'Europe occidentale, la diversité des scénarios d'utilisation de PHP rend difficile l'énumération et l'élimination de toutes les voies d'exploitation potentielles.

Pour se protéger de cette vulnérabilité, les administrateurs doivent mettre leur PHP à jour sur leurs systèmes. Mais s'ils ne peuvent pas le faire, par exemple en étant obligés de travailler avec un PHP 5.x qui n'est plus maintenu, beaglesecurity.com suggère une réécriture d'URL comme mesure d'atténuation :

RewriteEngine On
RewriteCond %{QUERY_STRING} ^%ad [NC]
RewriteRule .? - [F,L]

Commentaires