php2shell : deux RCE critiques dans le cœur de PHP

Le 21 octobre 2026, le projet PHP corrige en urgence php2shell, deux vulnérabilités critiques du cœur du moteur, la CVE-2026-109618 et la CVE-2026-109619, qui ouvrent une exécution de code à distance sans authentification sur tous les modes de service web. Les branches hors support, de PHP 5 à PHP 8.1, sont listées comme affectées par le CERT-FR mais absentes des fiches CVE, et ne reçoivent aucune version corrigée.

TLP:CLEAR   PAP:CLEAR   Diffusion libre, exploitation sans restriction.
Publication
25 octobre 2026
Objet
CVE-2026-109618, CVE-2026-109619, php2shell
Diffusion
Publique
Confiance
Élevée
Sources
12

Les faits

Le 21 octobre 2026 à 14:00 UTC (1), le projet PHP publie les versions 8.5.12, 8.4.27, 8.3.36 et 8.2.35. Elles corrigent deux vulnérabilités critiques permettant une exécution de code à distance, abrégée RCE (2), par un attaquant non authentifié. La communauté les a réunies sous le nom php2shell avant même la publication. Les deux failles sont notées 9,2 sur l’échelle CVSS (3) version 4.0, sévérité critique.

La CVE (4) CVE-2026-109618, suivie par le projet sous l’identifiant GHSA (5) GHSA-w8hw-w9fx-j79w, tient à la gestion des dépassements de mémoire, abrégés OOM (6). La CVE-2026-109619, suivie sous GHSA-6wmf-4rv5-p3rp, tient à un état global périmé : des données internes propres à une requête survivent à la libération de leur mémoire et sont réutilisées lors d’une requête suivante. Les deux se situent dans des parties du moteur que presque toute requête traverse, ce qui explique à la fois leur gravité et la difficulté de les corriger sans casser la compatibilité ni dégrader les performances.

Sont exposées toutes les installations servant des requêtes web : PHP-FPM (7), Apache avec le module mod_php, php-cgi, FrankenPHP et LiteSpeed. Le projet PHP estime le risque le plus élevé pour mod_php, où une requête non authentifiée peut déclencher l’attaque avant l’exécution du moindre code applicatif. La NSA (8) souligne que les failles résident dans PHP lui-même, et non dans l’application hébergée ni dans sa configuration : un serveur exécutant une version affectée est exploitable.

L’agence américaine CISA (9) et la NSA publient le 21 octobre une alerte et un avis appelant à corriger immédiatement. Le CERT-FR (10) publie le même jour l’alerte CERTFR-2026-ALE-014, mise à jour le 22 octobre, et l’avis CERTFR-2026-AVI-1359. L’alerte de la CISA recense celles des centres nationaux britannique, australien, néerlandais, néo-zélandais et canadien ; l’avis de la NSA renvoie en outre au CERT-EU (11).

Ce qu’il faut retenir

Mettre à jour vers une version corrigée est la seule protection complète ; les mesures de contournement réduisent l’exposition à des chemins d’attaque précis sans rendre une installation sûre. Les versions 8.1 et antérieures, dont PHP 7 et PHP 5, n’ont pas de version corrigée et n’apparaissent pas dans les fiches CVE : leur cas relève de la migration ou de l’isolement, que recommandent la CISA, la NSA et le CERT-FR.

Chronologie, découverte et crédits

DateÉvénementSource
2024Premier audit de sécurité externe de PHP depuis des années, financé par la Sovereign Tech Agency allemande et réalisé par Quarkslab ; premiers signes du problème OOM, sans vecteur d’exploitation concretPHP Foundation
30 juillet 2026Début de l’audit de PHP par la société Calif, dans le cadre du programme Patch the PlanetPHP Foundation
11 août 2026Ryan A, de Calif, rapporte une RCE inconditionnelle de même cause racine que le problème OOM ; OpenAI rapporte indépendamment la même cause racinePHP Foundation
24 août 2026Vecteurs d’attaque supplémentaires rapportés par WizPHP Foundation
18 septembre 2026Vecteurs d’attaque supplémentaires rapportés par OpenAIPHP Foundation
20 octobre 2026, vers 15:00 UTCLes deux identifiants CVE circulent sur des forums et réseaux sociaux, avec une heure de release et un score de 10.0 erronés, sans détail techniquePHP Foundation
20 octobre 2026, 19:30 UTCPré-annonce du projet PHP, qui avance la release du 22 au 21 octobrePHP Foundation, php.net
20 octobre 2026, 19:35 UTCwatchTowr confirme publiquement l’existence des deux vulnérabilitéswatchTowr
20 octobre 2026, vers 20:00 UTCCalif publie par erreur une vidéo de démonstration, retirée puis recopiée sur les réseaux sociauxPHP Foundation
21 octobre 2026, 07:41 UTCChainguard rompt l’embargo et publie des images contenant le correctif, plus de six heures avant la release coordonnéePHP Foundation
21 octobre 2026, 14:00 UTCPublication des versions 8.5.12, 8.4.27, 8.3.36 et 8.2.35, des deux avis GHSA et des fiches CVE par le PHP Group, en qualité de CNA (12)php.net, cve.org
21 octobre 2026Alerte de la CISA, avis de la NSA, alerte CERTFR-2026-ALE-014 et avis CERTFR-2026-AVI-1359 du CERT-FR ; exploitation observée par watchTowr dans son réseau de honeypotsCISA, NSA, CERT-FR, watchTowr
22 octobre 2026Mise à jour de l’alerte du CERT-FR : connaissance de PoC (13) pour des déploiements spécifiques de PHP, précisions sur les contournementsCERT-FR
23 octobre 2026Avis informatif complémentaire sur session upload progress (CVE-2026-115560, à paraître) ; mise à jour de l’alerte de la CISA avec une règle de détection Sigmaphp.net, CISA

