Le 21 octobre 2026, le projet PHP a publié en urgence les versions 8.5.12, 8.4.27, 8.3.36 et 8.2.35. Elles corrigent deux vulnérabilités critiques du moteur lui-même, CVE-2026-109618 et CVE-2026-109619, regroupées sous le nom PHP2Shell. Chacune est notée 9,2 en CVSS v4.0 et permet une exécution de code à distance sans authentification (annonce php.net). Des tentatives d'exploitation ont été observées dès le 17 octobre, quatre jours avant la divulgation (AWS).
Cet article rassemble uniquement des informations publiées par le projet PHP, les chercheurs à l'origine de la découverte, des autorités (CERT-FR, CERT-EU, Cybermalveillance.gouv.fr) et des fournisseurs d'infrastructure. Chaque affirmation renvoie à sa source.
Qui est concerné : toute installation PHP qui sert des requêtes web, que ce soit PHP-FPM, Apache avec mod _php, php-cgi, FrankenPHP ou LiteSpeed. Le projet PHP juge le risque le plus élevé pour mod _php : un exploit démontré y déclenche l'attaque avant toute exécution de code applicatif (php.net).
Action 1, mettre à jour : passer en 8.5.12, 8.4.27, 8.3.36 ou 8.2.35, ou appliquer le paquet corrigé de votre distribution. Ensuite, redémarrer tous les workers PHP et vérifier que le correctif est bien chargé.
Action 2, traiter les versions en fin de vie : PHP 8.1 et antérieures ne reçoivent pas de version officielle. Il faut un backport de votre fournisseur, une migration, ou à défaut une isolation du service.
Action 3, rechercher les traces d’une compromission : les investigations doivent remonter au 17 octobre, pas au 21.
Nouveau au 23 octobre : php.net recommande de désactiver session.upload_progress.enabled jusqu'à la prochaine version de maintenance, même sur une installation corrigée (voir plus bas).
Les mesures de configuration réduisent l'exposition mais ne protègent pas : le projet PHP répète que la mise à jour est la seule solution complète (php.net).
Le défaut de fond était connu depuis 2024, mais l'exploitation a commencé avant la divulgation, après une fuite de l'embargo. Les heures sont en UTC (heure de Paris = UTC+2).
| Date | Événement | Source |
|
2024 |
En corrigeant un problème remonté par l'audit externe PHP (Quarkslab, via OSTIF), un developpeur du coeur repère les premiers signes du problème de gestion du manque de mémoire. Aucun vecteur d'exploitation concret n'est trouvé et le correctif s'enlise. |
|
|
11 aout 2026 |
Calif signale une exécution de code à distance inconditionnelle, de même cause. OpenAI rapporte indépendamment la même cause, puis Wiz (24 août) et OpenAI (18 septembre) d'autres vecteurs. |
|
|
17 octobre |
Première tentative d'exploitation observée par les honeypots d'AWS, depuis une IP d'un réseau d'anonymisation commercial. |
|
|
20 oct., ~15:00 |
Les identifiants CVE fuitent sur HackerNews (information relayée sur TuxCare et confirmé par WatchTowr) , avec une heure de publication erronée et un score CVSS faux (10.0 au lieu de 9,2). Aucun détail technique ne fuite.
|
|
| 20 oct., 19:30 | Le projet PHP publie une pré-annonce et avance la sortie d'un jour, au 21 octobre 14:00. | PHP Foundation, php.net |
| 20 oct., ~20:00 |
Calif publie par erreur une vidéo de démonstration, rapidement retirée. Des copies circulent et accélèrent le développement de preuves de concept. Des échanges sur Mastodon, X (Twitter), GitHub et des serveurs Discord de la communauté PHP/SecOps mentionnaient déjà la consigne :
|
|
| 21 oct., 02:00–08:00 | AWS et Cloudflare observent d'autres tentatives, depuis plusieurs infrastructures d'anonymisation, ce qui suggère plusieurs acteurs. |
|
| 21 oct., 07:41 |
Selon la PHP Foundation, un distributeur publie des images contenant le correctif plus de six heures avant la levée de l'embargo. Sur plusieurs thread dès 9h00 (FR) on trouve les informations sur la gestion des sessions la gestion de la mémoire comme mitigation |
PHP Foundation |
| 21 oct., 14:00 UTC (officiel) | Sortie de PHP 8.5.12, 8.4.27, 8.3.36 et 8.2.35, avec des backports (https://deb.sury.org/) source pour 7.4, 8.0 et 8.1. AWS voit de nouvelles preuves de concept utilisées contre ses capteurs dans les heures qui suivent. En fait certains fix on été dispo à partir de 15 h 36, (on a fermé le site a 41, pour réouverture après patching a 16h08) | php.net, AWS |
| 21 oct. | Alertes du CERT-FR (CERTFR-2026-ALE-014) et du CERT-EU (2026-018). | CERT-FR, CERT-EU |
| 22 oct. | Le CERT-FR indique avoir connaissance de preuves de concept pour les deux CVE. Cybermalveillance.gouv.fr publie son alerte. | CERT-FR, Cybermalveillance |
| 23 oct. | Avis informatif de php.net : une variante distincte (CVE-2026-115560) justifie de garder l'upload progress désactivé jusqu'à la prochaine version de maintenance. | php.net |
AWS qualifie désormais PHP2Shell d'exploité largement dans la nature. Le fournisseur Cloud précise aussi que l'on ignore si les tentatives observées sur ses honypots auraient réussi sur des systèmes réels (AWS).
Les deux failles touchent la gestion mémoire et le traitement d'erreurs du moteur, que presque chaque requête traverse. Elles ne dépendent d'aucune application en particulier (PHP Foundation).
| CVE-2026-109618 | CVE-2026-109619 | |
| Avis | GHSA-w8hw-w9fx-j79w | GHSA-6wmf-4rv5-p3rp |
| Intitulé | RCE via OOM corruption | RCE via stale global state |
| Score | CVSS v4.0 9,2 | CVSS v4.0 9,2 |
| Vecteur | AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H | AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H |
| Impact confirmé | Exécution de code non authentifiée, avec les droits du compte du worker web | Use-after-free, divulgation de mémoire et exécution de code, avec les droits du worker |
| Démontré sur | mod_php, avec les limites par défaut | mod_php (deux chemins) et PHP-FPM (chemin des sessions) |
Le vecteur CVSS indique une complexité d'attaque élevée (AC:H) et des prérequis de déploiement (AT:P). Cela décrit les conditions techniques à réunir, pas une protection : les chercheurs de Calif ont confirmé une exécution de code avant authentification sur WordPress, Drupal, Joomla, MediaWiki, Roundcube, Magento, phpMyAdmin, Nextcloud, Laravel, Symfony et WHMCS (Calif).
Quand une requête atteint memory_limit, PHP abandonne son traitement avec longjmp(). Si cela arrive pendant qu'une structure interne n'est que partiellement initialisée, la procédure de fin de requête relit ensuite cet état invalide (GHSA-w8hw).
L'avis décrit plusieurs façons d'atteindre ce manque de mémoire sans dépasser les limites apparentes, toutes dans l'analyse des requêtes multipart :
Tout cela se produit pendant l'initialisation de la requête, avant l'exécution du code applicatif. Sous mod_php, la procédure de fin de requête s'exécute même si l'initialisation a échoué : c'est ce qui rend l'attaque indépendante de l'application. PHP-FPM, lui, termine le processus fils dans ce cas. L'avis juge néanmoins FPM vulnérable par analyse du code, sans exploit complet démontré pour ce chemin. La PHP Foundation indique de son côté une exécution de code confirmée sur FPM via des chemins applicatifs (PHP Foundation). FrankenPHP est jugé probablement vulnérable au même titre que mod_php, et LSAPI se comporte comme FPM.
Le correctif supprime longjmp() pour ce cas. Il le remplace par un arrêt différé au prochain point sûr de la machine virtuelle, et par un arrêt immédiat via _exit() au-delà d'un second seuil plus élevé.
Un worker PHP conserve des états globaux (erreurs, session, objets, extensions) qui pointent vers la mémoire d'une requête. Si une erreur fatale interrompt une opération avant sa remise à zéro, la requête suivante traitée par le même worker peut utiliser cette mémoire déjà libérée (GHSA-6wmf).
L'exploitation demande deux requêtes sur le même worker : l'une laisse l'état périmé, l'autre le consomme avant l'initialisation normale. L'avis confirme deux consommateurs :
Deux cas sont confirmés. Le premier concerne PHP 8.5 avec fatal_error_backtraces activé, exploité sur mod_php. Le second concerne le cycle de vie de l'upload progress, exploité sur mod_php et sur FPM, ce dernier via une opération applicative adaptée.
Les failles remontent à loin : Calif fait remonter le chemin le plus ancien qu'il a trouvé à PHP 5.4.0 (Calif).
Oui, si vous exécutez une version antérieure aux versions corrigées derrière un serveur web, quel que soit le mode d'exécution. Le projet PHP vise explicitement toutes les installations qui servent des requêtes web (php.net).
| Branche | Version corrigée | Situation |
| 8.5 | 8.5.12 | Support actif |
| 8.4 | 8.4.27 | Support actif |
| 8.3 | 8.3.36 | Support actif |
| 8.2 | 8.2.35 | Fin de vie le 31 décembre 2026, migration à planifier (php.net) |
| 8.1, 8.0, 7.4 | Aucune version officielle |
Backports source minimaux publiés par l'équipe sécurité de PHP ; backports possibles chez votre distribution ou votre fournisseur LTS (php.net) https://deb.sury.org/ |
| 7.3 et antérieures | Aucune |
Toutes les versions 5.x et 7.x sont listées comme affectées par le CERT-FR (CERT-FR) Fix sur https://deb.sury.org/ |
De nombreux produits commerciaux et open source embarquent PHP sans l'afficher. Le CERT-EU recommande de consulter l'inventaire tenu par le NCSC néerlandais (CERT-EU, NCSC-NL). L'assureur Coalition cite notamment les consoles d'administration de bases de données, de pare-feu, de sauvegarde, de supervision et de téléphonie, ainsi que les panneaux cPanel et Plesk (Coalition). Ces interfaces détiennent souvent des identifiants vers d'autres systèmes : elles sont à traiter en priorité.
Pour les services gérés AWS, le bulletin 2026-143-AWS précise trois points :
La seule correction complète est la mise à jour, suivie du redémarrage de chaque processus PHP. Pour les incidents critiques sur des systèmes exposés, AWS recommande de mesurer les délais de correction en heures, et non plus en jours (AWS).
Listez chaque hôte, conteneur et appliance qui exécute PHP, avec sa version et son mode d'exécution. La version du binaire CLI (php -v) ne dit rien de celle réellement chargée par PHP-FPM ou par mod_php. Interrogez chaque composant et le gestionnaire de paquets :
# Debian / Ubuntu
dpkg -l 'php*' | grep '^ii'
# RHEL / Alma / Rocky / Amazon Linux
rpm -qa 'php*'
# Binaire FPM (nom selon la distribution : php-fpm, php-fpm8.3, ...)
php-fpm8.3 -v
# Apache : un module PHP est-il chargé ?
apachectl -M 2>/dev/null | grep -i php
Commencez par les systèmes exposés à Internet et par les interfaces d'administration.
Un paquet installé ne protège pas tant que les processus qui tournent utilisent l'ancien code. Redémarrez PHP-FPM ou Apache, puis contrôlez à la fois la version installée et la présence des CVE dans le journal des modifications du paquet :
# Debian / Ubuntu (journal local, fonctionne aussi pour les dépôts tiers)
zcat /usr/share/doc/php8.3-fpm/changelog.Debian.gz | grep -m1 -E 'CVE-2026-10961[89]'
# RHEL et dérivés
rpm -q --changelog php-fpm | grep -m1 -E 'CVE-2026-10961[89]'
Si le journal ne cite pas les CVE, la version n'est pas pour autant forcément vulnérable : certains mainteneurs les mentionnent autrement. Dans ce cas, comparez la version du paquet et sa date de construction avec l'annonce de votre fournisseur.
Sur ARM ou avec un dépôt tiers, vérifiez que le paquet installé est bien la version corrigée et non la précédente.
Le projet PHP ne publie pas de version pour ces branches (php.net). Dans l'ordre :
AWS indique qu'aucun correctif n'existe pour CVE-2026-109618 sur les branches en fin de vie (AWS), alors que les backports source ci-dessus couvrent les deux CVE. Faites confirmer par votre fournisseur ce que couvre précisément le paquet que vous installez.
Ces mesures réduisent l'exposition à des chemins d'attaque précis, mais aucune ne rend une installation sûre (php.net). Elles servent à tenir quelques heures, pas à remplacer la mise à jour.
| Mesure | Réduit | Limite |
| session.upload_progress.enabled=0 | 109619, chemin des sessions | Ne couvre pas les autres variantes |
| fatal_error_backtraces=0 (8.5) | 109619, chemin des traces d'erreur fatale | Ce seul chemin |
| memory_limit=-1 non surchargeable | 109618, manque de mémoire contrôlé | Retire le plafond mémoire de PHP ; un échec d'allocation sous-jacent atteint encore le code vulnérable |
| post_max_size bas + limites au frontal | 109618 | Ne bloque pas l'amplification par en-têtes de parties |
| Blocage de multipart/form-data au frontal | Chemin multipart des deux CVE | Casse tout envoi de fichier légitime |
| Règle WAF sur PHP_SESSION_UPLOAD_PROGRESS | 109619, chemin des sessions | Le WAF ne voit pas la mémoire ni la configuration du serveur |
| pm.max_requests=1 | 109619, enchaînement de requêtes sur un même worker | Coût en performance |
Appliquez ces réglages là où ils sont lus avant l'analyse de la requête : php.ini, pool FPM ou configuration du serveur. ini_set() et .user.ini ne conviennent pas (GHSA-6wmf). Redémarrez ensuite tous les workers.
; Pool PHP-FPM (ex. /etc/php/8.3/fpm/pool.d/www.conf)
php_admin_flag[session.upload_progress.enabled] = off
php_admin_value[memory_limit] = -1
php_admin_value[post_max_size] = 8M
; PHP 8.5 uniquement
php_admin_flag[fatal_error_backtraces] = off
# Apache + mod_php (configuration du serveur ou du vhost)
php_admin_flag session.upload_progress.enabled off
php_admin_value memory_limit -1
php_admin_value post_max_size 8M
Pour post_max_size, le projet PHP recommande 8M si l'application n'accepte pas de fichiers et 32M sinon, avec upload_max_filesize inférieur à post_max_size. Vérifiez qu'aucun pool, répertoire ou réglage applicatif ne réintroduit une limite mémoire finie (php.net).
Trois points méritent une attention particulière :
AWS publie des règles AWS WAF à déployer d'abord en mode comptage, puis en blocage une fois validées. Elles bloquent les POST contenant PHP_SESSION_UPLOAD_PROGRESS, les requêtes multipart quand l'application n'en a pas besoin, les corps trop volumineux et les rafales de POST. AWS rappelle qu'un WAF ne voit ni les en-têtes internes de chaque partie, ni la mémoire du worker : c'est un complément, pas une correction (AWS). Le CERT-FR recommande aussi de bloquer les requêtes multipart ou, à défaut, de les surveiller (CERT-FR).
Le 23 octobre, php.net a publié un avis informatif sur une variante distincte, CVE-2026-115560. Il recommande de laisser session.upload_progress.enabled=0 jusqu'à la prochaine version de maintenance (php.net). Le risque est jugé peu probable : il suppose une application qui définit session.serialize_handler à php_binary ou php_serialize, puis le change en php avec ini_set() avant session_start(). Les applications qui ne changent jamais ce réglage à l'exécution peuvent garder la fonctionnalité. Si vous l'aviez déjà désactivée le 21 octobre, rien à faire de plus.
Une installation mise à jour aujourd'hui a pu être compromise avant. AWS recommande de faire partir les investigations au moins du 17 octobre, date de la première tentative connue, et non de la date de divulgation (AWS).
L'état exploité par CVE-2026-109619 vit dans la mémoire des workers (GHSA-6wmf), et un redémarrage l'efface. Si un hôte non corrigé présente des signes suspects, isolez-le et préservez les éléments (mémoire des processus, arborescence des processus, connexions réseau, journaux) avant de mettre à jour et de redémarrer.
AWS recommande de :
Coalition, reprenant les recommandations de Wiz, ajoute plusieurs signaux (Coalition) :
L'attaque se déroule sous l'application, si bien que les journaux applicatifs peuvent ne presque rien montrer. Quelques points de départ :
# Erreurs de manque de mémoire et de délai d'exécution (filtrer ensuite sur la période depuis le 17 octobre)
grep -E 'Allowed memory size of [0-9]+ bytes exhausted|Maximum execution time' /var/log/php*-fpm.log /var/log/apache2/error.log
# Workers FPM terminés anormalement
grep -E 'exited on signal|exited with code' /var/log/php*-fpm.log
# Fichiers PHP modifiés dans la racine web depuis le 17 octobre
find /var/www -type f -name '*.php' -newermt '2026-10-17'
# Tâches planifiées de l'utilisateur web
crontab -l -u www-data
Adaptez chemins et noms d'utilisateur à votre environnement. L'absence de trace n'est pas une preuve d'innocuité : les journaux ont pu être collectés sans les niveaux de gravité utiles, et une défaillance peut survenir avant que PHP n'écrive son message (GHSA-6wmf).
| Adresse IP | Observée le |
| 103.216.220.92 | 17/10/2026 |
| 31.223.184.166 | 21/10/2026 |
| 37.19.200.5 | 21/10/2026 |
| 134.209.159.64 | 21/10/2026 |
| 103.114.163.188 | 21/10/2026 |
| 95.217.98.37 | 21/10/2026 |
Ces adresses appartiennent en partie à des infrastructures d'anonymisation partagées. AWS recommande d'enquêter sur toute occurrence plutôt que de les bloquer (AWS).
Ne testez pas vos serveurs avec une preuve de concept trouvée en ligne. Le mainteneur du dépôt deb.sury.org a analysé une archive diffusée comme exploit fonctionnel. Selon lui, ce n'est pas un exploit validé, elle provoque au mieux un plantage, et elle ne doit pas être exécutée (issue #145).
| Ressource | Type | Pourquoi la consulter |
| Annonce de sécurité php.net | Officielle | Versions corrigées, backports, mesures temporaires |
| Avis informatif php.net du 23 octobre | Officielle | CVE-2026-115560 et upload progress |
| GHSA-w8hw-w9fx-j79w | Officielle | Détail technique de CVE-2026-109618 |
| GHSA-6wmf-4rv5-p3rp | Officielle | Détail technique de CVE-2026-109619, audit des journaux |
| PHP Foundation | Officielle | Historique de la découverte et de la fuite |
| CERT-FR, CERTFR-2026-ALE-014 | Autorité | Alerte de l'ANSSI, mises à jour en continu |
| CERT-EU, avis 2026-018 | Autorité | Synthèse et mesures temporaires |
| Cybermalveillance.gouv.fr | Autorité | Alerte grand public et prestataires de proximité |
| NCSC-NL, php2shell | Autorité | Inventaire des logiciels qui embarquent PHP |
| Calif, php2shell | Chercheurs | Analyse technique par l'équipe à l'origine de la découverte |
| AWS Threat Intelligence | Fournisseur | Exploitation avant divulgation, indicateurs |
| AWS WAF | Fournisseur | Règles WAF commentées et leurs limites |
| Bulletin 2026-143-AWS | Fournisseur | État des services AWS gérés |
| deb.sury.org, issue #145 | Mainteneur | Disponibilité des paquets Debian et Ubuntu du dépôt Sury |
| Censys, tableau d'exposition | Mesure | Évolution des services exposés et du rythme de correction |
| CNIL, notifier une violation | Autorité | Obligations en cas de fuite de données personnelles |
| Date | Modification |
| 23/10/2026 | Publication, intégrant l'avis informatif de php.net du 23 octobre |
La situation évolue vite, notamment l'état de l'exploitation et la disponibilité des paquets selon les architectures. Nous mettrons cet article à jour ; en cas de doute, les avis du projet PHP et du CERT-FR font foi.