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

Mention d'affiliation v3.1
Mention d'affiliation v3.2 (mobile)
Environnement de test Famille RHELAlmaLinux 9.8PHP 8.3 · WordPress 7.1.3Vérifié le 2026-10-22

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 PHPImpactRemarques
Apache mod_php🔴 Concerné · le plus dangereuxDé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.

Écran Santé du site, onglet Informations : menu de gauche Outils › Santé du site et lignes Architecture serveur, Serveur web, Version de PHP et PHP SAPI de la section Serveur — la version de PHP sert de référence pour vérifier le correctif de la faille PHP PHP2Shell (WordPress 7.1.3)

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.

🧩 Déroulement de l'attaque PHP2Shell
Schéma explicatif
①Requête non authentifiéeUne requête web que n'importe qui peut envoyer
②Requête spécialement forgéePHP la lit avant le code WordPress
③Failles PHPMémoire épuisée → des données à moitié construites sont utilisées telles quellesCVE-2026-109618La requête suivante utilise l'état d'une requête terminéeCVE-2026-109619
④Exécution de code sur le serveurPrise de contrôle du site
✅ Les versions corrigées bloquent ce déroulement8.2.35 · 8.3.36 · 8.4.27 · 8.5.12

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 -v
PHP 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 Packages
dnf 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.

Écran Santé du site, onglet Informations : après la mise à jour, nouvelle vérification que la ligne Version de PHP de la section Serveur indique la version corrigée ou ultérieure — menu de gauche Outils › Santé du site et lignes Version de PHP et PHP SAPI de la section Serveur (WordPress 7.1.3)

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 -v
PHP 8.3.xx (cli) (built: Oct 19 2026 14:00:34) (NTS gcc x86_64)
systemctl is-active php-fpm
active
curl -s -o /dev/null -w '%{http_code}\n' 'https://example.com/?r=1'
200

Pour 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églagesValeurOùCe qu'il bloque
memory_limit-1php_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_size8M (32M si vous avez besoin d'envoyer des fichiers) · upload_max_filesize inférieur à cette valeurphp.ini · configuration du poolCVE-2026-109618
session.upload_progress.enabled0 + redémarrer tous les workersphp.ini · pool FPM · configuration du serveur (pas via ini_set() ni .user.ini)CVE-2026-109619 · uniquement le chemin de session confirmé
fatal_error_backtraces0 + redémarrer tous les workers (PHP 8.5 uniquement)Comme ci-dessusCVE-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

Les mises à jour automatiques de WordPress ne concernent que le cœur, les extensions, les thèmes et les traductions ; PHP est un programme installé sur le serveur, c'est donc l'administrateur du serveur ou l'hébergeur qui le met à jour. Les mises à jour automatiques du cœur, des extensions et des thèmes s'activent respectivement dans l'écran Mises à jour de WordPress et dans les écrans Extensions et Thèmes, et aucun de ces écrans n'affiche la version de PHP.

Tous les détails techniques se trouvent dans les deux avis de sécurité GitHub que l'annonce de php.net lie à côté des numéros de CVE. CVE-2026-109618 correspond à GHSA-w8hw-w9fx-j79w et CVE-2026-109619 à GHSA-6wmf-4rv5-p3rp. L'avis du CERT-EU cite ces deux mêmes avis comme références, et cet article n'inclut pas les détails permettant de reproduire l'attaque.

La CISA recommande de surveiller les processus workers PHP qui lancent un shell ou téléchargent des outils. Elle indique aussi qu'un pare-feu applicatif web peut offrir une certaine protection en attendant le correctif. PHP étant souvent intégré comme composant d'autres logiciels et passant inaperçu, elle a conseillé de commencer par dresser la liste des systèmes qui exécutent PHP.

ℹ️ 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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Prouvez que vous êtes humain : 3   +   3   =