Fig. 1. Chronologie reconstituée à partir du billet de la PHP Foundation, des archives de php.net, des fiches CVE, des alertes de la CISA et du CERT-FR, de l’avis de la NSA et de la FAQ de watchTowr.

Le délai entre l’identification du problème OOM en 2024 et sa correction est présenté par la PHP Foundation comme une défaillance structurelle. En 2024, aucun chemin vers une exécution de code n’était connu, et l’équipe de sécurité, réduite et fonctionnant au consensus, n’a pas tranché entre plusieurs correctifs aux inconvénients opposés : ruptures de compatibilité, risque de déni de service, ou modifications à coordonner sur de nombreuses extensions tierces. Le correctif est devenu la priorité de l’équipe à partir du 11 août 2026, quand plusieurs rapports ont établi la portée réelle du problème. La Foundation indique avoir décidé depuis de trancher les décisions de sécurité à la majorité.

Crédits

Les fiches CVE publiées par le PHP Group créditent Ryan, de Calif, et Wiz comme rapporteurs des deux vulnérabilités ; OpenAI y figure comme rapporteur de la CVE-2026-109619 et comme découvreur de la CVE-2026-109618. Le correctif est attribué à Arnaud Le Blanc, Ilija Tovilo, Jakub Zelenka et Nora Dossche. La PHP Foundation précise que les outils d’analyse assistée par l’IA, dont ceux d’OpenAI et d’Anthropic mis à sa disposition, servent à valider les rapports et à regrouper ceux qui partagent une cause racine, chaque décision et chaque correctif restant l’œuvre d’un développeur.

Versions concernées : trois lectures divergentes

Pour les branches maintenues, toutes les sources concordent : chaque branche reçoit une version correctrice unique, qui couvre les deux CVE. Pour les branches hors support, trois lectures coexistent. Les fiches CVE du CNA ne listent que quatre plages affectées, de 8.2 à 8.5, avec un statut par défaut « unaffected » pour toute version non listée. L’alerte du CERT-FR liste comme affectées toutes les versions 5.x, 7.x, 8.0.x et 8.1.x. Le projet PHP, enfin, a publié pour 7.4, 8.0 et 8.1 des reports de correctif, ce qui revient à les traiter comme vulnérables, sans les faire figurer dans ses fiches.

BrancheFiches CVE (CNA)Alerte du CERT-FRRéponse du projet PHP
8.5Affectée avant 8.5.12Affectée avant 8.5.12Version corrigée 8.5.12
8.4Affectée avant 8.4.27Affectée avant 8.4.27Version corrigée 8.4.27
8.3Affectée avant 8.3.36Affectée avant 8.3.36Version corrigée 8.3.36
8.2Affectée avant 8.2.35Affectée avant 8.2.35Version corrigée 8.2.35 ; fin de vie le 31 décembre 2026
8.1Non listéeToutes versions affectéesReport source minimal, sans release
8.0Non listéeToutes versions affectéesReport source minimal, sans release
7.4Non listéeToutes versions 7.x affectéesReport source minimal, sans release
7.0 à 7.3Non listéesToutes versions 7.x affectéesAucun report
5.xNon listéeToutes versions affectéesAucun report

Fig. 2. Versions concernées selon les fiches CVE-2026-109618 et CVE-2026-109619 publiées par le PHP Group, l’alerte CERTFR-2026-ALE-014 dans sa version du 22 octobre 2026 et l’avis de sécurité de php.net. Numéros de version comparés caractère par caractère entre ces sources et les deux avis GHSA.

Le CERT-FR rappelle que l’éditeur n’assure plus le support des branches 5.x, 7.x, 8.0.x et 8.1.x. watchTowr, dans sa FAQ mise à jour le 23 octobre, indique avoir confirmé que les branches anciennes non maintenues, dont PHP 5, sont affectées, et classe 7.3 et antérieures comme sans correctif disponible. Les reports source fournis par le projet pour 7.4, 8.0 et 8.1 s’adressent à ceux qui compilent eux-mêmes ou n’ont pas de fournisseur de support long terme ; ce ne sont pas des versions publiées.

