PHP 8.5.12 : ce que corrigent (et ne corrigent pas) les derniers correctifs
Dans notre précédent article, nous détaillions deux vulnérabilités critiques de PHP, **CVE-2026-109618** et **CVE-2026-109619** (surnommées « PHP2Shell »), permettant à un attaquant distant non authentifié d'exécuter du code sur un serveur vulnérable. Depuis, la situation a évolué : les correctifs officiels sont sortis, et de nouvelles démonstrations circulent. Voici un point de clarification.
Mise à jour de notre article précédent sur CVE-2026-109618 et CVE-2026-109619. Situation au 23 octobre 2026.
Dans notre précédent article, nous détaillions deux vulnérabilités critiques de PHP, CVE-2026-109618 et CVE-2026-109619 (surnommées « PHP2Shell »), permettant à un attaquant distant non authentifié d'exécuter du code sur un serveur vulnérable.Depuis, la situation a évolué : les correctifs officiels sont sortis, et de nouvelles démonstrations circulent. Voici un point de clarification.
Ce qui est corrigé
Le projet PHP a publié le 21 octobre les versions qui corrigent les deux CVE :
| Branche | Version corrigée |
|---|---|
| PHP 8.5 | 8.5.12 |
| PHP 8.4 | 8.4.27 |
| PHP 8.3 | 8.3.36 |
| PHP 8.2 | 8.2.35 |
Si vous avez appliqué ces mises à jour (ou le paquet équivalent de votre distribution), les deux failles initiales sont traitées. Cela reste la priorité numéro un.
Ce qui a changé depuis le 22 octobre
Depuis le 22 octobre, des chercheurs partagent des démonstrations d'un autre vecteur d'attaque, distinct des deux CVE ci-dessus. Il s'agit d'un bug logique de type « mismatch » lié à session.serialize_handler (parfois désigné sous le nom de session-gaps).
Ce vecteur peut encore fonctionner sur PHP 8.5.12, mais uniquement si deux conditions sont réunies :
- Un mismatch de handler de sérialisation des sessions : différentes parties de l'application (ou différents scripts, répertoires, pools) utilisent des valeurs différentes de
session.serialize_handlerpour lire et écrire les sessions. - Un gadget de destructeur dans l'application : une classe dont le destructeur (
__destruct) peut être détourné lors de la désérialisation d'un objet contrôlé par l'attaquant.
Ce que cela signifie réellement
- Ce n'est pas un contournement généralisé des correctifs officiels.
- Un serveur à jour dont la configuration des sessions est cohérente n'est pas exposé par cette voie.
- À la date du 23 octobre, aucun nouvel advisory de sécurité n'a été publié par le projet PHP concernant ce vecteur.
Il n'y a donc pas lieu de paniquer, mais c'est une bonne occasion de revoir la configuration de vos sessions.
Ce qu'il faut faire
1. Mettre à jour PHP (prioritaire)
Si ce n'est pas déjà fait, appliquez les correctifs comme décrit dans notre article précédent :
sudo apt update
sudo apt upgrade
Rappel : sur Debian, le numéro de version affiché par php -v n'est pas toujours suffisant pour savoir si le correctif est présent, car la distribution peut rétroporter les correctifs. Consultez les avis de sécurité Debian correspondant à votre version (par exemple 8.4.27-1~deb13u1 pour Debian 13 ou 8.2.35-1~deb12u1 pour Debian 12), puis redémarrez les services PHP concernés (php-fpm, Apache avec mod_php, etc.).
2. Unifier session.serialize_handler sur toute l'application
Le mismatch est la condition nécessaire au nouveau vecteur : supprimez-la. Vérifiez la valeur utilisée :
php -i | grep session.serialize_handler
Puis assurez-vous qu'elle est identique partout :
- dans le
php.iniprincipal ; - dans les configurations de pools PHP-FPM ;
- dans les fichiers
.user.iniet les configurations par répertoire ou par hôte virtuel ; - dans les appels à
ini_set('session.serialize_handler', ...)présents dans le code.
Si plusieurs applications partagent le même stockage de sessions, elles doivent toutes utiliser le même handler.
3. Désactiver session.upload_progress.enabled si vous ne l'utilisez pas
Cette fonctionnalité élargit la surface d'attaque liée aux sessions. Si votre application n'affiche pas de barre de progression pour les téléversements :
session.upload_progress.enabled = Off
Appliquez cette directive dans php.ini ou la configuration du pool PHP-FPM (pas via ini_set() ni .user.ini), puis redémarrez les workers.
4. Activer session.use_strict_mode
session.use_strict_mode = 1
Ce mode empêche l'acceptation d'identifiants de session non initialisés par le serveur. Vérifiez aussi que cette valeur n'est pas écrasée par des configurations par répertoire.
5. Auditer les gadgets de destructeur
La seconde condition dépend de votre code. Si vous maintenez une application qui désérialise des données de session ou d'autres sources, passez en revue les classes disposant de __destruct, __wakeup ou de méthodes magiques réalisant des opérations sensibles (écriture de fichiers, appels système, requêtes réseau). Mettez également à jour vos dépendances (frameworks, bibliothèques) : de nombreux gadgets proviennent de composants tiers.
En résumé
| Action | Priorité |
|---|---|
| Mettre à jour vers 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 (ou paquet patché) | Haute |
Unifier session.serialize_handler |
Haute |
Désactiver session.upload_progress.enabled si inutilisé |
Moyenne |
Activer session.use_strict_mode et vérifier les configs par répertoire |
Moyenne |
| Auditer les gadgets de destructeur | Moyenne |
Conclusion
Les correctifs officiels de PHP 8.5.12 (et des versions équivalentes) traitent bien CVE-2026-109618 et CVE-2026-109619. Le vecteur apparu depuis le 22 octobre repose sur des conditions spécifiques (mismatch de handler de sessions et gadget de destructeur) et ne constitue pas un contournement généralisé. Appliquez la mise à jour, harmonisez votre configuration de sessions, et suivez les sources officielles (annonces du projet PHP et avis de sécurité de votre distribution) : nous mettrons cet article à jour si un nouvel advisory est publié.
#PHP #Sécurité #CyberSécurité
Audit gratuit
Discutons de votre projet d'automatisation
Réservez 30 minutes avec nos ingénieurs. Nous identifions vos quick wins et chiffrons votre ROI potentiel — sans jargon, orienté résultats.