PHP2Shell : deux failles critiques dans le cœur de PHP permettent une exécution de code à distance

PHP2Shell : deux failles critiques dans le cœur de PHP permettent une exécution de code à distance

Le 21 octobre 2026, l’équipe PHP a publié des mises à jour d’urgence pour corriger « PHP2Shell », deux vulnérabilités critiques nichées dans le moteur même de PHP. Elles permettent à un attaquant non authentifié d’exécuter du code à distance sur un serveur web, avant même que le code de l’application ne s’exécute. Découvertes par Wiz Research avec l’aide de modèles d’IA, elles touchent la quasi-totalité des versions de PHP publiées depuis une décennie. Amazon a observé une tentative d’exploitation quatre jours avant la divulgation publique.

L’essentiel
  • CVE-2026-109618 et CVE-2026-109619 : deux use-after-free dans le cœur de PHP, notées 9,2 (CVSS v4), menant à une exécution de code à distance sans authentification.
  • Toute installation PHP qui sert des requêtes web est concernée : mod_php (Apache), PHP-FPM, php-cgi, FrankenPHP, LiteSpeed. L’application elle-même n’a pas besoin d’être vulnérable.
  • Versions corrigées : PHP 8.5.12, 8.4.27, 8.3.36 et 8.2.35. La mise à jour est la seule remédiation complète.
  • Exploitation observée dès le 17 octobre 2026, avant la levée de l’embargo, puis tentatives massives dans les heures suivant la publication.
  • Les équipements et services qui embarquent PHP sont aussi exposés : Palo Alto Networks a confirmé que PAN-OS et Panorama sont affectés.
CVECVE-2026-109618 · CVE-2026-109619
SévéritéCritique — CVSS v4 9,2
Versions corrigées8.5.12 · 8.4.27 · 8.3.36 · 8.2.35
StatutExploitation active

Ce qui s’est passé

Le nom « PHP2Shell » désigne un ensemble de failles de sécurité mémoire signalées par Wiz Research au PHP Security Team le 24 août 2026. Après un correctif coordonné avec les distributions Linux et les éditeurs de support étendu (LTS), PHP a publié ses versions corrigées et deux avis de sécurité le 21 octobre 2026. Selon Wiz, chaque version de PHP publiée au cours des dix dernières années contient au moins l’un de ces défauts, et certains remontent jusqu’à PHP 5.4.

Le contexte rend l’affaire particulièrement sensible : PHP fait tourner une très large part du web, de WordPress à Drupal en passant par Joomla. Or la vulnérabilité ne dépend d’aucune application. Wiz souligne qu’une simple page « Hello World » sur une version affectée peut suffire à exposer le serveur.

Date (2026)Événement
19 aoûtPremière vulnérabilité découverte par Wiz Research
20–21 aoûtExécution de code non authentifiée confirmée sur Drupal puis WordPress
24 aoûtSignalement au PHP Security Team
21 septembrePHP accuse réception et lance un correctif coordonné
17 octobrePremière tentative d’exploitation observée par Amazon (honeypots MadPot)
21 octobrePremières preuves de concept vers 02:00 UTC ; correctifs et divulgation publique à 14:00 UTC
22 octobrePalo Alto Networks confirme que PAN-OS et Panorama sont affectés ; Fortinet et Cisco analysent leurs produits

Analyse technique

Toutes les variantes ont la même origine : une mauvaise gestion des erreurs fatales, en particulier des erreurs de mémoire insuffisante (OOM), pendant le traitement d’une requête. Une erreur fatale peut laisser derrière elle un état interne corrompu, qu’une requête suivante traitée par le même worker va réutiliser.

CVE-2026-109618 — RCE via corruption lors d’un OOM

PHP utilise longjmp() pour sortir du contexte courant lors d’une erreur OOM. Si cela se produit alors que la mémoire de la requête n’est que partiellement initialisée, la phase d’arrêt peut lire ou exploiter un état invalide. L’avis officiel indique que l’attaque a été validée en HTTP contre mod_php avec les limites par défaut. Le correctif supprime ce chemin longjmp() au profit d’un OOM « souple » différé et d’un arrêt immédiat via _exit() au-delà d’un seuil plus élevé.