Les fiches portent en outre deux conteneurs de données tiers : un conteneur ADP (14) de la CISA et un conteneur SADP (15) de Siemens, mécanisme par lequel un fournisseur publie des informations propres à ses produits. Le contenu de ces conteneurs n’apparaît pas dans la version consultée des fiches.

Point de vigilance

Un outil de gestion des vulnérabilités qui s’appuie sur les seules fiches CVE considère les versions 8.1 et antérieures comme non affectées, puisqu’elles relèvent du statut par défaut « unaffected ». Une installation en PHP 7 ou PHP 5 peut ainsi ne remonter dans aucun rapport de scan. L’inventaire de ces branches se fait sur la liste du CERT-FR et sur le constat de fin de support, pas sur la correspondance avec la fiche CVE.

Distributions, conteneurs et vérification de version

Les distributions Linux et les fournisseurs de support long terme ont reçu les correctifs à l’avance. Une installation qui suit les paquets de sa distribution peut afficher un numéro de version inchangé, le correctif étant reporté dans la version empaquetée sans montée de version amont ; la vérification se fait alors sur le journal des modifications du paquet. Le contrôle porte sur le moteur qui sert réellement les requêtes, PHP-FPM ou mod_php, dont la version peut différer de celle de l’interpréteur en ligne de commande. Après mise à jour, tous les workers doivent être redémarrés pour que le correctif prenne effet.

PHP est souvent embarqué dans d’autres logiciels, et sa présence n’est pas toujours directement visible : la CISA et le CERT-FR demandent d’étendre l’inventaire aux produits, équipements et conteneurs qui intègrent un composant PHP, au-delà des serveurs web identifiés comme tels.

CVE-2026-109618 : corruption mémoire par OOM

PHP utilise l’appel longjmp() pour interrompre le traitement d’une requête lorsqu’elle dépasse la limite mémoire memory_limit et sortir du contexte en cours. Dans certains contextes, la mémoire d’une requête est brièvement accessible avant d’être entièrement initialisée. Si une allocation échoue à cet instant, PHP ne tient pas compte de la sortie anticipée et laisse la mémoire de la requête dans un état invalide. L’allocation qui échoue n’a pas besoin d’être liée à la zone invalide. La procédure d’arrêt de la requête lit ensuite cet état ou y branche son exécution ; plusieurs stratégies d’OOM déclenchent cette condition de façon reproductible et mènent à une exécution de code.

Atteindre l’OOM en restant dans les limites apparentes

L’attaquant provoque le dépassement de mémoire à volonté. L’avis GHSA-w8hw-w9fx-j79w décrit plusieurs défauts d’analyse des requêtes multipart qui permettent d’y parvenir tout en respectant les limites affichées de PHP :

  • une requête multipart sans longueur de contenu déclarée utilisable passe le contrôle initial de post_max_size et continue à fournir des données de corps décodées
  • une partie multipart peut porter un nombre non borné d’en-têtes, dont la représentation en mémoire par PHP consomme bien plus que leur représentation sur le réseau, ce qui épuise memory_limit en restant sous post_max_size
  • les champs de fichier vides ne comptent pas dans max_file_uploads mais créent les tableaux de métadonnées habituels, et des noms de champs imbriqués multiplient le travail d’allocation

L’OOM peut aussi être atteint par des chemins propres à l’application, chaque fois qu’une entrée contrôlée par l’attaquant provoque une allocation suffisamment grande ou un usage mémoire répété.

Le correctif

Le correctif retire l’appel longjmp() de la gestion de l’OOM et le remplace par deux mécanismes : un OOM souple, différé, déclenché au prochain point sûr de la machine virtuelle de PHP, et un OOM dur, immédiat, qui appelle _exit() si la consommation mémoire atteint un second seuil plus élevé. La procédure d’arrêt ne voit plus d’état invalide, et la capacité de PHP à limiter la consommation mémoire est conservée. La vulnérabilité est répertoriée sous les faiblesses CWE (16) 416 (utilisation après libération), 755 (gestion incorrecte de conditions exceptionnelles), 824 (accès à un pointeur non initialisé), 1325 (allocation séquentielle mal contrôlée) et 1419 (initialisation incorrecte de ressource).

L’impact confirmé est une exécution de code à distance non authentifiée avec les droits du compte du worker web. L’exécution de code complète a été validée contre mod_php avec les limites mémoire et d’entrée par défaut et une configuration prefork ordinaire à plusieurs workers. Des workers supplémentaires et un trafic sans rapport augmentent le nombre de tentatives nécessaires sans supprimer la condition ; la portabilité et la fiabilité de l’exploit dépendent de la compilation de PHP, des extensions, du comportement du frontal et de l’agencement de l’allocateur.

CVE-2026-109619 : état global périmé

