🔍 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.brotli rapporte toujours 1.2.0 sur 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