Faille PHP : correctif PHP2Shell et vérification de la version de PHP (WordPress)

PHP2Shell est le nom donné à deux vulnérabilités PHP (CVE-2026-109618 · CVE-2026-109619) dont les correctifs ont été publiés le 21 octobre 2026. Ce sont des failles d'exécution de code à distance qui permettent d'exécuter du code sur le serveur même avec une requête non authentifiée : la première chose à faire est donc de vérifier la version de PHP de votre site et de la mettre à jour vers une version corrigée. Sur un serveur Nginx + Apache sous WordPress 7.1.3, j'ai vérifié la version de PHP dans Santé du site, mis à jour uniquement les paquets php vers la version corrigée, puis vérifié à nouveau.
1️⃣ PHP2Shell, la faille PHP : comment elle fonctionne et qui est concerné
Les failles se trouvent dans le moteur PHP, qui lit la requête avant l'exécution du code WordPress : elles restent donc présentes même si vous tenez vos extensions et thèmes à jour, tant que vous ne mettez pas PHP à jour. Selon l'avis du CERT-EU, les deux obtiennent un score CVSS de 9,2 ; les détails techniques sont publics et discutés, et un premier code de preuve de concept commence à circuler.
CVE-2026-109618 est une faille dans laquelle, lorsqu'une requête dépasse la limite de mémoire (memory_limit) et est interrompue, le processus de nettoyage traite comme valides des données de requête à moitié initialisées. CVE-2026-109619 est une faille dans laquelle l'état d'une mémoire libérée après une erreur fatale persiste et est réutilisé avant initialisation par la requête suivante traitée par le même worker.
Selon l'annonce de php.net, toutes les installations PHP qui traitent des requêtes web sont concernées, et Apache mod_php est considéré comme la configuration la plus dangereuse. En effet, une démonstration sur mod_php a montré qu'une seule requête non authentifiée déclenche l'attaque avant l'exécution du code de l'application.
| Mode d'exécution de PHP | Impact | Remarques |
|---|---|---|
| Apache mod_php | 🔴 Concerné · le plus dangereux | Démonstration où une seule requête non authentifiée a déclenché l'attaque avant l'exécution du code de l'application |
| PHP-FPM | 🔴 Concerné | — |
| php-cgi | 🔴 Concerné | — |
| FrankenPHP | 🔴 Concerné | — |
| LiteSpeed | 🔴 Concerné | — |
Les versions corrigées sont 8.2.35, 8.3.36, 8.4.27 et 8.5.12, et toutes les versions inférieures des branches 8.2 à 8.5 sont concernées. PHP 8.1 et antérieur sont des branches que le projet PHP ne prend plus en charge : il n'existe pas de version corrigée officielle, et ce sont les correctifs reportés par les distributions et les hébergeurs (rétroportages) qui les protègent.
Au moment de l'avis de la CISA du 21 octobre, aucune exploitation réelle n'avait été confirmée, mais la CISA a jugé dangereux de laisser les systèmes sans correctif et a recommandé de corriger immédiatement, en commençant par les systèmes exposés à Internet. Le même jour, dans son avis, le CERT-EU a estimé qu'avec la circulation d'un code de preuve de concept, il était devenu plus probable que des attaquants exploitent déjà les failles.
2️⃣ Vérifier la version de PHP : Santé du site › Informations › Serveur
Même en connaissant les failles, impossible de savoir quoi faire sans connaître la version de PHP qu'utilise votre site. Dans l'interface d'administration, ouvrez [Outils › Santé du site] et dépliez la section [Serveur] de l'onglet [Informations] : la ligne [Version de PHP] affiche la version de PHP qui traite réellement les requêtes de votre site.
La ligne [PHP SAPI], juste sous [Version de PHP], indique le mode d'exécution de PHP ; fpm-fcgi correspond à une configuration PHP-FPM. Ici, seules les deux lignes [Version de PHP] et [PHP SAPI] de la section [Serveur] nous intéressent.
L'attaque commence par une requête non authentifiée. Au moment où PHP lit la requête spécialement forgée avant le code WordPress, celle-ci déclenche l'une des deux failles et aboutit à l'exécution de code sur le serveur. Les versions corrigées bloquent ce déroulement : il s'agit donc de passer le PHP du site à une version corrigée ou ultérieure.
[php -v] dans le terminal n'affiche que la version du PHP par défaut en ligne de commande. Sur les configurations qui installent plusieurs versions de PHP sur un même serveur, comme EA-PHP de cPanel ou alt-php de CloudLinux, elle peut différer de celle qu'utilise votre site. La référence est donc la valeur [Version de PHP] dans Santé du site.
php -vPHP 8.3.xx (cli) (built: Jun 3 2025 17:17:57) (NTS gcc x86_64)3️⃣ En dessous de PHP 8.2 : vérifier auprès de l'hébergeur qu'un rétroportage est appliqué, sinon le demander
Si la [Version de PHP] dans Santé du site est inférieure à 8.2 (7.x, 8.0 ou 8.1), il n'existe pas de version corrigée officielle de php.net. D'après le tableau des versions prises en charge de php.net (vérifié le 22 octobre 2026), seules quatre branches sont prises en charge, 8.2, 8.3, 8.4 et 8.5, et les versions officielles 8.1 et antérieures ne reçoivent pas de correctifs de sécurité.
À la place, les distributions et les hébergeurs publient parfois des paquets qui conservent le numéro de version et n'intègrent que le correctif (rétroportages). Les paquets 7.4.33, 8.0.30 et 8.1.34 d'un serveur de test chez un hébergeur infogéré en sont un exemple. Leur journal des modifications contenait la ligne [Backported from 8.2.35 — CVE-2026-109618, CVE-2026-109619].
Même si le numéro de version est identique, on vérifie la présence du correctif en cherchant le numéro de CVE dans le journal des modifications du paquet. Sur Debian et Ubuntu, la recherche prend la forme [zcat /usr/share/doc/php8.2-cli/changelog.Debian.gz | grep 109618]. Sur les systèmes RPM, c'est [rpm -q --changelog php-common | grep 109618] ; le numéro de version dans le nom du paquet doit correspondre à celui qu'utilise votre site.
Donc, en dessous de 8.2, demandez d'abord à votre hébergeur si un rétroportage a été appliqué ; s'il ne l'a pas été ou si l'hébergeur ne peut pas le confirmer, demandez-lui de passer à une version prise en charge (8.2 ou ultérieure). Une fois la mise à jour faite, vérifiez à nouveau la valeur [Version de PHP] dans Santé du site.
La CISA a recommandé aux organisations qui utilisent 8.1 ou antérieur et ne peuvent pas mettre à jour tout de suite de garder leurs systèmes basés sur PHP hors ligne jusqu'à l'application du correctif ou la mise à niveau.
Si vous gérez vous-même le serveur et utilisez 8.1 ou antérieur, vous pouvez installer les paquets rétroportés de votre distribution ou appliquer les correctifs source pour 7.4, 8.0 et 8.1 publiés par l'équipe de sécurité de PHP. Ces branches n'étant plus prises en charge, la vraie solution reste de passer à une version prise en charge.
4️⃣ À partir de PHP 8.2 : mettre à jour vers la version corrigée et vérifier à nouveau
Si vous êtes en 8.2 ou plus mais sous la version corrigée, mettez à jour PHP lui-même. Chez les hébergeurs infogérés et mutualisés, c'est l'hébergeur qui applique le correctif à tout le serveur : vérifiez via ses annonces ou son support s'il est appliqué et quelle build est en place, puis regardez si la [Version de PHP] a changé dans Santé du site. D'après sa page d'état, Cloudways a commencé à corriger toutes les versions de PHP qu'il prend en charge (5.6 à 8.4) le 21 octobre à 22:19 UTC. Le 22 octobre à 10:11 UTC, il a annoncé la fin de l'opération.
Sur un serveur que vous gérez vous-même, mettez à jour avec les paquets du dépôt de votre distribution ou d'un fournisseur LTS, comme l'indique l'annonce de php.net. Avant la mise à jour, affichez en aperçu la liste des paquets qui vont changer pour vérifier que seuls les paquets commençant par php sont mis à jour et qu'aucun autre ne suit, et ne la mélangez pas avec d'autres mises à jour du système d'exploitation.
dnf upgrade --assumeno 'php*'Dependencies resolved.
================================================================================
Package Architecture Version Repository Size
================================================================================
Upgrading:
php x86_64 8.3.xx-1.… … 1.9 M
php-cli x86_64 8.3.xx-1.… … 5.6 M
php-common x86_64 8.3.xx-1.… … 1.3 M
php-fpm x86_64 8.3.xx-1.… … 1.9 M
(lignes des paquets d'extensions comme php-gd · php-intl omises)
Transaction Summary
================================================================================
Upgrade xx Packagesdnf upgrade 'php*'Upgraded:
php-8.3.xx-1.….x86_64
php-cli-8.3.xx-1.….x86_64
php-common-8.3.xx-1.….x86_64
php-fpm-8.3.xx-1.….x86_64
(lignes des paquets d'extensions omises)
Complete!Lors de ce test, seuls les paquets commençant par php ont été mis à jour vers la version corrigée, et php-fpm a redémarré tout seul à la fin de l'installation des paquets. La version corrigée ne s'applique qu'après le redémarrage des workers php-fpm : sur un environnement sans redémarrage automatique, lancez vous-même [systemctl restart php-fpm].
Après la mise à jour, vérifiez que [php -v] et la ligne [Version de PHP] de l'onglet [Informations] de Santé du site indiquent tous deux la version corrigée ou ultérieure, puis contrôlez aussi l'état du service php-fpm et la réponse du site. Si seule la valeur en ligne de commande a changé et que [Version de PHP] reste identique, redémarrez php-fpm et vérifiez à nouveau.
Après la mise à jour, dépliez à nouveau la section [Serveur] dans l'onglet [Informations] du même écran [Outils › Santé du site] et regardez la ligne [Version de PHP]. Si la valeur est passée à la version installée, les workers php-fpm tournent eux aussi sur la nouvelle version.
php -vPHP 8.3.xx (cli) (built: Oct 19 2026 14:00:34) (NTS gcc x86_64)systemctl is-active php-fpmactivecurl -s -o /dev/null -w '%{http_code}\n' 'https://example.com/?r=1'200Pour les paquets dont le numéro de version augmente, on vérifie le correctif grâce au nouveau numéro de version ; pour les paquets rétroportés qui gardent le même numéro, grâce au numéro de CVE dans le journal des modifications. Ce serveur était dans le premier cas : [rpm -q --changelog php-common] ne contenait aucune ligne avec le numéro de CVE, et j'ai vérifié grâce au nouveau numéro de version sur la première ligne du journal des modifications.
5️⃣ Si vous ne pouvez pas mettre à jour tout de suite : les mesures temporaires indiquées par php.net
Pour les serveurs qui ne peuvent pas être mis à jour tout de suite, php.net propose les réglages ci-dessous comme mesures temporaires, tout en précisant qu'ils ne font que réduire certains chemins d'attaque et ne rendent pas l'installation sûre. Il indique aussi de ne pas limiter la mémoire avec RLIMIT_AS ou RLIMIT_DATA à la place, car cela peut justement provoquer les échecs d'allocation vulnérables.
| Réglages | Valeur | Où | Ce qu'il bloque |
|---|---|---|---|
| memory_limit | -1 | php_admin_value dans le pool FPM ou la configuration Apache (pour que l'application ne puisse pas le modifier) | CVE-2026-109618 · chemin d'échec de la limite de mémoire (incomplet) |
| post_max_size | 8M (32M si vous avez besoin d'envoyer des fichiers) · upload_max_filesize inférieur à cette valeur | php.ini · configuration du pool | CVE-2026-109618 |
| session.upload_progress.enabled | 0 + redémarrer tous les workers | php.ini · pool FPM · configuration du serveur (pas via ini_set() ni .user.ini) | CVE-2026-109619 · uniquement le chemin de session confirmé |
| fatal_error_backtraces | 0 + redémarrer tous les workers (PHP 8.5 uniquement) | Comme ci-dessus | CVE-2026-109619 · uniquement le chemin de backtrace confirmé |
php_admin_value est un réglage côté serveur que l'application ne peut pas modifier : les utilisateurs d'un hébergement mutualisé ne peuvent souvent pas le changer eux-mêmes et doivent, là aussi, passer par leur hébergeur. php.net conseille également de fixer des limites, au niveau du serveur web ou du proxy, à la taille du corps des requêtes, au nombre de champs de saisie, au nombre de parties multipart, au nombre d'en-têtes et à la profondeur d'imbrication.
🔢 FAQ & contenus recommandés
Sécurité
Failles de sécurité de wp-config.php
Comment empêcher l'exposition du fichier wp-config.php et renforcer ses réglages de sécurité.
Sécurité
XML-RPC WordPress
Repérer les attaques xmlrpc.php dans les journaux et trois façons de le désactiver.
Serveur
avertissement php-fpm max_children
Un test réel qui trouve la cause de l'avertissement dans les journaux avant d'ajouter des workers.
ℹ️ Mention d'affiliation
Le contenu de ce site contient des liens d'affiliation. Lorsqu'un visiteur achète un produit ou un service via l'un de ces liens, le site perçoit une commission du vendeur. Le montant payé par l'acheteur(il baisse lors des promotions ↓), lui, n'augmente pas. Les prix, remises et stocks indiqués correspondent à la date de rédaction et peuvent différer ; vérifiez-les donc auprès du vendeur avant d'acheter. Les produits sont choisis et évalués selon nos propres critères, et les commissions n'influencent ni l'ordre de présentation ni le contenu des évaluations.