PHP conserve dans chaque worker divers états globaux : état d’erreur, de session, d’objet ou d’extension. Ces états pointent vers de la mémoire appartenant à une seule requête et doivent être réinitialisés avant la libération de cette mémoire. Certaines opérations d’entrée, de configuration, de session et de gestion d’erreur s’exécutent avant l’initialisation normale de la requête suivante. Elles accèdent alors à un état périmé que la requête précédente n’a pas réinitialisé, ce qui produit une utilisation après libération ; un agencement du tas, la zone de mémoire allouée dynamiquement, préparé par l’attaquant donne une exécution de code.

Producteur et consommateur

L’exploitation suppose deux opérations distinctes. Le producteur est une opération PHP qui stocke un état propre à une requête dans un emplacement accessible plus tard. Le consommateur est une opération d’une requête suivante qui lit cet état périmé, le libère ou y branche son exécution, avant que l’initialisation normale ne le réinitialise. Les deux surviennent dans des requêtes HTTP (17) différentes traitées par le même worker.

L’état peut survivre pour deux raisons. Une erreur fatale, y compris une erreur due à l’épuisement mémoire, abandonne une opération avant la réinitialisation correspondante. Un avertissement ou un autre message non fatal peut aussi repeupler l’état d’erreur après qu’il a été vidé lors de l’arrêt.

CasNatureStatut
Trace d’erreur fatale, PHP 8.5Avec fatal_error_backtraces actif, le rapport d’erreur fatale stocke un état de trace propre à la requête, dont la réinitialisation est systématiquement manquée à l’arrêt ; un diagnostic de la requête suivante l’atteint avant l’initialisationConfirmé, base de l’exploitation mod_php
Cycle de vie de session upload progressUn téléversement initialise un état de session et de décodage avant l’initialisation normale du module ; une erreur fatale après publication de cet état empêche sa réinitialisationConfirmé, validé contre mod_php et FPM
Diagnostics de configuration avant initialisationUn avertissement émis en appliquant un réglage invalide ou obsolète avant l’initialisation consomme l’état d’erreur périmé, qu’il soit affiché, journalisé ou nonConsommateur confirmé
Autres états d’erreur, d’objet et d’extensionLe correctif réinitialise un état plus large ; l’accessibilité dépend de l’application, des extensions et du point de publication de l’étatConditionnel

Fig. 3. Cas de producteur et de consommateur décrits par l’avis GHSA-6wmf-4rv5-p3rp. Session upload progress est activée par défaut et ne requiert aucun appel applicatif à session_start().

Pour le cycle de session upload progress, le déclencheur indépendant de l’application est un OOM pendant le traitement de l’entrée. Avec mod_php, producteur et erreur fatale peuvent survenir pendant le démarrage multipart ; la variante FPM validée publie l’état pendant l’exécution applicative, atteint une erreur fatale, puis utilise session upload progress comme consommateur précoce, ce qui suppose une opération applicative adaptée. Pour les diagnostics de configuration, l’avis cite notamment des réglages obsolètes comme auto_detect_line_endings=1, des réglages mbstring ou iconv explicitement définis, des valeurs malformées de memory_limit et des chemins rejetés par open_basedir. Avec mod_php, la configuration de répertoire et les fichiers .htaccess sont appliqués avant l’initialisation de la requête ; avec FPM, l’exposition est conditionnelle aux paramètres PHP_VALUE et PHP_ADMIN_VALUE transmis par le frontal.

L’impact confirmé est une utilisation après libération non authentifiée, une divulgation mémoire et une exécution de code à distance avec les droits du worker web. Les faiblesses retenues sont les mêmes que pour la CVE-2026-109618 : CWE-416, 755, 824, 1325 et 1419.

Note de méthode

Les familles d’état autres que les deux cas confirmés n’établissent un impact de sécurité qu’une fois un producteur et un consommateur concrets démontrés. Producteur et consommateur doivent atteindre le même worker : plusieurs workers et le recyclage des processus réduisent le taux de réussite par requête sans supprimer la condition.

Ce qui expose un serveur, selon le mode d’exécution

Le mode d’exécution de PHP détermine le niveau de risque, parce qu’il décide si la procédure d’arrêt de la requête est appelée même quand le démarrage a échoué.

Mode d’exécutionCVE-2026-109618 (OOM)CVE-2026-109619 (état périmé)
Apache mod_phpRCE démontrée, sans authentification, avant tout code applicatif, avec les limites par défautRCE validée, par la trace d’erreur fatale et par session upload progress
PHP-FPMJugé exposé par analyse du code, sans exploit complet démontré selon l’avis GHSA ; le billet de la PHP Foundation fait état d’une RCE confirmée par des chemins applicatifs. Le worker se termine si le démarrage échoue, mais un OOM plus tard dans la requête reste possibleRCE validée, par un chemin dépendant d’une opération applicative adaptée
FrankenPHPAppelle la procédure d’arrêt sans condition, comme mod_php ; probablement exposé à des attaques indépendantes de l’applicationPas de consommateur précoce établi en configuration par défaut ; variantes possibles selon l’application et les extensions
LiteSpeed (LSAPI (18))Modélisé comme FPM ; exploits propres à l’application probables mais non validésCandidat conditionnel, des valeurs de configuration pouvant être appliquées tôt