CVE-2026-109619 — RCE via un état global périmé

Les workers PHP conservent des états globaux (erreurs, session, objets, extensions) qui peuvent pointer vers la mémoire d’une requête précédente. Si une erreur fatale (OOM ou délai dépassé) interrompt la requête avant leur réinitialisation, la mémoire est libérée mais la référence subsiste : un use-after-free (CWE-416) exploitable par la requête suivante. L’avis confirme l’impact via le chemin des backtraces d’erreur fatale de PHP 8.5 (mod_php) et via la progression d’upload de session (mod_php et PHP-FPM).

Quatre bogues, deux CVE

Wiz décrit quatre bogues regroupés sous ces deux identifiants. Ils ont permis des démonstrations d’exécution de code non authentifiée sur les images officielles wordpress:latest, drupal:latest et joomla:latest, ainsi qu’une fuite de mémoire du worker restituée dans un cookie PHPSESSID, y compris quand l’application n’appelle jamais session_start().

Bogue (selon Wiz)MécanismeDémonstration
Unserializer de progression d’uploadUse-after-free sur l’état global de désérialisation de sessionRCE pré-authentification (WordPress, Drupal, Joomla)
Divulgation de mémoirePS(id) pointe vers de la mémoire libérée, renvoyée dans le cookie de sessionLecture de mémoire du worker, dont des données d’autres requêtes
Backtrace d’erreur fatalePointeur pendant dans EG(last_fatal_error_backtrace)RCE pré-authentification (Drupal)
OPcacheConfusion de type entre workers en mémoire partagéeRCE pré-authentification (WordPress)

Le rôle de l’IA

Wiz indique avoir utilisé des modèles d’IA de pointe pour la découverte, le développement d’exploits et la validation des correctifs. Selon l’éditeur, un seul chercheur a réalisé en une semaine environ un travail qui aurait demandé des mois à une équipe de haut niveau. Amazon tire la même leçon côté défense : l’analyse assistée par IA rend beaucoup moins coûteuse la transformation d’un correctif ou d’un avis en exploit fonctionnel.

Exploitation dans la nature

Amazon Threat Intelligence rapporte qu’une tentative d’exploitation a visé son réseau de honeypots MadPot le 17 octobre 2026, quatre jours avant la divulgation, depuis une adresse IP liée à un service commercial d’anonymisation. La façon dont l’acteur a obtenu ces informations pendant l’embargo reste inconnue. Le 21 octobre, entre 02:00 et 08:00 UTC, d’autres tentatives aux charges et infrastructures variées suggèrent plusieurs acteurs. Après la publication, de nouvelles preuves de concept sont apparues en quelques heures et ont été utilisées presque immédiatement.

Les requêtes observées sont des POST multipart contenant la chaîne PHP_SESSION_UPLOAD_PROGRESS. Amazon a publié six adresses IP observées, en précisant qu’elles appartiennent à une infrastructure d’anonymisation partagée : elles doivent servir de pistes d’investigation, pas de liste de blocage.

Ce que l’on ne sait pas encore. Aucun acteur n’a été nommé, et Amazon ignore si les tentatives observées auraient réussi sur des systèmes réels. Les produits tiers qui embarquent PHP (appliances, services managés) sont encore en cours d’évaluation chez plusieurs éditeurs. Enfin, ces vulnérabilités opèrent sous la couche applicative : les journaux d’application peuvent ne rien montrer.

Qui est concerné

Toute organisation qui exécute PHP exposé au web : sites WordPress, Drupal ou Joomla, intranets, applications métiers, back-offices. Le risque est maximal pour Apache avec mod_php, mais PHP-FPM, php-cgi, FrankenPHP et LiteSpeed sont également concernés. Les versions 8.1 et antérieures ne sont plus maintenues par le projet ; des rétroportages minimaux existent pour PHP 7.4, 8.0 et 8.1 pour ceux qui compilent depuis les sources, et certaines distributions ou éditeurs LTS proposent des paquets corrigés.

