L'US-CERT nous met en garde contre une vulnérabilité critique dans PHP qui a été divulguée par erreur au public. En ce moment même, les développeurs de PHP continuent de travailler sur un correctif. La vulnérabilité affecte les serveurs qui exécutent PHP en mode CGI. Pour ceux sous FastCGI, il n'y a pas de problème.
L'équipe a découvert le problème lors d'une compétition CTF (Capture The Flag). Le cœur du problème est qu'il est possible d'appeler le programme PHP CGI avec des URLs spéciales. Il est également possible de forcer la mise en place des paramètres de ligne de commande sur cette même URL.
Un petit exemple, si vous mettez en URL http://localhost/index.php?-s, alors le serveur web php-cgi sera appelé avec l'option -s qui à son tour affichera le code source PHP en tant que HTML plutôt que de l'exécuter.
C'est vraiment un très gros problème car les applications PHP contiennent souvent des informations sensibles telles que des informations d'identification pour accéder à des bases de données. Mais selon les personnes qui ont découvert la faille, il peut être également utilisé pour injecter directement du code et l'exécuter, ce qui soulève le niveau menace des applications PHP à un niveau très élevé!
La divulgation de cette faille n'aurait dû avoir lieu qu'après la publication d'un correctif pour la réparer mais les personnes qui ont découvert la faille l'ont annoncé à l'US-CERT qui a agit en tant qu'intermédiaire. Hier, l'équipe CTF avait accepté de donner plus de temps aux développeurs de PHP pour tester un correctif existant mais il a été accidentellement affiche comme "public" sur le tracker de bugs PHP et a ensuite été mis en lumière dans un article sur Reddit pour montrer à quel point ça pouvait être la "cata". L'équipe CTF a publié des informations par la suite sur cette vulnérabilité.
L'US-CERT ne dispose actuellement d'aucun moyen pour protéger les utilisateurs. Les personnes qui ont découvert cette faille conseillent tout de même de remplacer le PHP CGI avec un script qui filtrera les paramètres avant d'appeler le programme PHP réel. Ils fournissent également un exemple de script approprié. Depuis l'équipe de développeurs de PHP sont à l'essai d'un patch et il devrait y avoir une solution officielle très bientôt.
Je rajouterai pour éviter de vous alarmer que la portée est assez limitée dans le monde car il n'y a pas beaucoup de serveurs qui utilisent ce type de configuration (mod_cgi). En général les serveurs tournent avec Apache et mod_php ou nginc et php-fpm.
Edit: Ah bin peu de temps après que j'écrive ces lignes, une news sur le site officiel de PHP annonce la sortie de la version 5.3.12 et 5.4.2 de PHP corrigeant cette faille.
Pour ceux ne pouvant pas migrer leur application vers une version récente, un workaround existe en ajoutant une règle dans votre configuration Apache en utilisant le mod_rewrite :
RewriteCond %{QUERY_STRING} ^(%2d|-)[^=]+$ [NC] RewriteRule ^(.*) $1? [L]
Edit2: Ceux qui ont découvert le bug disent dans une annonce sur leur blog que le patch officiel contient un bug qui permet de contourner la correction. Ils recommandent l'utilisation de leur script ou de règles de réécriture. Ils ajoutent également qu'une nouvelle version de PHP est en cours, intégrant une version révisée de cette correction.
MISES A JOUR DE L'ARTICLE |