vulnerabilities php2shell vulnérabilité

Avis de Sécurité Critique PHP2Shell: Analyse des Menaces CVE-2026-109618 & CVE-2026-109619 et Matrice d'Impact

php2shell.run Research Lab •

Avis de Sécurité Critique PHP2Shell: Analyse des Menaces CVE-2026-109618 & CVE-2026-109619 et Matrice d'Impact

<time datetime="2026-10-23">Vérifié le: 23 octobre 2026</time> · Références officielles: php.net Security Advisories, ANSSI, GitHub Security Advisories (GHSA-w8hw-w9fx-j79w / GHSA-6wmf-4rv5-p3rp)

Le 21 octobre 2026, l'équipe de sécurité du projet PHP et les centres nationaux de réponse aux incidents cyber ont rendu publiques deux vulnérabilités critiques d'exécution de code à distance sans authentification (RCE), regroupées sous l'appellation PHP2Shell (CVE-2026-109618 et CVE-2026-109619).

Attribuées d'un score de sévérité de base CVSS v4.0 de 9.2 (Critique), ces failles permettent à un attaquant distant non authentifié d'exécuter des commandes système arbitraires avec les privilèges du processus du serveur web ou du travailleur PHP-FPM sous-jacent (www-data, nginx, apache). La vulnérabilité ne provient pas du code applicatif (WordPress, Drupal, PrestaShop, Laravel ou Symfony), mais directement de la couche d'analyse des flux multipart en langage C au sein du moteur PHP (ext/session/session.c et main/rfc1867.c).


1. Matrice des Caractéristiques et Comparatif Technique