Le danger le plus durable est la « longue traîne » : installations oubliées, appliances et équipements embarqués qui intègrent PHP sans que leurs exploitants le sachent. Le NCSC britannique demande de mettre hors ligne tout système qui ne peut être corrigé ou protégé rapidement.

Lecture MITRE ATT&CK

Les sources ne fournissent pas de correspondance ATT&CK. Le tableau ci-dessous est une lecture indicative de Defensy, fondée sur les comportements décrits par Amazon.

TechniqueComportement observé
T1595 — Active ScanningTentatives à grande échelle contre les capteurs et honeypots dès la publication
T1190 — Exploit Public-Facing ApplicationRequêtes POST multipart non authentifiées exploitant PHP2Shell
T1090.003 — Multi-hop ProxyAttaques lancées depuis des réseaux commerciaux d’anonymisation

Recommandations

  1. ImmédiatMettre à jour PHP en commençant par l’exposé

    Passez en 8.5.12, 8.4.27, 8.3.36 ou 8.2.35, ou appliquez le paquet corrigé de votre distribution. Priorisez les serveurs accessibles depuis Internet. Aucune configuration seule ne corrige complètement les deux CVE.

  2. ImmédiatMesures temporaires si le correctif attend

    Activez les règles WAF de votre fournisseur (Cloudflare en propose à tous ses clients). Envisagez session.upload_progress.enabled=0 et, sur PHP 8.5, fatal_error_backtraces=0, ou le blocage des uploads multipart après évaluation de l’impact. À défaut, mettez le système hors ligne.

  3. ImmédiatInventorier toutes les instances PHP

    Serveurs web, conteneurs, images de base, appliances et services tiers. Utilisez un outil de test comme php2shell-scanner (Searchlight Cyber) sur les hôtes que vous êtes autorisé à tester.

  4. Court termeRechercher des traces de compromission depuis le 17 octobre

    Dans les journaux web : POST contenant PHP_SESSION_UPLOAD_PROGRESS, uploads multipart inhabituels suivis d’erreurs de limite mémoire, rafales de HTTP 500, cookies PHPSESSID anormalement longs. Sur l’hôte : processus enfants inattendus du worker PHP, fichiers modifiés, web shells.

  5. Court termeSuivre les avis des éditeurs tiers

    Firewalls, passerelles, CMS hébergés : surveillez les bulletins (Palo Alto Networks, Fortinet, Cisco et autres) et appliquez leurs correctifs dès disponibilité.

  6. Moyen termeRaccourcir les délais de correctif critique

    Pour les vulnérabilités critiques exposées, mesurez le délai de correction en heures, pas en jours. Développez des détections comportementales qui ne dépendent pas d’une signature de CVE.

L’avis de Defensy

PHP2Shell illustre deux réalités : une faille de plateforme peut rendre vulnérables des milliers d’applications sans qu’aucune ne soit en cause, et l’exploitation peut précéder la divulgation. Savoir en quelques heures où tourne PHP dans votre SI devient une condition de survie.

Avec IGIDER Strike, nous identifions vos actifs exposés et les vulnérabilités réellement exploitables. Avec SOC, Détection & Réponse, nous recherchons les signes d’exploitation dans vos journaux. Et si vous suspectez une compromission, signalez l’incident sans attendre.

Références
  1. RCE via OOM corruption (CVE-2026-109618)PHP Security Team — GitHub Security Advisory — 21 octobre 2026
  2. RCE via stale global state (CVE-2026-109619)PHP Security Team — GitHub Security Advisory — 21 octobre 2026
  3. PHP2Shell: PHP RCEWiz Research — octobre 2026
  4. Amazon Threat Intelligence identifies PHP2Shell exploitation prior to public disclosure in MadPotAWS Security Blog — CJ Moses — 21 octobre 2026
  5. Critical security issue affecting PHPNCSC (Royaume-Uni) — 21 octobre 2026
  6. PHP Downloadsphp.net
  7. PHP2Shell: Critical PHP vulnerabilities patched (CVE-2026-109618, CVE-2026-109619)Help Net Security — Mirko Zorz — 21 octobre 2026
  8. PHP2Shell: Fortinet, Cisco, Palo Alto NetworksHelp Net Security — 22 octobre 2026