Fig. 4. Exposition par mode d’exécution, selon les deux avis GHSA. « Validé » signifie exploit complet démontré ; « jugé exposé » relève de l’analyse de code sans exploit complet.

Apache mod_php appelle la procédure d’arrêt de la requête sans condition, même quand le démarrage a échoué. Pendant ce démarrage, l’analyse automatique du corps peut épuiser la limite mémoire et sortir de la requête dans un contexte où l’état est temporairement invalide, que l’arrêt traite ensuite, avant le moindre code applicatif. PHP-FPM termine au contraire le processus enfant quand le démarrage échoue, ce qui bloque ce chemin précis et retire le processus du pool ; l’analyse de code le juge néanmoins exposé par d’autres voies, et la CVE-2026-109619 y a été exploitée avec succès.

Mesures de réduction publiées par le projet

Les deux avis GHSA insistent sur un point : seule la mise à jour est une protection complète. Les mesures ci-dessous réduisent l’exposition à des chemins d’attaque précis sans rendre une installation sûre. Elles se posent dans une configuration appliquée avant l’analyse de la requête, php.ini, pool FPM ou configuration du serveur, jamais par ini_set() ni par un fichier .user.ini de FPM. Chaque changement suppose le redémarrage de tous les workers.

Contre la corruption par OOM (CVE-2026-109618)

  • fixer memory_limit=-1, de préférence sans que les applications puissent la redéfinir, par exemple avec php_admin_value dans le pool FPM ou la configuration Apache, et vérifier qu’aucun pool, répertoire ou réglage applicatif ne rétablit une limite finie. Cela retire l’échec de limite mémoire contrôlable, mais un échec d’allocation sous-jacent, par exemple de mmap(), peut encore atteindre le chemin vulnérable
  • garder post_max_size bas, 8 Mo sans envoi de fichiers et 32 Mo avec, maintenir upload_max_filesize sous post_max_size, réduire max_input_nesting_level, et faire appliquer en amont, au serveur web ou au proxy, des limites sur la taille décodée, le nombre de champs, de parties multipart, d’en-têtes par partie et de téléversements, y compris pour les requêtes sans longueur de contenu utilisable ; bloquer les requêtes multipart avant PHP si l’application ne les utilise pas
  • utiliser une limite mémoire de conteneur ou de cgroup comme borne de disponibilité, de préférence avec une politique qui ne tue que le worker affecté. Ne pas substituer RLIMIT_AS ni RLIMIT_DATA, qui font échouer mmap() et déclenchent précisément le chemin vulnérable

Contre l’état global périmé (CVE-2026-109619)

  • fixer session.upload_progress.enabled=0 et redémarrer tous les workers : bloque les chemins de session confirmés, pas les autres variantes, et ne fait rien pour la CVE-2026-109618
  • sur PHP 8.5, fixer fatal_error_backtraces=0 et redémarrer tous les workers : bloque le seul chemin confirmé de la trace d’erreur fatale
  • retirer les réglages invalides ou obsolètes appliqués par requête qui émettent un diagnostic avant l’initialisation ; masquer les diagnostics par error_reporting, display_errors ou l’opérateur @ ne protège pas
  • corriger les erreurs fatales et les dépassements de délai atteignables par un attaquant, y compris dans les rappels, le traitement des téléversements ou des imports, les destructeurs et le nettoyage ; à défaut de contrainte de performance, limiter chaque worker à une requête avec pm.max_requests=1
Point de vigilance

Un avis informatif du 23 octobre 2026 recommande de garder session.upload_progress.enabled=0 jusqu’au prochain correctif courant, pour couvrir un vecteur de RCE suivi sous CVE-2026-115560. Il suppose une combinaison peu probable : un session.serialize_handler configuré en php_binary ou php_serialize puis basculé en php par ini_set() avant session_start(). L’avis GHSA-6wmf-4rv5-p3rp conseille par ailleurs de laisser cette fonction désactivée même après correctif lorsqu’elle n’est pas utilisée, car peu employée et peu testée.

Recommandations des autorités

Les trois autorités dont les publications ont été consultées convergent sur la mise à jour immédiate et sur la mise hors ligne ou l’isolement des systèmes qui ne peuvent pas être corrigés. Elles se distinguent par les mesures d’accompagnement.

