
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 ist eine Stored-Cross-Site-Scripting-Schwachstelle (Stored XSS), die Mautic 7 (Versionen 7.0.0 bis 7.1.1) betrifft. Der Fehler liegt in der Komponente Projekte, in der Projektnamen auf administrativen Seiten (wie Kampagnen, E-Mails und Formularen) als Tags und Hover-Popovers ohne ordnungsgemäße Sanitisierung der Ausgabe angezeigt werden. Ein authentifizierter Benutzer mit der Berechtigung, Projekte zu erstellen oder zu bearbeiten, kann bösartiges HTML/JavaScript in einem Projektnamen speichern. Wenn ein Administrator später eine mit diesem Projekt verknüpfte Entität anzeigt und über deren Tag fährt, wird das bösartige Skript im Browser des Administrators ausgeführt.
| Eigenschaft | Wert |
|---|---|
| Produkt | Mautic |
| Betroffene Versionen | 7.0.0 – 7.1.1 |
| Behobene Version | 7.1.2 |
| Betroffene Komponente | Projekte (Tags & Popovers) |
Die Anwendung speichert Projektnamen, die von authentifizierten Benutzern bereitgestellt werden. Später, wenn Projekt-Tags und Popover-Inhalte auf administrativen Seiten gerendert werden, wird der gespeicherte Wert ohne ordnungsgemäße Ausgabekodierung oder -sanitisierung in das HTML eingefügt.
Konzeptionell:
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
Anstatt den Projektnamen als reinen Text zu behandeln, interpretiert der Browser ihn als HTML, sodass eingebettetes JavaScript ausgeführt werden kann.
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
Angenommen, ein authentifizierter Benutzer erstellt ein Projekt, dessen Name HTML statt gewöhnlichem Text enthält.
Das Projekt wird erfolgreich gespeichert, da die Anwendung den Projektnamen bei der Eingabe nicht bereinigt.
Später öffnet ein Administrator eine mit diesem Projekt verknüpfte Kampagne. Wenn der Administrator über das Tag des Projekts fährt, erzeugt die Anwendung ein Popover mit dem gespeicherten Projektnamen. Da der Inhalt ohne ordnungsgemäße Ausgabekodierung in die Seite eingefügt wird, interpretiert der Browser ihn als HTML statt als reinen Text, wodurch das eingebettete JavaScript in der Sitzung des Administrators ausgeführt wird.
Eine erfolgreiche Ausnutzung kann es einem Angreifer ermöglichen:
Die Schwachstelle wirkt sich hauptsächlich auf Vertraulichkeit und Integrität aus.
| Metrik | Wert |
|---|---|
| CVSS v3.1 (CNA) | 7.6 (Hoch) |
Das NVD hat noch keine eigene CVSS-Bewertung veröffentlicht; der aktuelle Wert stammt von der Mautic-CNA.
Hinweis: Der Hersteller hat den genauen anfälligen Quellcode nicht veröffentlicht. Das Folgende veranschaulicht das Schwachstellenmuster.
// 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 veranlasst den Browser, den gespeicherten Projektnamen als HTML zu parsen. Wenn der Projektname HTML-Elemente mit JavaScript-Ereignisbehandlern enthält, führt der Browser diese beim Rendern des Popovers aus.
const tag = document.createElement("span");
tag.className = "project-tag";
// Safe: treat input as plain text
tag.textContent = response.project.name;
popover.replaceChildren(tag);
Die Verwendung von textContent stellt sicher, dass der Projektname als reiner Text statt als HTML behandelt wird. HTML-Sonderzeichen werden angezeigt, anstatt vom Browser interpretiert zu werden, wodurch die Ausführung eingebetteter Skripte verhindert wird. Wo HTML-Rendering erforderlich ist, sollten Entwickler nicht vertrauenswürdige Inhalte vor dem Einfügen mithilfe eines gut gewarteten HTML-Sanitizers bereinigen.