Un chercheur en sécurité vient de dévoiler le moyen d’exploiter une faille dans PHP7 permettant l’exécution de code sur un serveur distant. PHP est très répandu et la faille est très facilement exploitable, cela n’annonce rien de bon.
Lorsqu’une faille apparaît et qu’elle permet l’exécution de code arbitraire sur un serveur distant, ce n’est jamais une bonne nouvelle. Mais quand la faille est si facile à exploiter qu’elle peut même l’être par des gens ne disposant d’aucune connaissance technique, c’est pire. Et c’est le cas ici.
Certaines configurations NGINX + PHP-FPM sont victimes d’une faille facilement exploitable
Ce qu’a découvert Andrew Danau lors d’un évènement « Capture the Flag », qui est un concours de hack, et pas une partie de Quake, est qu’il est dans certains cas possible de faire exécuter une commande sur un serveur grâce au simple ajout de « ? a= » suivi d’une commande dans l’URL. Emil « Neex » Lerner, un chercheur russe en sécurité informatique, en a informé l’équipe de développement de PHP le 26 septembre. Le 21 octobre, l’équipe confirmait sa résolution, ce qui a motivé Neex a publié son exploit sur GitHub dès le lendemain.
Il faut relativiser. Bien sûr, PHP est le langage de programmation le plus utilisé au monde pour les sites Web, représentant à lui seul 79 % de l’ensemble du Web. C’est ce en quoi est écrit WordPress, Drupal, Joomla, mais aussi MediaWiki, ce qui aurait pu à nouveau faire du tort à Wikipedia après la récente attaque DDoS. Il est aussi utilisé, par endroit, sur certains sites majeurs comme Facebook, Tumblr ou Slack. Mais cette vulnérabilité ne touche que les serveurs NGINX qui ont déployé PHP via l’extension PHP-FPM, cela réduit donc le risque. Toutefois, ce couple NGINX/PHP-FPM est relativement commun chez les hébergeurs commerciaux. C’est par exemple le cas de NextCloud, qui a déjà demandé à ses clients de mettre à jour leur version de PHP.
Il est donc très fortement recommandé de mettre à jour votre version de PHP vers les dernières disponibles, publiées le 24 octobre, 7.3.11, 7.2.24 ou 7.1.33 suivant la branche que vous avez déployée. Il existe d’autres méthodes si vous n’avez pas accès à la version de PHP. Ainsi Wallarm, la compagnie qui a conduit l’activité de Capture the Flag, donne des pistes pour contourner le problème. Enfin, vous pouvez tester la vulnérabilité de votre propre serveur grâce aux scripts de Neex.