AutoritéRecommandationsParticularités
CISA, 21 octobre, mise à jour le 23 octobreInventorier PHP, y compris comme composant d’autres logiciels ; corriger immédiatement en priorisant les systèmes exposés sur Internet ; mettre hors ligne ce qui ne peut être corrigé, y compris les versions 8.1 et antérieures ; surveiller les workers PHP qui lancent des shells ou téléchargent des outilsUn pare-feu applicatif peut apporter une protection partielle dans l’attente ; règle de détection Sigma publiée sur GitHub le 23 octobre
NSA, 21 octobreInventorier les matériels et logiciels dépendant des versions vulnérables ; appliquer les correctifs, y compris ceux des éditeurs qui intègrent PHP ; renforcer la journalisation ; remplacer les services PHP en fin de vie ; mettre hors ligne à défaut de mise à jourAnticipe une exploitation à court terme et une vigilance de plusieurs semaines sur les services exposés
CERT-FR, 21 octobre, mise à jour le 22 octobreIsoler les équipements affectés, puis migrer vers une version maintenue et à jour ; contournements provisoires non qualifiés par le CERT-FR : session.upload_progress.enabled = Off dans php.ini, complété pour PHP-FPM par php_admin_flag[session.upload_progress.enabled] = off, et blocage des requêtes HTTP de Content-Type multipart, ou à défaut leur supervision, au niveau d’un WAF (19)Liste PHP 5.x, 7.x, 8.0.x et 8.1.x comme affectées ; renvoie à sa fiche réflexe CERTFR-2025-RFX-002 sur l’endiguement d’un équipement de bordure compromis

Fig. 5. Recommandations de la CISA, de la NSA et du CERT-FR, d’après leurs publications des 21 au 23 octobre 2026.

Le blocage des requêtes multipart recommandé par le CERT-FR va au-delà de la mesure du projet, qui le réserve aux applications n’utilisant pas ce type de requête : il interrompt tout téléversement de fichier. Il couvre les stratégies d’OOM par analyse multipart de la CVE-2026-109618 et le chemin session upload progress de la CVE-2026-109619, qui repose sur un téléversement. Il ne couvre ni le chemin de la trace d’erreur fatale sur PHP 8.5, ni les chemins propres à l’application. Le paramètre php_admin_flag mentionné par le CERT-FR répond à la même exigence que celle des avis GHSA : poser le réglage à un niveau que l’application ne peut pas redéfinir et qui s’applique avant l’analyse de la requête.

État de l’exploitation et de la divulgation

La divulgation coordonnée a déraillé deux jours avant la date de release prévue. Le 20 octobre 2026, les deux identifiants CVE ont circulé avec une heure de release et un score erronés, sans détail technique. Le projet a avancé sa pré-annonce et déplacé la release du 22 au 21 octobre, compromis entre la rapidité et le temps laissé aux distributions pour empaqueter le correctif. La vidéo de démonstration publiée par erreur par Calif a révélé quelques détails supplémentaires et, selon la PHP Foundation, accéléré le développement de PoC. Le conseil de mitigation transmis à quelques fournisseurs d’infrastructures critiques vers 23:00 UTC le 20 octobre a pu fuiter également. Le 21 octobre à 07:41 UTC, Chainguard a publié des images contenant le correctif, exposant celui-ci sous forme binaire à l’analyse plus de six heures avant que les autres utilisateurs ne disposent de la mise à jour.

Les constats sur l’exploitation diffèrent selon les sources, et sont à tenir séparés :

  • la PHP Foundation indique avoir inspecté les PoC apparus après la fuite sans identifier d’exploit fonctionnel au moment de la divulgation
  • la CISA écrit le 21 octobre ne pas avoir observé d’exploitation réussie
  • le CERT-FR indique le 22 octobre avoir connaissance de PoC pour des déploiements spécifiques de PHP
  • watchTowr indique observer une exploitation en conditions réelles depuis le 21 octobre dans son réseau de honeypots, et maintient ce constat dans sa FAQ mise à jour le 23 octobre
  • au 25 octobre 2026, aucune des deux CVE ne figure au catalogue KEV (20) de la CISA, constat déjà fait par watchTowr au 22 octobre ; l’alerte de la CISA mise à jour le 23 octobre ne mentionne pas d’inscription
  • aucune attribution à un acteur n’a été rendue publique
Note de méthode

Une exploitation observée dans des honeypots établit des tentatives contre des cibles exposées, sans dire si elles aboutissent à une exécution de code sur des systèmes de production ; elle n’est pas corroborée publiquement par une source indépendante. L’absence d’inscription au catalogue KEV ne vaut pas preuve d’absence d’exploitation. La PHP Foundation relève que l’usage de LLM (21) accroît le volume de rapports reçus et réduit le délai entre divulgation et exploitation, pour les défenseurs comme pour les attaquants.

Détection et vérification

L’exploitation se manifeste typiquement par des processus enfants anormaux lancés directement par les processus de travail de PHP, par exemple un interpréteur de commandes issu de php-fpm, php-cgi, httpd ou apache2. La CISA recommande de surveiller les workers PHP qui lancent des shells ou téléchargent des outils, et met à disposition une règle Sigma dans son dépôt GitHub, qu’elle annonce susceptible d’évoluer. Le CERT-FR conseille de superviser les requêtes multipart lorsqu’elles ne peuvent pas être bloquées.

