🔍 Contexte

Publié le 29 juin 2026 sur GitHub par le chercheur Fady Oueslati (ReactiveZero Security Research), ce dépôt documente la vulnérabilité CVE-2026-20251 affectant Splunk Secure Gateway (SSG), avec un score CVSS 8.8 (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H). Un patch est disponible.

🐛 Vulnérabilité

La faille repose sur une désérialisation non sécurisée via jsonpickle dans le composant SSG. Le flux d’exploitation est le suivant :

  • Un attaquant authentifié (faibles privilèges) écrit un document malveillant dans la collection KV Store mobile_alerts via l’API REST Splunk.
  • SSG lit ce document dans alerts_request_processor.py et le soumet au validateur check_alert_data_valid_json().
  • Le validateur court-circuite dès qu’il rencontre la clé py/object avec une valeur commençant par spacebridgeapp, retournant True sans inspecter les clés suivantes.
  • Le document est ensuite passé à jsonpickle.decode(..., safe=True), qui exécute le gadget py/reduce présent dans la clé notification — le flag safe=True ne bloque pas ce chemin de code.

🎯 Impact

  • Exécution de code arbitraire en tant que compte de service Splunk
  • Nécessite uniquement un login Splunk valide à faibles privilèges
  • Confidentialité, intégrité et disponibilité toutes compromises

📦 Versions affectées

Branche Corrigé dans
SSG 3.9.x 3.9.20
SSG 3.10.x 3.10.6
SSG 3.8.x 3.8.67
Splunk Enterprise 10.0.7 / 10.2.4 / 10.4.0+

Instance testée : SSG 3.9.19 sur Splunk Enterprise 10.0.6 (macOS x86_64).

🔬 Cause racine

  • Fichier sink : bin/spacebridgeapp/request/alerts_request_processor.py → appel à jsonpickle.decode()
  • Fichier validateur défaillant : bin/spacebridgeapp/rest/devices/alert_helper.py → retour prématuré sur py/object

📎 Note sur CVE-2026-20253

Le même lot d’advisory inclut CVE-2026-20253 (CVSS 9.8, création de fichier arbitraire non authentifiée via un endpoint PostgreSQL sidecar), non reproductible sur la build macOS x86_64 testée car le composant sidecar PostgreSQL n’y est pas présent.

📄 Type d’article

Publication de recherche technique avec PoC (benin : uname -a), analyse de cause racine et documentation de la chaîne d’exploitation complète.

🧠 TTPs et IOCs détectés

TTP

  • T1190 — Exploit Public-Facing Application (Initial Access)
  • T1059.006 — Command and Scripting Interpreter: Python (Execution)
  • T1211 — Exploitation for Defense Evasion (Defense Evasion)

IOC

  • CVEs : CVE-2026-20251NVD · CIRCL
  • CVEs : CVE-2026-20253NVD · CIRCL
  • Fichiers : poc_cve_2026_20251.py
  • Fichiers : alerts_request_processor.py
  • Fichiers : alert_helper.py
  • Chemins : /Applications/Splunk/etc/apps/splunk_secure_gateway/lib
  • Chemins : bin/spacebridgeapp/request/alerts_request_processor.py
  • Chemins : bin/spacebridgeapp/rest/devices/alert_helper.py

Malware / Outils

  • jsonpickle (tool)

🟡 Indice de vérification factuelle : 50/100 (moyenne)

  • ⬜ github.com — source non référencée (0pts)
  • ✅ 6609 chars — texte complet (fulltext extrait) (15pts)
  • ✅ 8 IOCs (IPs/domaines/CVEs) (10pts)
  • ⬜ pas d’IOC vérifié (0pts)
  • ✅ 3 TTPs MITRE identifiées (15pts)
  • ✅ date extraite du HTML source (10pts)
  • ⬜ aucun acteur de menace nommé (0pts)
  • ⬜ 0/2 CVE(s) confirmée(s) (0pts)

🔗 Source originale : https://github.com/reactivezero/CVE-2026-20251