Faille de sécurité sur PHP 5.3 et 5.4

Une faille de sécurité critique vient d'être découverte dans les versions 5.3 et 5.4 de PHP. Avec une simple requête HTTP, il est possible d'afficher le code source de la page (et donc, les mots de passe utilisés), ou même d'exécuter du code à distance.




La faille :

Pour pouvoir exploiter cette faille, il faut que les conditions suivantes soit réunies :
  • La version de PHP doit être inférieure à la 5.3.12 ou à la 5.4.2
  • L'interpréteur PHP doit fonctionner en mode CGI (pas actif par défaut, ouf)
  • La requête HTTP doit être du type Query String et commencer uniquement par le signe - et ne doit pas comprendre de signe =
  • La requête peut être un GET ou un HEAD  

Il faut noter que les modules FastCGI, mod_suphp, nginx+php-fpm et apache+mod_php ne sont pas concernés par ce problème.


Un exemple simple de requête permettant d'afficher la source d'une page (grâce au paramètre -s) :

http://cible.com/index.php?-s



Une correction vite !

Il y a deux possibilités :
  • La première consiste à mettre à jour PHP en 5.3.12 ou 5.4.2. 
  • La seconde, plus manuelle, est de mettre en place des règles pour mod_rewrite qui permettront  de filtrer les requêtes incriminées :
RewriteCond %{QUERY_STRING} ^(%2d|-)[^=]+$ [NC]
RewriteRule ^(.*) $1? [L]


Ou également :
RewriteEngine on
RewriteCond %{QUERY_STRING} ^[^=]*$
RewriteCond %{QUERY_STRING} %2d|\- [NC]
RewriteRule .? - [F,L]


En bonus, le module pour Metasploit, nommé php_cgi_arg_injection.
Il utilise le paramètre -d qui modifie le comportement d'une page PHP afin d'avoir accès à un shell à distance. 




Aucun commentaire:

Enregistrer un commentaire