Un audit de configuration et de journalisation complète la détection. Activer log_errors=On, un error_log fonctionnel et error_reporting=E_ALL dans la configuration de démarrage, le temps d’une revue isolée, permet de repérer dans les journaux d’Apache, de PHP-FPM, du proxy et des services :

  • les avertissements, dépréciations et erreurs cœur répétés avant l’exécution des scripts cibles
  • les diagnostics produits pendant le nettoyage d’extension ou de serveur
  • les erreurs fatales, d’analyse et non capturées, et les messages Maximum execution time exceeded
  • les échecs limités à des routes, des types de contenu, des fichiers ou des options contrôlés par un attaquant

L’absence d’erreur dans les journaux ne prouve pas l’absence de vulnérabilité : les journaux historiques ont pu exclure les dépréciations, une revue même exhaustive ne couvre que les chemins effectivement exercés, et un échec peut survenir avant l’écriture du message. En cas de compromission suspectée d’un serveur exposé, le CERT-FR renvoie à sa fiche réflexe d’endiguement d’un équipement de bordure, CERTFR-2025-RFX-002.

Qualification des sources

Les deux avis GHSA, les fiches CVE, l’avis de sécurité et les archives de php.net, le billet de la PHP Foundation, les publications de la CISA, de la NSA et du CERT-FR sont des sources primaires, lues en intégralité. La FAQ de watchTowr est une source d’éditeur. Les versions et le vecteur CVSS ont été recoupés entre ces sources.

ÉlémentStatutCommentaire
Versions vulnérables et corrigées des branches 8.2 à 8.5corroboréphp.net, deux avis GHSA, deux fiches CVE, alerte du CERT-FR et FAQ de watchTowr concordants.
Score et vecteur CVSS 4.0 (9,2)corroboréVecteur identique dans les deux avis GHSA et les deux fiches CVE : CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N.
Branches 5.x à 8.1 affectéescorroboréListe du CERT-FR, confirmation revendiquée par watchTowr pour PHP 5, reports source du projet pour 7.4, 8.0 et 8.1 ; non reflété dans les fiches CVE, qui ne listent que 8.2 à 8.5.
Mécanismes, modes d’exécution et correctifscorroboréDétail technique porté par les deux avis GHSA, descriptions concordantes des fiches CVE, de php.net et de la PHP Foundation.
RCE de la CVE-2026-109618 sur PHP-FPMsource uniqueAffirmée par le billet de la PHP Foundation ; l’avis GHSA-w8hw-w9fx-j79w indique qu’aucun exploit complet n’a été démontré sur FPM. Les deux versions sont rapportées.
Chronologie interne de la découverte et de la fuitesource uniqueBillet de la PHP Foundation pour l’audit de 2024, les rapports de Calif, d’OpenAI et de Wiz, la vidéo et la publication de Chainguard.
PoC pour des déploiements spécifiquessource uniqueAlerte du CERT-FR du 22 octobre, sans détail sur les déploiements concernés.
Exploitation observée en conditions réellessource uniqueHoneypots de watchTowr ; non corroboré par la CISA ni par une inscription au catalogue KEV au 25 octobre.
Avis CERTFR-2026-AVI-1359 et communication 2026-018 du CERT-EUsource uniqueCités par l’alerte du CERT-FR, non consultés directement.
Score de 10.0écartéValeur issue de la fuite du 20 octobre, démentie par le projet ; le score retenu est 9,2.

Évaluation

Serveurs mod_php exposés non mis à jour
RCE sans authentification démontrée avant tout code applicatif, avec les limites par défaut ; correctif analysable sous forme binaire depuis le 21 octobre.
Élevé
Branches 8.1 et antérieures, dont PHP 7 et PHP 5
Listées comme affectées par le CERT-FR, sans version corrigée ; reports source seulement pour 7.4, 8.0 et 8.1, aucun pour 7.3 et antérieures ni pour 5.x.
Élevé
Inventaire fondé sur les seules fiches CVE
Statut par défaut « unaffected » hors des plages 8.2 à 8.5 : les branches anciennes peuvent échapper aux scans ; PHP souvent embarqué sans visibilité directe.
Élevé
Exploitation à court terme
PoC connus du CERT-FR, exploitation rapportée dans des honeypots, correctif public ; pas de confirmation indépendante d’exploitation réussie ni d’inscription au catalogue KEV au 25 octobre.
Élevé
Serveurs PHP-FPM, FrankenPHP et LiteSpeed exposés
Pour la CVE-2026-109618 sur FPM, exposition établie par analyse de code selon l’avis GHSA, RCE confirmée par des chemins applicatifs selon la PHP Foundation ; exploitation validée pour la CVE-2026-109619 sur FPM, par un chemin dépendant de l’application.
Modéré
Efficacité des contournements seuls
Aucune mesure ne couvre les deux CVE ni toutes leurs variantes ; réduction d’exposition sans garantie, utile dans l’attente de la mise à jour ou de la migration.
Modéré
Note de méthode

