php2shell : CVE-2026-109618 et CVE-2026-109619 dans PHP et que faire
php2shell désigne deux failles critiques d’exécution de code à distance dans PHP lui-même, CVE-2026-109618 et CVE-2026-109619, notées 9,2 selon CVSS v4.0. Les détails ont fuité le 20 octobre 2026, un jour avant la fin de l’embargo, et l’équipe PHP a avancé sa version de sécurité au 21 octobre 2026 à 14 h 00 UTC.
Mettez PHP à jour dès que votre hébergeur ou votre distribution publie le correctif. D’ici là, un seul réglage PHP ferme le chemin d’attaque signalé, et ReportedIP Hive 3.0.4 l’applique pour vous lorsque « Extended Protection » est activé.
Qu’est-ce que php2shell ?
php2shell regroupe deux bogues du cœur de PHP, et non de WordPress, d’une extension ou d’un thème. Dans son avis 2026-018, le CERT-EU les juge potentiellement exploitables sans authentification. Les rapports citent PHP 5 à PHP 8 comme versions touchées. Des correctifs officiels ne sont attendus que pour les branches maintenues, soit PHP 8.2 et au-delà.
Le 21 octobre 2026, un chercheur en sécurité a déclaré avoir reproduit les deux failles. Selon lui, il s’agit de deux bogues de type use-after-free sur le tas dans le gestionnaire de session.upload_progress, la fonction php_session_rfc1867_callback du fichier ext/session/session.c. L’équipe PHP ne l’a pas encore confirmé, et l’avis officiel accompagnera la version.
| Date (UTC) | Événement |
|---|---|
| 20 octobre 2026, 15 h 20 | Un message contenant des détails sous embargo paraît sur Hacker News, puis est supprimé |
| 20 octobre 2026, 19 h 33 | L’équipe PHP annonce la version de sécurité avec un jour d’avance |
| 20 octobre 2026 | Le CERT-EU publie l’avis 2026-018 |
| 21 octobre 2026 | Un chercheur annonce une reproduction fonctionnelle dans le gestionnaire de progression d’envoi |
| 21 octobre 2026, 14 h 00 | Version de sécurité PHP prévue |
Pourquoi un pare-feu WordPress ne peut-il pas arrêter php2shell ?
La progression d’envoi de session (session upload progress) est une fonction de PHP qui indique où en est l’envoi d’un fichier. PHP l’exécute pendant la lecture du corps d’une requête multipart, dès qu’un champ de formulaire nommé PHP_SESSION_UPLOAD_PROGRESS arrive avec un cookie de session. Cela se passe au démarrage de la requête, avant que PHP n’exécute la première ligne du moindre script.
Un pare-feu sous forme d’extension intervient plus tard, même dans sa variante la plus précoce. Le garde de Hive placé avant WordPress est chargé via auto_prepend_file, et PHP n’exécute ce fichier qu’une fois le corps de la requête analysé. Si le bogue se trouve dans le gestionnaire de progression d’envoi, le mal est fait avant qu’un code PHP puisse examiner la requête. C’est vrai pour toutes les extensions de sécurité, pas seulement pour Hive.
Une extension peut en revanche modifier un réglage PHP par répertoire. session.upload_progress.enabled peut être défini dans un fichier .user.ini ou .htaccess, et PHP lit ces fichiers avant d’analyser le corps. Réglage désactivé, PHP ignore entièrement le gestionnaire de progression d’envoi.
Que change Hive 3.0.4 ?
Hive 3.0.4 ajoute une ligne au bloc balisé qu’« Extended Protection » écrit déjà pour son garde. Le cœur de WordPress, WooCommerce et les extensions de formulaire courantes n’utilisent pas la progression d’envoi, les envois de fichiers fonctionnent donc comme avant.
| Configuration serveur | Fichier | Ligne ajoutée par Hive |
|---|---|---|
| PHP-FPM, CGI ou LiteSpeed | .user.ini à la racine de WordPress | session.upload_progress.enabled=Off |
| Apache avec mod_php | .htaccess à la racine de WordPress | php_flag session.upload_progress.enabled off |
| nginx sans détection de PHP-FPM | aucun | Ajoutez la ligne vous-même dans php.ini |
Les sites avec « Extended Protection » reçoivent la ligne dans l’heure qui suit l’ouverture d’une page d’administration par un administrateur. Pour l’appliquer tout de suite, désactivez puis réactivez « Extended Protection » dans l’onglet « Firewall » de la page « Protection ». Par défaut, PHP-FPM garde les fichiers .user.ini en cache jusqu’à 5 minutes. Nous avons vérifié le résultat sur notre environnement de test Apache : ini_get() renvoyait on avant la mise à jour et off après.
Rien ne change sur les sites sans « Extended Protection », car Hive n’écrit ces fichiers qu’après votre accord. La documentation d’Extended Protection précise sur quels serveurs Hive sait se brancher tout seul.
Comment désactiver vous-même la progression d’envoi de session ?
L’endroit le plus sûr est la configuration du serveur, car elle couvre tous les sites hébergés dessus. Ajoutez cette ligne au php.ini de chaque version de PHP qui sert des sites web, ou au champ de réglages PHP personnalisés de votre panneau d’hébergement :
session.upload_progress.enabled = Off
- Rechargez ensuite PHP-FPM, par exemple avec
systemctl reload php8.3-fpm. - Vérifiez la valeur avec
php-fpm8.3 -i | grep upload_progress. La commandephp -iaffiche la configuration de la ligne de commande, pas celle qu’utilise le serveur web. - Cherchez les fichiers de pool qui remettent la valeur à on avec
php_admin_value. - Sur un hébergement mutualisé sans accès à php.ini, placez la ligne dans un
.user.inià la racine web.
Le manuel PHP décrit cette fonction sur sa page consacrée à la progression d’envoi de session. Notre société sœur CMS ADMINS l’a désactivée le 21 octobre 2026 sur tous les serveurs qu’elle gère, pour chaque version installée de PHP 5.6 à 8.4, et publie un résumé de la fuite en allemand : php2shell chez CMS ADMINS.
Que faire une fois le correctif PHP disponible ?
- Installez la version de sécurité de PHP en priorité sur tous les serveurs exposés à Internet.
- Pour PHP 8.1 et antérieur, demandez un rétroportage à votre hébergeur ou à votre distribution, ou passez le site sur PHP 8.2 ou plus récent.
- Laissez la progression d’envoi désactivée jusqu’à ce que l’avis confirme quelle partie de PHP était touchée.
- Surveillez les processus PHP qui lancent des shells,
curl,wgetoupython. Ce schéma révèle une exploitation réussie. - En cas de soupçon de compromission, déconnectez le serveur du réseau, conservez les journaux du serveur web et de PHP et cherchez de nouveaux fichiers PHP à la racine web.
Les limites de l’extension figurent dans le guide de Hive. Une faille dans le moteur PHP en fait partie : l’extension peut réduire la surface d’attaque, mais seule la mise à jour de PHP supprime le bogue.
Questions fréquentes
Désactiver la progression d’envoi casse-t-il les envois de fichiers dans WordPress ?
Non, désactiver la progression d’envoi de session ne casse pas les envois. Le réglage ne concerne que les données de progression que PHP écrit dans la session pendant un envoi. WordPress affiche sa propre barre de progression dans le navigateur et ne lit pas ces données, si bien que les envois de médias, les installations d’extensions et les pièces jointes de formulaires fonctionnent comme avant.
Mon site est-il protégé si WordPress et toutes les extensions sont à jour ?
Un WordPress à jour ne protège pas contre php2shell, car les failles se trouvent dans PHP, sous WordPress. Ce qui compte, c’est la version de PHP sur le serveur et la désactivation ou non de la progression d’envoi. La version de PHP s’affiche sous Outils, Santé du site, Infos, dans la section Serveur.
Quelle version de Hive ajoute ce réglage ?
ReportedIP Hive 3.0.4, publiée le 21 octobre 2026, ajoute le réglage sur les sites où « Extended Protection » est activé. Il fait partie de l’extension gratuite disponible sur wordpress.org et ne demande aucune offre payante. Les sites sans « Extended Protection » ont besoin de la ligne php.ini décrite dans cet article.
Pour aller plus loin
Une vulnérabilité antérieure traitée par le pare-feu de Hive : CVE-2026-19949 dans All-in-One WP Migration. La branche actuelle a commencé avec Hive 3.0 sur wordpress.org.
Protégez votre site WordPress grâce aux données de menaces de la communauté, à la connexion à deux facteurs et à un pare-feu à deux niveaux.