Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
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.

FeedContattoPrivacy© 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
2196 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 MISP (Malware Information Sharing Platform) versioni fino alla 2.5.27 inclusa.

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

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
Scarica lo strumento