Analyse fondée sur les avis GHSA-w8hw-w9fx-j79w et GHSA-6wmf-4rv5-p3rp, les fiches CVE-2026-109618 et CVE-2026-109619, l’avis de sécurité et les archives 2026 de php.net, le billet de la PHP Foundation du 21 octobre 2026, l’alerte de la CISA dans sa version du 23 octobre, l’avis de la NSA du 21 octobre, l’alerte CERTFR-2026-ALE-014 dans sa version du 22 octobre la FAQ de watchTowr dans sa version du 23 octobre et le catalogue KEV de la CISA, consultés le 25 octobre 2026. Les niveaux de la grille relèvent du jugement. L’état de l’exploitation évolue ; une inscription au catalogue KEV ou la publication d’indicateurs de compromission justifierait une mise à jour de l’article.

Lexique

  1. UTC (1) : Coordinated Universal Time, temps universel coordonné.
  2. RCE (2) : Remote Code Execution, exécution de code à distance.
  3. CVSS (3) : Common Vulnerability Scoring System, système de notation de la gravité des vulnérabilités.
  4. CVE (4) : Common Vulnerabilities and Exposures, identifiant public attribué à une vulnérabilité.
  5. GHSA (5) : GitHub Security Advisory, identifiant d’avis de sécurité attribué par GitHub.
  6. OOM (6) : Out Of Memory, dépassement de la mémoire disponible ou autorisée.
  7. PHP-FPM (7) : PHP FastCGI Process Manager, gestionnaire de processus FastCGI de PHP.
  8. NSA (8) : National Security Agency, agence américaine chargée du renseignement d’origine électromagnétique et de la cybersécurité des systèmes nationaux.
  9. CISA (9) : Cybersecurity and Infrastructure Security Agency, agence américaine de cybersécurité et de sécurité des infrastructures.
  10. CERT-FR (10) : centre gouvernemental de veille, d’alerte et de réponse aux attaques informatiques, rattaché à l’Agence nationale de la sécurité des systèmes d’information.
  11. CERT-EU (11) : service de cybersécurité des institutions, organes et agences de l’Union européenne.
  12. CNA (12) : CVE Numbering Authority, organisme habilité à attribuer des CVE et à publier leur fiche ; ici le PHP Group.
  13. PoC (13) : Proof of Concept, code démontrant la faisabilité d’une exploitation.
  14. ADP (14) : Authorized Data Publisher, organisme autorisé à enrichir une fiche CVE de données complémentaires.
  15. SADP (15) : Supplier Authorized Data Publisher, fournisseur autorisé à publier dans une fiche CVE des informations propres à ses produits.
  16. CWE (16) : Common Weakness Enumeration, classification des faiblesses logicielles.
  17. HTTP (17) : Hypertext Transfer Protocol, protocole de transfert du web.
  18. LSAPI (18) : LiteSpeed Server Application Programming Interface, interface d’exécution de PHP sous LiteSpeed.
  19. WAF (19) : Web Application Firewall, pare-feu applicatif.
  20. KEV (20) : Known Exploited Vulnerabilities, catalogue de la CISA des vulnérabilités dont l’exploitation est constatée.
  21. LLM (21) : Large Language Model, grand modèle de langage.

Sources

  1. PHP, Security advisory: Critical remote code execution vulnerabilities, update now, 21 octobre 2026. php.net/archive/2026
  2. PHP (GitHub php-src), RCE via OOM corruption, avis GHSA-w8hw-w9fx-j79w, 21 octobre 2026. github.com/php/php-src
  3. PHP (GitHub php-src), RCE via stale global state, avis GHSA-6wmf-4rv5-p3rp, 21 octobre 2026. github.com/php/php-src
  4. CVE Program, fiche CVE-2026-109618, CNA PHP Group, publiée le 21 octobre 2026. cve.org
  5. CVE Program, fiche CVE-2026-109619, CNA PHP Group, publiée le 21 octobre 2026. cve.org
  6. The PHP Foundation, Today’s PHP Security Release, and How We’re Strengthening PHP Security, 21 octobre 2026. thephp.foundation
  7. CISA, Critical Vulnerabilities in PHP Require Immediate Patching, 21 octobre 2026, mise à jour le 23 octobre 2026. cisa.gov
  8. NSA, NSA Advisory: Critical Patches Recommended for PHP Vulnerabilities, 21 octobre 2026. nsa.gov
  9. CERT-FR, [Màj] Multiples vulnérabilités dans PHP, alerte CERTFR-2026-ALE-014, 21 octobre 2026, mise à jour le 22 octobre 2026. cert.cyber.gouv.fr
  10. watchTowr, Frequently Asked Questions About PHP Remote Code Execution (PHP2Shell CVE-2026-109618 & CVE-2026-109619), 20 octobre 2026, mise à jour le 23 octobre 2026. watchtowr.com
  11. PHP, Informational advisory: Session upload progress, 23 octobre 2026. php.net/archive/2026
  12. CISA, catalogue Known Exploited Vulnerabilities, consulté le 25 octobre 2026. cisa.gov/known-exploited-vulnerabilities-catalog

Marquage TLP:CLEAR, PAP:CLEAR. Diffusion libre, exploitation sans restriction.

Les analyses présentées ici n’engagent que leur auteur et reposent sur les sources publiques listées ci-dessus.