Se connecter
  1. Accueil
  2. Blog
  3. Développement

PHP2Shell : la faille critique de PHP qu'il faut corriger maintenant

CVE-2026-109618 et CVE-2026-109619 permettent l'exécution de code à distance sans authentification sur PHP. Versions touchées, correctifs et mesures d'urgence.

L'équipe SageCodersPublié le 7 min de lecture

Le 21 octobre 2026, l'équipe PHP a publié en urgence des correctifs pour deux vulnérabilités critiques regroupées sous le nom PHP2Shell : CVE-2026-109618 et CVE-2026-109619. Notées 9,2 sur 10 (CVSS v4.0), elles permettent à un attaquant non authentifié d'exécuter du code à distance sur un serveur web qui fait tourner PHP.

Si vous hébergez un site WordPress, Drupal, Joomla, une application Laravel, Symfony ou n'importe quel projet PHP exposé sur Internet, cet article vous concerne directement.

En bref

  • Quoi : deux failles de sécurité mémoire dans le moteur de PHP lui-même, pas dans votre code.
  • Impact : exécution de code à distance (RCE) sans authentification, et lecture possible de la mémoire des workers PHP (mots de passe, clés API, jetons).
  • Qui est touché : pratiquement toutes les versions de PHP qui servent des requêtes web avant les versions corrigées, y compris les branches en fin de vie.
  • Que faire : mettre à jour vers PHP 8.5.12, 8.4.27, 8.3.36 ou 8.2.35, puis redémarrer tous les processus PHP.

Comment la faille a été découverte

Les failles ont été trouvées par Wiz Research, en collaboration avec OpenAI, Calif et Quarkslab. Le premier bug a été identifié le 19 août 2026 puis signalé à PHP le 24 août. La divulgation coordonnée était prévue pour le 22 octobre, mais des détails ont fuité le 20 octobre. PHP a alors publié un avis préalable et avancé la sortie des correctifs au 21 octobre à 14h00 UTC. Le CERT-EU a publié son propre avis (2026-018) le même jour.

Ce qui se passe techniquement

Le problème se situe dans la façon dont PHP interrompt une requête qui échoue brutalement.

Quand PHP rencontre une erreur de mémoire insuffisante ou une erreur fatale, il abandonne la requête en cours via un saut (longjmp()). Dans certains contextes, cet abandon intervient au mauvais moment : après que PHP a publié un pointeur ou réservé un emplacement dans un cache (OPcache par exemple), mais avant le nettoyage.

Résultat : un état incohérent reste en mémoire, et la requête suivante traitée par le même worker peut tomber dessus.

  • CVE-2026-109618 : corruption liée à l'épuisement de la mémoire. La préparation de la requête reste à moitié faite, et le nettoyage considère ces données cassées comme valides.
  • CVE-2026-109619 : état global périmé. Un état lié à une requête survit à la libération de sa mémoire et peut être réutilisé par une requête ultérieure.

Les deux CVE sont classées CWE-824 (accès à un pointeur non initialisé). Selon Wiz, quatre bugs distincts se cachent derrière ces deux identifiants. Le correctif de PHP traite le problème à la racine, ce qui couvre aussi d'autres variantes.

Point important : l'exploitation peut se déclencher avant même que votre code applicatif ne s'exécute. Un code propre et bien sécurisé ne vous protège donc pas.

Quelles configurations sont exposées

ConfigurationNiveau de risque
Apache + mod_phpLe plus élevé : exploit démontré avant toute exécution du code applicatif
PHP-FPM (Nginx, Apache)Exposé
php-cgiExposé
FrankenPHPExposé
LiteSpeedExposé

Wiz a démontré une exécution de code à distance sur des installations par défaut de WordPress, Drupal et Joomla.

Versions concernées et versions corrigées

BrancheVulnérable avantVersion corrigée
PHP 8.58.5.128.5.12
PHP 8.48.4.278.4.27
PHP 8.38.3.368.3.36
PHP 8.28.2.358.2.35
PHP 8.1, 8.0, 7.4ToutesPas de release officielle, seulement des backports minimaux du code source
PHP 7.3 et antérieuresToutesAucun correctif

Les versions touchées remonteraient jusqu'à PHP 5.4. On estime à environ 884 000 le nombre de serveurs exposés sur Internet qui annoncent encore PHP 8.1 ou plus ancien.

À noter : les distributions Linux (Debian, Ubuntu, RHEL, Alpine...) et les hébergeurs peuvent intégrer le correctif sans changer le numéro de version affiché. Vérifiez les bulletins de sécurité de votre distribution plutôt que de vous fier uniquement à php -v.

