Outils de détection, d'atténuation et de rétro-ingénierie pour CVE-2026-41940 (SessionScribe) : la vulnérabilité de falsification de session non authentifiée cPanel/WHM divulguée le 28/04/2026. Shim d'atténuation active en profondeur, pack de règles ModSec, sonde distante, scanner IOC sur l'hôte et collecteur de snapshots RE par niveau. GPL v2.
RCE critique non authentifié dans cPanel & WHM. Quatre requêtes HTTP forgent une session root via une injection CRLF dans le champ mot de passe d'une session de pré-authentification. Aucune authentification, aucune précondition, tous les tiers supportés affectés. Divulgué le 2026-04-28 par Sina Kheirkhah / watchTowr Labs.
Démarrage rapide · ioc-scan · mitigate · remote-probe · Versions affectées · Ordre de priorité
[!IMPORTANT] Les tiers 112, 114, 116, 120, 122, 128 n'ont pas de correctif éditeur. Chaque version sur ces tiers est vulnérable ; la mise à niveau ou la migration est la seule solution durable. En attendant : pare-feu TCP/2082, 2083, 2086, 2087, 2095, 2096 vers les CIDRs de gestion (
mitigate.sh --applyle fait) et protéger la surface restante avec le pack de règles ModSec.
Trois one-liners, dans l'ordre de priorité de l'opérateur :```bash
curl -fsSL https://raw.githubusercontent.com/rfxn/cpanel-sessionscribe/main/sessionscribe-ioc-scan.sh | bash
curl -fsSL https://raw.githubusercontent.com/rfxn/cpanel-sessionscribe/main/sessionscribe-mitigate.sh | bash -s -- --apply
curl -fsSL https://raw.githubusercontent.com/rfxn/cpanel-sessionscribe/main/sessionscribe-remote-probe.sh | bash -s -- --target HOST
Les codes de sortie sont conçus pour l'automatisation des flottes : `ioc-scan` renvoie `4` en cas de COMPROMIS, `1` en cas de VULNÉRABLE ; `mitigate` renvoie `0` (propre) / `1` (appliqué) / `2` (manuel) / `3` (erreur outil) ; `remote-probe` renvoie `2` si une cible est VULN.
---
## Outils
Par ordre de priorité opérationnelle. Chaque artefact produit une sortie structurée
(`--json` / `--jsonl` / `--csv`) indexée sur `host`, `os`, `cpanel_version`,
`ts` pour le regroupement de flotte.
| Outil | Rôle | Lieu d'exécution |
|---|---|---|
| **[`sessionscribe-ioc-scan.sh`](#sessionscribe-ioc-scansh---ioc-ladder--kill-chain)** | Triage de premier ordre. Échelle IOC, verdicts état-code + état-hôte, reconstruction de la chaîne de compromission, bundle IR. | sur l'hôte cPanel |
| **[`sessionscribe-mitigate.sh`](#sessionscribe-mitigatesh---mitigation-orchestrator)** | Fermer la fenêtre. Atténuation par phases : vérification des correctifs, pare-feu, proxysub, ModSec. | sur l'hôte cPanel |
| **[`sessionscribe-remote-probe.sh`](#sessionscribe-remote-probesh---non-destructive-fleet-probe)** | Collatéral de support. Sondage non destructif en 4 étapes → VULN/SAFE par hôte. | partout où `curl` est disponible |
| [`modsec-sessionscribe.conf`](#supporting-collateral) | Paquet de règles ModSec déployé par `mitigate`. | serveur frontal Apache |
| [`sessionscribe-revsnap.sh`](#supporting-collateral) | Collecteur d'instantanés RE par niveau pour le diffing binaire. | sur l'hôte cPanel, autour de `upcp` |
GPL v2. Tous les artefacts sont prêts pour `curl` via les URLs brutes ci-dessus.
---
## `sessionscribe-ioc-scan.sh` - Échelle IOC + chaîne de compromission
**Exécutez-le en premier.** Détection uniquement par défaut (rapide, adapté aux flottes) ;
ajoutez `--full` pour exécuter les phases forensiques en ligne (chronologie défensive, ingestion offensive,
réconciliation, rendu de la chaîne de compromission, bundle IR).```bash
# fast triage (detection only)
curl -fsSL https://raw.githubusercontent.com/rfxn/cpanel-sessionscribe/main/sessionscribe-ioc-scan.sh | bash
# full kill-chain reconstruction inline
curl -fsSL https://raw.githubusercontent.com/rfxn/cpanel-sessionscribe/main/sessionscribe-ioc-scan.sh | bash -s -- --full
# full + ship IR bundle to intake
curl -fsSL https://raw.githubusercontent.com/rfxn/cpanel-sessionscribe/main/sessionscribe-ioc-scan.sh | bash -s -- --full --upload
# JSONL for SIEM ingest
curl -fsSL https://raw.githubusercontent.com/rfxn/cpanel-sessionscribe/main/sessionscribe-ioc-scan.sh | bash -s -- --jsonl --quiet > host.jsonl
# host IOCs only - periodic post-patch sweep, last 7 days
curl -fsSL https://raw.githubusercontent.com/rfxn/cpanel-sessionscribe/main/sessionscribe-ioc-scan.sh | bash -s -- --ioc-only --since 7
# replay forensic phases against a saved envelope (no re-scan)
curl -fsSL https://raw.githubusercontent.com/rfxn/cpanel-sessionscribe/main/sessionscribe-ioc-scan.sh | bash -s -- --replay /var/cpanel/sessionscribe-ioc/<run_id>.json
Deux axes rapportent indépendamment. code_verdict (PATCHED /
VULNERABLE / INCONCLUSIVE) vient de la version, des motifs du source Perl,
et de l'empreinte du binaire cpsrvd. host_verdict (CLEAN /
SUSPICIOUS / COMPROMISED) vient de l'échelle d'IOC des fichiers de session,
de l'analyse des journaux d'accès, et des sondes de destruction Patterns A–G.
Un hôte patché peut toujours sortir avec le code 4 si une exploitation
antérieure a laissé des IOCs sur le disque.
| Sortie | État du code | État de l'hôte | Action de triage |
|---|---|---|---|
| 0 | CLEAN/PATCHED | CLEAN | aucun |
| 1 | VULNERABLE | (quelconque) | patcher cpsrvd |
| 2 | INCONCLUSIVE | (quelconque) | révision manuelle de l'état du code (aussi : erreur d'outil) |
| 3 | (quelconque) | SUSPICIOUS | examiner les journaux de session/d'accès |
| 4 | (quelconque) | COMPROMISED | IR complet ; bundle + upload |
Les sessions marquées avec nxesec_canary_<nonce> (laissées par la sonde
distante) sont classées comme PROBE_ARTIFACT et ne sont pas escaladées vers
COMPROMISED.
--full compile chaque IOC par rapport aux activations de défense et classifie
chacun comme PRE-DEFENSE, POST-DEFENSE, POST-PARTIAL, ou
UNDEFENDED, puis résume avec un verdict et un titre de retard de défense.
PRE-DEFENSE = l'hôte était ouvert à l'exploit lorsque l'indicateur est arrivé ;
POST-DEFENSE = dégâts collatéraux ou bruit de pré-atténuation.```
+-- CVE-2026-41940 / IC-5790 --------------------------------------------
| host cpanel.example.com ()
| cpanel unknown os unknown
| verdict COMPROMISED score 315 ioc-scan v2.5.0
| defenses patch x absent modsec + up csf + clean mitigate + ran
+------------------------------------------------------------------------