
CVE-2026-9809 is a Stored Cross-Site Scripting (Stored XSS) vulnerability affecting Mautic 7 (versions 7.0.0 through 7.1.1).
CVE-2026-9809 è una vulnerabilità di Cross-Site Scripting persistente (Stored XSS) che interessa Mautic 7 (versioni dalla 7.0.0 alla 7.1.1). La falla risiede nel componente Projects, in cui i nomi dei progetti vengono visualizzati come tag e popover al passaggio del mouse sulle pagine amministrative (come campagne, email e moduli) senza un'adeguata sanitizzazione dell'output. Un utente autenticato con il permesso di creare o modificare progetti può memorizzare HTML/JavaScript dannosi in un nome di progetto. Quando un amministratore visualizza successivamente un'entità associata a quel progetto e passa il mouse sul relativo tag, lo script dannoso viene eseguito nel browser dell'amministratore.
| Proprietà | Valore |
|---|---|
| Prodotto | Mautic |
| Versioni Interessate | 7.0.0 – 7.1.1 |
| Versione Correttiva | 7.1.2 |
| Componente Interessato | Projects (Tag e Popover) |
L'applicazione memorizza i nomi dei progetti forniti dagli utenti autenticati. Successivamente, quando i tag dei progetti e il contenuto dei popover vengono visualizzati sulle pagine amministrative, il valore memorizzato viene inserito nell'HTML senza un'adeguata codifica dell'output o sanitizzazione.
Concettualmente:
User creates project
│
▼
Project name stored in database
│
▼
Administrator opens Campaign / Email / Form
│
▼
Project tag & popover rendered
│
▼
Project name inserted into HTML without sanitization
│
▼
Browser executes embedded JavaScript
Invece di trattare il nome del progetto come testo semplice, il browser lo interpreta come HTML, consentendo l'esecuzione di JavaScript incorporato.
Attacker
│
▼
Creates a project with a malicious project name
│
▼
Payload stored in database
│
▼
Administrator views Campaign / Email / Form
│
▼
Administrator hovers over the project tag
│
▼
Popover renders unsanitized project name
│
▼
Browser executes JavaScript
│
▼
Actions performed with administrator's privileges
Supponiamo che un utente autenticato crei un progetto il cui nome contiene HTML anziché testo ordinario.
Il progetto viene salvato correttamente perché l'applicazione non sanitizza il nome del progetto in fase di input.
Successivamente, un amministratore apre una campagna associata a quel progetto. Quando l'amministratore passa il mouse sul tag del progetto, l'applicazione genera un popover utilizzando il nome del progetto memorizzato. Poiché il contenuto viene inserito nella pagina senza un'adeguata codifica dell'output, il browser lo interpreta come HTML anziché come testo semplice, causando l'esecuzione del JavaScript incorporato nella sessione dell'amministratore.
Lo sfruttamento riuscito può consentire a un aggressore di:
La vulnerabilità impatta principalmente riservatezza e integrità.
| Metrica | Punteggio |
|---|---|
| CVSS v3.1 (CNA) | 7.6 (Alta) |
NVD non ha ancora pubblicato la propria valutazione CVSS; il punteggio attuale è fornito dal CNA di Mautic.
Nota: Il fornitore non ha pubblicato il codice sorgente vulnerabile esatto. Quanto segue illustra il pattern della vulnerabilità.
// Project name retrieved from the server
const projectName = response.project.name;
// Unsafe: inserts user-controlled HTML
popover.innerHTML = `
<span class="project-tag">
${projectName}
</span>
`;
innerHTML fa sì che il browser interpreti il nome del progetto memorizzato come HTML. Se il nome del progetto contiene elementi HTML con gestori di eventi JavaScript, il browser li esegue durante il rendering del popover.
const tag = document.createElement("span");
tag.className = "project-tag";
// Safe: treat input as plain text
tag.textContent = response.project.name;
popover.replaceChildren(tag);
L'uso di textContent garantisce che il nome del progetto sia trattato come testo letterale invece che come HTML. Eventuali caratteri speciali HTML vengono visualizzati anziché interpretati dal browser, impedendo l'esecuzione di script incorporati. Laddove sia richiesto il rendering HTML, gli sviluppatori dovrebbero sanitizzare i contenuti non attendibili utilizzando un sanitizzatore HTML ben mantenuto prima dell'inserimento.