CaractéristiqueCVE-2026-109618CVE-2026-109619
Classe de VulnérabilitéCorruption d'état mémoire par Out-Of-MemoryÉtat global résiduel / Use-After-Free (UAF)
Score CVSS v4.09.2 (Critique: AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H)9.2 (Critique: AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H)
Niveau d'AuthentificationAucun (Non Authentifié)Aucun (Non Authentifié)
Exposition par DéfautActivé par défaut (session.upload_progress.enabled = On)Activé par défaut (session.upload_progress.enabled = On)
Déclenchement TemporelPhase de parsing du corps HTTP (avant l'exécution du code PHP)Cycle de parsing multipart et destruction de session
Environnements AffectésPHP-FPM, Apache mod_php, FrankenPHP, LiteSpeed, Nginx UnitPHP-FPM, Apache mod_php, FrankenPHP, LiteSpeed, Nginx Unit
Versions VulnérablesPHP 5.4 jusqu'à 8.5 inclusivementPHP 5.4 jusqu'à 8.5 inclusivement

⚠️ Précision Majeure sur le Périmètre des Versions : Certains rapports non officiels indiquent de manière erronée que la faille est restreinte aux versions PHP 5.x–8.4. Cette information est inexacte et dangereuse. La branche PHP 8.5 est également vulnérable sur toutes les versions antérieures au build 8.5.12. Depuis l'introduction de cette directive dans PHP 5.4, session.upload_progress.enabled a toujours été activée par défaut (On), ce qui expose la quasi-totalité des serveurs de production n'ayant pas explicitement désactivé cette fonctionnalité.


2. Cycle de Vie de l'Attaque et Contournement des WAF

La dangerosité extrême de PHP2Shell réside dans le moment précis où s'exécute le code C vulnérable : au cœur de l'analyse du flux HTTP multipart par la SAPI de PHP, avant même qu'une seule ligne du script demandé ne soit interprétée.

Le diagramme ci-dessous illustre comment les défenses traditionnelles des applications web sont physiquement neutralisées :

               [ RÉCEPTION D'UNE REQUÊTE HTTP POST DISTANTE ]
       (N'importe quelle URL valide ou inexistante: /index.php, /login, /404)
                              │
                              ▼
  ┌─────────────────────────────────────────────────────────────┐
  │ Couche SAPI du Moteur PHP (Cœur en Langage C)               │
  │  - Analyse des en-têtes et de Content-Type: multipart/form-data │
  └───────────────────────────┬─────────────────────────────────┘
                              │
                              ▼
  ┌─────────────────────────────────────────────────────────────┐
  │ ext/session/session.c :: php_session_rfc1867_callback()     │
  │  - Détection du paramètre 'PHP_SESSION_UPLOAD_PROGRESS'     │
  │  - Mise en cache du pointeur brut : cached_post_bytes       │
  │  - [DÉFAUT CRITIQUE]: OOM ou interruption par zend_bailout   │
  │  - Mémoire libérée mais pointeur conservé -> DANGLING POINTER│
  └───────────────────────────┬─────────────────────────────────┘
                              │
             ┌────────────────┴────────────────┐
             ▼                                 ▼
    [ Requête Utilisateur Normale ]   [ Exploitation PHP2Shell ]
    - Suivi de progression en session  - Épuisement calculé des bins ZMM
    - Nettoyage propre de la mémoire   - Injection d'un faux zval de 16 octets
                                       - Redirection vers zif_system()
                                       - Shell Système Obtenu Immédiatement

3. Versions Sécurisées et Correctifs Officiels

L'équipe officielle de développement de PHP a publié des versions de maintenance sécurisées pour l'ensemble des branches sous support actif ou support de sécurité :

Branche PHPVersion Minimale Sécurisée (Correctif Officiel)Statut et Recommandations Opérationnelles
PHP 8.58.5.12 ou supérieureMise à niveau d'urgence via les dépôts ou compilation
PHP 8.48.4.27 ou supérieureMise à niveau d'urgence
PHP 8.38.3.36 ou supérieureMise à niveau d'urgence
PHP 8.28.2.35 ou supérieureMise à niveau d'urgence
PHP 8.1 / 8.0 / 7.4 / 5.xAucune version officielle upstream (EOL)Branches obsolètes. Nécessite l'application de correctifs rétroportés (backports) fournis par les distributions (Debian LTS, Ubuntu Pro, CloudLinux) ou l'application de la mesure d'atténuation d'urgence

4. Procédure de Diagnostic sur Serveur Linux

Pour évaluer la vulnérabilité de votre parc de serveurs face à PHP2Shell, exécutez les commandes suivantes dans votre terminal administratif.

Étape 1 : Vérification de la version active de PHP

php -v | head -n 1

Si la version affichée est inférieure au seuil minimal (par exemple PHP 8.3.18), votre runtime est directement exposé.

Étape 2 : Vérification du statut de la directive de session

php -i | grep -E "session.upload_progress"

Sortie caractéristique d'un environnement vulnérable :

session.upload_progress.cleanup => On => On
session.upload_progress.enabled => On => On
session.upload_progress.freq => 1% => 1%
session.upload_progress.min_freq => 1 => 1
session.upload_progress.name => PHP_SESSION_UPLOAD_PROGRESS => PHP_SESSION_UPLOAD_PROGRESS
session.upload_progress.prefix => upload_progress_ => upload_progress_

La présence de session.upload_progress.enabled => On confirme que le vecteur d'attaque est actif.

Étape 3 : Vérification des journaux de paquets Debian / Ubuntu

zgrep -E "CVE-2026-109618|CVE-2026-109619" /usr/share/doc/php*/changelog.Debian.gz

Si des entrées signées par les mainteneurs mentionnent ces CVE, les correctifs rétroportés ont été installés par votre gestionnaire de paquets apt.


5. Mesure d'Atténuation Immédiate sans Interruption de Service (Zero-Downtime)

Si le déploiement d'une mise à jour logicielle nécessite des tests préalables de régression, vous pouvez neutraliser immédiatement la surface d'attaque sans couper les connexions en cours.

Étape A : Désactivation dans php.ini

Ouvrez les fichiers de configuration de PHP (notamment /etc/php/8.3/fpm/php.ini et /etc/php/8.3/cli/php.ini) :

; Atténuation d'urgence contre PHP2Shell (CVE-2026-109618 & CVE-2026-109619)
session.upload_progress.enabled = Off
session.upload_progress.cleanup = On

Ou déployez un fichier de configuration prioritaire drop-in :

echo -e "; Correctif PHP2Shell\nsession.upload_progress.enabled = Off" | sudo tee /etc/php/8.3/mods-available/php2shell.ini
sudo phpenmod php2shell

Étape B : Rechargement gracieux du démon

N'utilisez pas l'instruction restart qui interrompt brutalement les requêtes HTTP en transit. Utilisez reload :

# Pour Debian / Ubuntu
sudo systemctl reload php8.3-fpm

# Pour RHEL / Rocky Linux / AlmaLinux
sudo systemctl reload php-fpm

# Vérification de la syntaxe
sudo php-fpm8.3 -t

6. Règles de Détection Réseau et Runtime (Suricata & Falco)

Pour surveiller et bloquer les tentatives d'exploitation au niveau du périmètre réseau et de l'hôte :

Signature Suricata 7.x (SID: 10261092) :

alert http any any -> $HTTP_SERVERS any ( \
    msg:"ANSSI-ALERT Tentative Exploitation PHP2Shell Multipart Session (CVE-2026-109619)"; \
    flow:established,to_server; \
    content:"POST"; http_method; \
    content:"multipart/form-data"; http_header; nocase; \
    content:"PHP_SESSION_UPLOAD_PROGRESS"; http_client_body; nocase; \
    classtype:web-application-attack; \
    sid:10261092; rev:1; \
)

Règle Falco de Détection de Processus :

- rule: Spawn Anormal de Shell par un Travailleur PHP-FPM
  desc: Détecte l'exécution d'un interpréteur de commandes par un processus web
  condition: >
    spawned_process and
    proc.pname in (php-fpm, php-fpm8.2, php-fpm8.3, php-fpm8.4, php-fpm8.5, apache2, httpd) and
    proc.name in (sh, bash, dash, zsh, nc, netcat, python, perl, curl, wget)
  output: >
    ALERTE CRITIQUE: Tentative PHP2Shell confirmée! Processus web a engendré un shell 
    (utilisateur=%user.name commande=%proc.cmdline pid=%proc.pid)
  priority: CRITICAL
  tags: [cve_2026_109619, rce, php2shell]

7. Conclusion et Recommandations Stratégiques

L'incident PHP2Shell met en lumière la nécessité d'une politique de sécurité en profondeur pour les environnements PHP modernes. La désactivation de session.upload_progress doit être intégrée dans les standards de durcissement (Hardening Baseline) de tous les serveurs, et le déclassement des versions obsolètes (PHP 7.4 et 8.0) doit être accéléré au sein de chaque organisation.