
CVE-2026-9806 is a Stored Cross-Site Scripting (Stored XSS) vulnerability affecting CTI Transmute versions prior to the patched release.
CVE-2026-9806 è una vulnerabilità di Cross-Site Scripting persistente (Stored XSS) che interessa le versioni di CTI Transmute precedenti alla release corretta. Il difetto risiede nel pannello delle notifiche, dove i messaggi di notifica contenenti nomi di convert controllati dall'utente vengono renderizzati nel menu a tendina della campanella delle notifiche tramite innerHTML senza un'adeguata sanitizzazione. Se un attaccante riesce a creare o influenzare un nome di convert che compare in una notifica, JavaScript arbitrario può essere eseguito nel browser di un utente autenticato quando quest'ultimo apre il pannello delle notifiche.
Il pannello delle notifiche costruisce le voci di notifica utilizzando innerHTML. I messaggi di notifica includono i nomi di convert, che sono controllati dall'utente. Poiché questi valori vengono inseriti direttamente nel DOM senza codifica HTML o sanitizzazione, qualsiasi HTML o JavaScript contenuto in un nome di convert viene interpretato dal browser.
Concettualmente:
Attacker creates or influences a convert name
│
▼
Convert name stored in notification
│
▼
User opens notification panel
│
▼
Notification rendered using innerHTML
│
▼
Browser parses HTML
│
▼
Embedded JavaScript executes
La vulnerabilità è causata dalla renderizzazione di input non attendibile come HTML anziché come testo semplice.
Attacker
│
▼
Creates or modifies a malicious convert name
│
▼
Notification containing the convert name is generated
│
▼
Victim opens notification panel
│
▼
Notification dropdown inserts message using innerHTML
│
▼
Browser executes malicious JavaScript
│
▼
Actions performed within victim's authenticated session
Supponiamo che venga creato un convert con un nome appositamente modificato contenente HTML.
Successivamente, un altro utente autenticato riceve una notifica che fa riferimento a quel convert. Quando l'utente fa clic sulla campanella delle notifiche, l'applicazione inserisce il messaggio di notifica nella pagina utilizzando innerHTML.
Invece di visualizzare il nome del convert come testo, il browser lo interpreta come HTML ed esegue il JavaScript incorporato, consentendo all'attaccante di eseguire azioni nella sessione del browser della vittima.
Un utente legittimo crea un convert chiamato:
Monthly Sales Report
L'applicazione lo memorizza nel database.
Un attaccante invece inserisce un nome contenente HTML:
Quarterly Report <b>Important</b>
L'applicazione memorizza:
Quarterly Report <b>Important</b>
Successivamente, un altro utente riceve una notifica come:
Convert "Quarterly Report <b>Important</b>" completed successfully.
Se l'applicazione fa:
notification.innerHTML = response.message;
il browser renderizza:
Convert Quarterly Report Important completato con successo.
poiché viene interpretato come HTML.
Se l'applicazione invece utilizza:
notification.textContent = response.message;
il browser visualizza il testo letterale:
Convert "Quarterly Report <b>Important</b>" completed successfully.
Nessun HTML viene interpretato.
Lo sfruttamento riuscito può consentire a un attaccante di:
La vulnerabilità compromette principalmente la riservatezza e l'integrità.
| Metrica | Punteggio |
|---|
| CVSS v4.0 (CNA) | 6.3 (Medio) |
NVD non ha ancora assegnato una propria valutazione CVSS.
Nota: Il vendor non ha pubblicato il codice sorgente vulnerabile esatto. Il seguente esempio mostra il pattern vulnerabile.
// User-controlled convert name
const message = response.notificationMessage;
// Unsafe rendering
notificationDropdown.innerHTML += `
<div class="notification">
${message}
</div>
`;
innerHTML tratta il messaggio di notifica come HTML. Se il messaggio contiene HTML o JavaScript proveniente da un nome di convert maligno, il browser lo analizza ed esegue.
const notification = document.createElement("div");
notification.className = "notification";
// Safe rendering
notification.textContent = response.notificationMessage;
notificationDropdown.appendChild(notification);
L'uso di textContent garantisce che il messaggio di notifica venga renderizzato come testo semplice anziché come HTML. Come indicato nella remediation pubblicata, il problema è stato risolto costruendo gli elementi di notifica attraverso metodi DOM e assegnando il contenuto tramite textContent anziché innerHTML, impedendo l'esecuzione di script incorporati.