Aller au contenu

PHP : PHP: Hypertext Preprocessor

Sécurité

PHP : PHP: Hypertext Preprocessor, langage de programmation côté serveur dont le sigle se contient lui-même. « Le langage qui fait tourner une grande partie du Web, avec la tolérance d'un aubergiste qui ne demande jamais les papiers », par analogie avec la maison de famille : tout le monde y a vécu, personne ne sait plus ce qu'il y a au grenier.

Origine : Créé par Rasmus Lerdorf au milieu des années 1990 sous le nom de Personal Home Page Tools, puis rebaptisé en sigle récursif. Il anime notamment WordPress et une large part des sites dynamiques ; ses versions récentes (8.x) ont corrigé beaucoup de laxismes historiques.

Désérialisation : La fonction unserialize() reconstruit des objets PHP à partir de texte et déclenche des méthodes dites magiques comme __wakeup ou __destruct. Avec des données contrôlées par un attaquant, l'enchaînement de ces méthodes dans les classes disponibles (une « chaîne de gadgets ») peut aboutir à l'exécution de code. L'option allowed_classes limite les classes reconstruites ; json_decode() pour les données reste le choix sain.

Archives phar : Jusqu'à PHP 8.0, la simple ouverture d'un fichier par le flux phar:// désérialisait automatiquement ses métadonnées, ce qui transformait une fonction anodine de lecture de fichier en point d'entrée de désérialisation. Ce comportement automatique a été retiré en 8.0.

Ce qui arrive si on s'en passe

Passer à unserialize() une donnée venue d'un cookie, d'un champ caché ou d'un cache partagé permet à un attaquant de choisir les objets que l'application reconstruit et les méthodes qu'elle exécute. Selon les bibliothèques installées, cela va de la suppression de fichiers à l'exécution de commandes sur le serveur, sans aucune authentification. Des chaînes de gadgets toutes prêtes existent pour les cadriciels courants, ce qui épargne à l'attaquant jusqu'à l'effort de réfléchir. Une version de PHP plus maintenue ajoute à cela toutes les failles corrigées depuis, mais pas chez soi.

Explication de la marmotte

PHP est un langage utilisé pour fabriquer des sites Web, par exemple pour afficher une page différente selon l'utilisateur connecté. Il permet de transformer des objets du programme en texte puis de faire l'inverse, ce qu'on appelle sérialiser et désérialiser. Si un pirate peut fournir ce texte, il peut faire créer au programme des objets piégés qui exécutent ses ordres. Pour échanger des données, il vaut mieux utiliser un format simple comme JSON.

Où ce terme est utilisé

← Tout le glossaire