La faille est-elle déjà exploitée ?

Au 21 octobre, PHP ne signalait aucune exploitation active et la CISA n'avait pas encore ajouté les CVE à son catalogue KEV. Depuis, Aikido et Patchstack ont rapporté des premiers cas d'exploitation réelle.

Pour rappel, lors de la faille PHP CVE-2024-4577, les premières tentatives d'attaque étaient apparues moins de 24 heures après la divulgation. Considérez que la fenêtre de tir est déjà ouverte.

Que faire tout de suite

1. Inventorier

Listez toutes vos installations PHP : serveurs, conteneurs Docker, images de base, environnements de staging, panneaux d'hébergement, outils internes. N'oubliez pas les PHP embarqués dans des appliances ou des outils tiers.

php -v
php -i | grep -i "server api"
docker images | grep -i php

2. Mettre à jour

C'est la seule correction complète.

# Debian / Ubuntu
sudo apt update && sudo apt upgrade php*

# Alpine
apk update && apk upgrade php*

Pour Docker, reconstruisez vos images à partir d'une image de base corrigée (php:8.4.27-fpm, php:8.3.36-apache, etc.) puis redéployez.

Ensuite, redémarrez tous les workers PHP (php-fpm, Apache, FrankenPHP...). Un paquet mis à jour sans redémarrage ne protège rien.

3. Si vous ne pouvez pas mettre à jour immédiatement

Ces mesures réduisent l'exposition sans la supprimer. Testez-les avant de les appliquer en production.

Dans php.ini :

session.upload_progress.enabled = 0
opcache.enable = 0              ; impact sur les performances
fatal_error_backtraces = 0      ; PHP 8.5 uniquement
post_max_size = 8M              ; 32M si vous gérez des uploads

Côté serveur et infrastructure :

  • Limitez la taille et le nombre de champs des requêtes au niveau de Nginx, Apache ou du reverse proxy.
  • Utilisez des limites de conteneur ou de cgroup pour la mémoire.
  • Activez une règle WAF « virtual patch » si votre fournisseur en propose une (Cloudflare, Imperva, etc.), en sachant que c'est une protection temporaire.
  • Isolez ou placez derrière un VPN les applications exposées tant qu'elles ne sont pas corrigées, comme le recommande le CERT-EU.

4. Pour les versions en fin de vie (8.1 et antérieures)

Il n'y a pas de solution simple : migrez. En attendant, sortez ces applications d'Internet ou mettez-les derrière un VPN et un WAF.

Détecter une tentative d'attaque

Surveillez dans vos logs :

  • des requêtes multipart inhabituellement volumineuses ou avec un grand nombre de champs, suivies d'erreurs Allowed memory size exhausted ;
  • des erreurs HTTP 500 répétées ;
  • des cookies PHPSESSID surdimensionnés ou malformés ;
  • des processus php-fpm, php-cgi, httpd ou apache2 qui lancent un shell, un interpréteur ou curl/wget.

Une erreur isolée ne prouve rien. C'est la combinaison de ces signaux qui doit alerter.

En cas de compromission suspectée

  1. Isolez le serveur du réseau.
  2. Conservez les logs du serveur web et de PHP.
  3. Recherchez des web shells et des fichiers récents dans le répertoire web.
  4. Vérifiez les tâches cron, les comptes utilisateurs et les connexions sortantes inhabituelles.
  5. Renouvelez tous les secrets accessibles par PHP (mots de passe de base de données, clés API, APP_KEY, jetons OAuth), puisque la mémoire des workers a pu être lue.

Conclusion

PHP2Shell fait partie des failles les plus sérieuses qu'ait connues l'écosystème PHP ces dernières années : elle est exploitable à distance, sans authentification, touche le moteur lui-même et concerne une énorme partie du web. La priorité est simple : mettez à jour, redémarrez, vérifiez.

Chez SageCoders, nous accompagnons les entreprises dans l'audit et la mise à jour de leurs infrastructures PHP. Si vous avez besoin d'aide pour évaluer votre exposition ou migrer une application vieillissante, contactez-nous.

Sources

L'équipe SageCoders

Applications, logiciels et agents IA conçus à Abidjan pour les entreprises de Côte d'Ivoire et d'Afrique.

Continuer la lecture

À lire aussi

Tous les articles →

Un projet en tête ? Notre assistant vous répond tout de suite, avec nos vrais prix et délais.

Estimer le prix