🔍 Contexte
Publié le 27 octobre 2026 sur GitHub Gist, ce document est un guide d’ingénierie de détection pour CVE-2026-111497 (alias Node2Shell / Broccoli), une vulnérabilité d’écriture hors limites (OOB write) dans le décodeur Brotli (CWE-787 + CWE-252, CVSS v4.0 : 9.2). L’article couvre la reproduction et la détection, non la découverte de la vulnérabilité.
🐛 Vulnérabilité
- Produits affectés : Brotli 1.0.3–1.2.0 (bibliothèque upstream), ainsi que les copies embarquées dans Node.js, Python, Bun, Envoy, derrière des proxies nginx/Apache/CDN
- Mécanisme : le décodeur confond une entrée malformée avec une entrée incomplète, remplit un buffer d’état de 8 octets au-delà de sa limite et corrompt l’état adjacent
- Statut d’exploitation : CISA SSVC (au 23/10/2026) = Exploitation = None ; CVE absent du KEV
- Payload de test vérifié : 23 068 706 octets, SHA256
15273d4e…
🛠️ Versions corrigées
- Brotli : 1.0.10 / 1.1.1 / 1.2.1
- Node.js : 22.23.4 / 24.22.1 / 26.12.1 (lignes EOL 25, 23, 21, 20 et antérieures : pas de correctif)
- Python Brotli ≥ 1.2.1, brotlicffi ≥ 1.2.1.0
- Bun ≥ 1.4.4
- Envoy/Istio : selon le fournisseur
📋 Règles de détection fournies
Sigma (logs applicatifs)
| Règle | ID | Statut |
|---|---|---|
| brotli-block-switch-probe | d399f74f | Vérifié, non déployé |
| python-decoder-unhealthy | 39cd92fe | Vérifié, non déployé |
| node-zbuf-eof | 71830d89 | Vérifié, FP connus (TRIAGE) |
| python-decoder-failed | 090042ad | Vérifié, générique (TRIAGE) |
| node-eof-near-zbuf (corrélation temporelle) | 999a07f6 | Vérifié, TRIAGE |
| urllib3-decode-failure | 4c8d283a | Syntaxe vérifiée |
Suricata
- 2026114971 : tripwire corps de requête br (HTTP/1.1 + HTTP/2)
- 2026114972/73 : anomalie egress (direction corrigée)
ModSecurity
- 2026114975 : corps de requête br (moteur v3, 7/7 fixtures)
Falco
cve111497_falco.yaml: crash→exec / memfd / egress — non compilé, validation requise
⚠️ Points d’attention opérationnels
process.versions.brotlirapporte toujours1.2.0sur Node.js 24.22.1 patché — ne pas utiliser pour l’inventaire- Les erreurs décodeur atterrissent dans les logs applicatifs sans IP client ; les IPs sont dans les logs proxy — jointure nécessaire sur request ID ou timestamp+source
- Un exploit armé peut provoquer un SIGSEGV avant tout flush de log — capturer stdout/stderr au niveau runtime (docker/k8s log driver, journald)
- Aucune règle n’est encore vérifiée en production réelle
📌 Type d’article
Guide d’ingénierie de détection technique (analyse technique + recommandations de déploiement de règles), destiné aux équipes SOC et detection engineering pour opérationnaliser la détection de CVE-2026-111497.
🧠 TTPs et IOCs détectés
TTP
- T1190 — Exploit Public-Facing Application (Initial Access)
- T1059 — Command and Scripting Interpreter (Execution)
- T1620 — Reflective Code Loading (Defense Evasion)
- T1071.001 — Application Layer Protocol: Web Protocols (Command and Control)
IOC
- SHA256 :
15273d4e— VT · MalwareBazaar - CVEs :
CVE-2026-111497— NVD · CIRCL - Fichiers :
cve111497_falco.yaml - Fichiers :
cve-2026-111497.rules
⚠️ À propos de ces IOC — ils sont extraits automatiquement de l’article original le 27 octobre 2026 et n’ont pas fait l’objet d’une vérification externe. Un indicateur peut avoir été réattribué depuis : une IP de C2 peut redevenir un service légitime, un domaine sinkholé peut changer de propriétaire. Aucune garantie d’exactitude ni d’actualité — contrôlez leur validité avant tout usage opérationnel, en particulier avant de les injecter dans une blocklist ou un SIEM.
Malware / Outils
- Node2Shell (other)
🟡 Indice de vérification factuelle : 45/100 (moyenne)
- ⬜ gist.github.com — source non référencée (0pts)
- ✅ 15000 chars — texte complet (fulltext extrait) (15pts)
- ✅ 4 IOCs (IPs/domaines/CVEs) (10pts)
- ⬜ 0/1 IOCs confirmés externellement (0pts)
- ✅ 4 TTPs MITRE identifiées (15pts)
- ⬜ date RSS ou approximée (0pts)
- ⬜ aucun acteur de menace nommé (0pts)
- ✅ 1/1 CVE(s) confirmée(s) (CIRCL) (5pts)
🔗 Source originale : https://gist.github.com/Blevene/7d9d769f54826e1fe770d8c19d5ef0b2