CVE-2026-111497 (Node2Shell/Broccoli) : guide de détection pour l'OOB write du décodeur Brotli
🔍 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. ...