testing php2shell detection

Chasse aux Menaces PHP2Shell : Signatures Suricata IDS, Règles Runtime Falco et Guide Auditd

php2shell.run Research Lab •

Chasse aux Menaces PHP2Shell : Signatures Suricata IDS, Règles Runtime Falco et Guide Auditd

<time datetime="2026-10-23">Vérifié le: 23 octobre 2026</time> · Référentiel d'Ingénierie de Détection : Suricata 7.x, Falco 0.38+, Linux Auditd

La neutralisation pérenne d'une vulnérabilité d'exécution de code à distance sans authentification telle que PHP2Shell (CVE-2026-109618 et CVE-2026-109619) exige de renoncer à l'illusion d'une ligne de défense unique. Les équipes de cybersécurité doivent établir un dispositif de Défense en Profondeur (Defense-in-Depth) combinant l'inspection approfondie des flux réseau en périphérie, la surveillance comportementale des processus sur l'hôte et la journalisation forensique immuable au niveau du noyau.

Ce guide opérationnel regroupe un ensemble complet de règles prêtes à l'emploi, validées pour une intégration immédiate au sein des centres opérationnels de sécurité (SOC), systèmes SIEM et plateformes XDR/EDR.


1. Détection Réseau Périmétrique : Signatures Suricata 7.x

Suricata est un moteur de détection et de prévention d'intrusion (IDS/IPS) haute performance capable d'analyser en profondeur les flux HTTP et de décoder les charges complexes encodées en multipart.

Fichier de Règles Suricata (/etc/suricata/rules/php2shell.rules) :

# Règle 1: Détection du vecteur d'exploitation principal Use-After-Free (SID: 10261092)
alert http any any -> $HTTP_SERVERS any ( \
    msg:"ANSSI-IDS Tentative Exploitation PHP2Shell Multipart UAF (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; \
    pcre:"/name=[\"']?PHP_SESSION_UPLOAD_PROGRESS[\"']?[^\r\n]*\r?\n\r?\n[^\r\n]{1,64}/i"; \
    reference:cve,2026-109619; \
    reference:url,https://php2shell.run/; \
    classtype:web-application-attack; \
    sid:10261092; rev:1; \
)

# Règle 2: Détection de rafales anormales de manipulation du tas (Heap Spraying)
alert http any any -> $HTTP_SERVERS any ( \
    msg:"ANSSI-IDS Rafale Anormale de Requetes Upload Progress PHP2Shell"; \
    flow:established,to_server; \
    content:"POST"; http_method; \
    content:"PHP_SESSION_UPLOAD_PROGRESS"; http_client_body; nocase; \
    threshold:type both, track by_src, count 25, seconds 10; \
    classtype:attempted-recon; \
    sid:10261093; rev:1; \
)

Pour vérifier la syntaxe et charger les règles à chaud sans interrompre le trafic :

sudo suricata -T -c /etc/suricata/suricata.yaml
sudo suricatasc -c reload-rules

2. Détection Dynamique sur l'Hôte : Règles Falco en Espace Utilisateur

Lorsque le trafic réseau est chiffré de bout en bout en TLS (sans déchiffrement SSL au niveau du pare-feu) ou si l'attaquant emploie des méthodes de fragmentation réseau, la détection doit impérativement s'opérer au niveau du système d'exploitation hôte.

L'outil open-source Falco intercepte les appels système en temps réel grâce aux modules de noyau ou aux sondes eBPF.

Règle Falco (/etc/falco/rules.d/php2shell_process_execution.yaml) :

- rule: Exécution Illégitime de Shell par un Travailleur PHP-FPM (PHP2Shell Post-Exploit)
  desc: Détecte le lancement 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, csh, tcsh, python, python3, perl, nc, netcat, ncat, curl, wget) or
     proc.cmdline contains "bash -i" or
     proc.cmdline contains "/dev/tcp/" or
     proc.cmdline contains "base64 -d")
  output: >
    ALERTE CRITIQUE : Compromission PHP2Shell suspectée ! Un processus web a engendré un shell interactif
    (utilisateur=%user.name commande=%proc.cmdline parent=%proc.pname pid=%proc.pid fichier=%fd.name)
  priority: CRITICAL
  tags: [mitre_execution, cve_2026_109619, php2shell]

Redémarrage et suivi des alertes en direct :

sudo systemctl restart falco
sudo journalctl -u falco -f | grep -i "PHP2Shell"

3. Enregistrement Forensique Inaltérable : Auditd Linux

Pour les enquêtes post-incident et l'établissement d'une chronologie légale non réfutable, le démon Auditd permet d'auditer de façon exhaustive chaque invocation de l'appel système execve émise sous les identifiants système du serveur web (www-data, nginx ou apache).

Configuration des Règles Auditd (/etc/audit/rules.d/php2shell-audit.rules) :

## Enregistrer tout lancement de binaire sous le compte www-data (UID 33)
-a always,exit -F arch=b64 -S execve -F euid=33 -k php_execve_audit
-a always,exit -F arch=b32 -S execve -F euid=33 -k php_execve_audit

## Surveiller la création de binaires dans les zones de mémoire partagée
-w /dev/shm -p wa -k php_shm_tampering
-w /tmp -p wa -k php_tmp_tampering

Application des règles :

sudo augenrules --load
sudo auditctl -l | grep "php_execve"

Extraction des commandes système anormales exécutées au cours des dernières 24 heures :

