Share
## https://sploitus.com/exploit?id=8F015770-9173-5EB7-B0AE-78BD09FCF037
# CVE-2026-9809
CVE-2026-9809 is a Stored Cross-Site Scripting (Stored XSS) vulnerability affecting Mautic 7 (versions 7.0.0 through 7.1.1). The flaw exists in the Projects component, where project names are displayed as tags and hover popovers on administrative pages (such as campaigns, emails, and forms) without proper output sanitization. An authenticated user with permission to create or edit projects can store malicious HTML/JavaScript in a project name. When an administrator later views an entity associated with that project and hovers over its tag, the malicious script executes in the administrator's browser.

Affected Software


  
    Property
    Value
  
  
    Product
    Mautic
  
  
    Affected Versions
    7.0.0 โ€“ 7.1.1
  
  
    Fixed Version
    7.1.2
  
  
    Affected Component
    Projects (Tags & Popovers)
  

Vulnerability Type
Category: Stored Cross-Site Scripting (Stored XSS)
CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
Root Cause

The application stores project names provided by authenticated users. Later, when project tags and popover content are rendered on administrative pages, the stored value is inserted into the HTML without proper output encoding or sanitization.

Conceptually:

````text
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
````

Instead of treating the project name as plain text, the browser interprets it as HTML, allowing embedded JavaScript to execute.

Attack Flow

````text
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
````

Attack Scenario

Suppose an authenticated user creates a project whose name contains HTML instead of ordinary text.

The project is successfully saved because the application does not sanitize the project name on input.

Later, an administrator opens a campaign associated with that project. When the administrator hovers over the project's tag, the application generates a popover using the stored project name. Since the content is inserted into the page without proper output encoding, the browser interprets it as HTML rather than plain text, causing the embedded JavaScript to execute in the administrator's session.

Impact

Successful exploitation may allow an attacker to:


Execute arbitrary JavaScript in an administrator's browser.
Perform actions using the administrator's session.
Modify application settings.
Access sensitive administrative data.
Exfiltrate information accessible to the administrator.


The vulnerability primarily impacts confidentiality and integrity.

Severity

  
    Metric
    Score
  
  
    CVSS v3.1 (CNA)
    7.6 (High)
  
  


NVD has not yet published its own CVSS assessment; the current score is provided by the Mautic CNA.

Conceptual Vulnerable Code

Note: The vendor has not published the exact vulnerable source code. The following illustrates the vulnerability pattern.

````html
// Project name retrieved from the server
const projectName = response.project.name;

// Unsafe: inserts user-controlled HTML
popover.innerHTML = `
    
        ${projectName}
    
`;
````

Why It Is Vulnerable

innerHTML causes the browser to parse the stored project name as HTML. If the project name contains HTML elements with JavaScript event handlers, the browser executes them when rendering the popover.

Corrected Code (Conceptual)

````html
const tag = document.createElement("span");
tag.className = "project-tag";

// Safe: treat input as plain text
tag.textContent = response.project.name;

popover.replaceChildren(tag);
````

Why This Fix Works

Using textContent ensures that the project name is treated as literal text instead of HTML. Any HTML special characters are displayed rather than interpreted by the browser, preventing execution of embedded scripts. Where HTML rendering is required, developers should sanitize untrusted content using a well-maintained HTML sanitizer before insertion.