sudo ausearch -k php_execve_audit --start today -m EXECVE

4. Règle Standardisée Sigma pour SIEM d'Entreprise

Pour faciliter l'intégration au sein des solutions SIEM centralisées (Elasticsearch, Splunk, Microsoft Sentinel), la règle standardisée au format Sigma permet de traduire la logique de détection vers n'importe quel langage de requête cible :

title: Invocations Anormales de Shell depuis un Processus PHP-FPM
id: 8f9b1c23-2026-1096-1902-123456789abc
status: production
description: Détecte la création d'interpréteurs de commandes issus d'arborescences de processus web PHP
author: Équipe de Réponse aux Incidents CERT
date: 2026-10-23
references:
    - https://php2shell.run/
    - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-109619
logsource:
    category: process_creation
    product: linux
detection:
    parent_process:
        Image|endswith:
            - '/php-fpm'
            - '/php-fpm8.2'
            - '/php-fpm8.3'
            - '/php-fpm8.4'
            - '/php-fpm8.5'
            - '/apache2'
            - '/httpd'
    child_process:
        Image|endswith:
            - '/bin/sh'
            - '/bin/bash'
            - '/bin/dash'
            - '/usr/bin/python'
            - '/usr/bin/python3'
            - '/usr/bin/curl'
            - '/usr/bin/wget'
            - '/bin/nc'
    condition: parent_process and child_process
fields:
    - Image
    - CommandLine
    - ParentImage
    - User
level: critical
tags:
    - attack.execution
    - attack.t1059.004

5. Chasse Proactive aux Menaces avec OSQuery

Les analystes de sécurité exploitant la plateforme OSQuery peuvent exécuter des requêtes interactives pour débusquer les anomalies de processus ou les sockets réseau illégitimes établis par l'interpréteur PHP :

-- Détecter les processus interactifs nés d'un serveur PHP ou Apache
SELECT p.pid, p.name, p.path, p.cmdline, p.parent, parent.name AS parent_name
FROM processes p
JOIN processes parent ON p.parent = parent.pid
WHERE parent.name IN ('php-fpm', 'apache2', 'httpd')
  AND p.name IN ('sh', 'bash', 'dash', 'python', 'perl', 'curl', 'wget', 'nc');

-- Identifier les sockets sortants anormaux initiés par PHP (hors bases de données habituelles)
SELECT pos.pid, p.name, pos.remote_address, pos.remote_port, pos.state
FROM process_open_sockets pos
JOIN processes p ON pos.pid = p.pid
WHERE p.name LIKE 'php%' AND pos.remote_port NOT IN (80, 443, 3306, 5432, 6379);

6. Protocole de Réponse à Incident pour les Analystes SOC

En cas de déclenchement d'une alerte confirmée de spawn de shell depuis PHP-FPM :

  1. Isolement Immédiat : Coupez la piscine de travailleurs concernée avec systemctl kill -s SIGKILL php8.3-fpm.
  2. Blocage Egress : Bloquez tout flux réseau sortant pour www-data via iptables : iptables -I OUTPUT 1 -m owner --uid-owner www-data -j DROP.
  3. Nettoyage Forensique : Inspectez /var/spool/cron/crontabs/www-data et les répertoires /tmp et /dev/shm.
  4. Application du Correctif : Désactivez session.upload_progress.enabled = Off dans php.ini et mettez à niveau les paquets vers les versions 8.5.12, 8.4.27, 8.3.36 ou 8.2.35.

7. Règles YARA pour l'Analyse Forensique de la Mémoire Vive

Pour les équipes de réponse à incident disposant d'outils de capture de mémoire vive (comme LiME ou Volatility), la règle YARA suivante permet d'identifier la présence d'artefacts d'exploitation PHP2Shell au sein des pages de mémoire de PHP-FPM :

rule PHP2Shell_Memory_Artifacts {
    meta:
        description = "Détecte les artefacts de mémoire vive associés à l'exploitation de PHP2Shell (CVE-2026-109618 / 109619)"
        author = "ANSSI Cyber Threat Intelligence"
        date = "2026-10-23"
        score = 85
    strings:
        $multipart = "Content-Disposition: form-data; name=\"PHP_SESSION_UPLOAD_PROGRESS\"" ascii wide nocase
        $shell1 = "/bin/sh" ascii
        $shell2 = "/bin/bash" ascii
        $reverse1 = "/dev/tcp/" ascii
        $reverse2 = "bash -i" ascii
    condition:
        $multipart and (any of ($shell*) or any of ($reverse*))
}

En scannant les processus vivants avec yara -s php2shell.yar $(pgrep -f "php-fpm"), les analystes peuvent confirmer instantanément si un travailleur héberge en mémoire une chaîne d'exécution illégitime.


8. Corrélation SIEM et Automatisation des Réponses EDR

Pour les centres de cyberdéfense (SOC), établissez une corrélation entre les journaux de trafic du pare-feu et les événements d'audit hôte :

  • Condition de Déclenchement : Réception d'une requête HTTP POST contenant la chaîne PHP_SESSION_UPLOAD_PROGRESS suivie, dans un intervalle de 5 secondes, d'une exécution de binaire système (/bin/sh, /bin/bash, /usr/bin/curl) par le processus php-fpm.
  • Réponse Automatique : Isolement réseau immédiat de la machine compromise via l'agent EDR et réinitialisation forcée du conteneur.