
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 — это уязвимость типа «хранимая межсайтовая инъекция сценариев» (Stored XSS), затрагивающая Mautic 7 (версии с 7.0.0 по 7.1.1). Недостаток присутствует в компоненте Projects, где имена проектов отображаются на административных страницах (таких как кампании, письма и формы) в виде тегов и всплывающих подсказок, появляющихся при наведении курсора, без надлежащей санитизации вывода. Аутентифицированный пользователь с правом создавать или редактировать проекты может сохранить вредоносный HTML/JavaScript в имени проекта. Когда администратор позже просматривает объект, связанный с этим проектом, и наводит курсор на его тег, вредоносный сценарий выполняется в браузере администратора.
| Свойство | Значение |
|---|---|
| Продукт | Mautic |
| Затронутые версии | 7.0.0 – 7.1.1 |
| Исправленная версия | 7.1.2 |
| Затронутый компонент | Projects (теги & всплывающие подсказки) |
Приложение сохраняет имена проектов, указанные аутентифицированными пользователями. Позже, когда теги проектов и содержимое всплывающих подсказок отображаются на административных страницах, сохранённое значение вставляется в HTML без надлежащего кодирования вывода или санитизации.
Концептуально:
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
Вместо того чтобы обрабатывать имя проекта как обычный текст, браузер интерпретирует его как HTML, что позволяет выполнять встроенный JavaScript.
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
Предположим, что аутентифицированный пользователь создаёт проект, имя которого содержит HTML вместо обычного текста.
Проект успешно сохраняется, поскольку приложение не санитизирует имя проекта на входе.
Позже администратор открывает кампанию, связанную с этим проектом. Когда администратор наводит курсор на тег проекта, приложение генерирует всплывающую подсказку с использованием сохранённого имени проекта. Поскольку содержимое вставляется на страницу без надлежащего кодирования вывода, браузер интерпретирует его как HTML, а не как обычный текст, что приводит к выполнению встроенного JavaScript в сеансе администратора.
Успешная эксплуатация может позволить атакующему:
Уязвимость в первую очередь затрагивает конфиденциальность и целостность.
| Показатель | Оценка |
|---|---|
| CVSS v3.1 (CNA) | 7.6 (высокий) |
NVD ещё не опубликовала собственную оценку CVSS; текущая оценка предоставлена CNA Mautic.
Примечание: Вендор не опубликовал точный уязвимый исходный код. Приведённый ниже пример иллюстрирует паттерн уязвимости.
// 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 заставляет браузер разбирать сохранённое имя проекта как HTML. Если имя проекта содержит HTML-элементы с обработчиками событий JavaScript, браузер выполняет их при отображении всплывающей подсказки.
const tag = document.createElement("span");
tag.className = "project-tag";
// Safe: treat input as plain text
tag.textContent = response.project.name;
popover.replaceChildren(tag);
Использование textContent гарантирует, что имя проекта обрабатывается как обычный текст, а не как HTML. Любые специальные символы HTML отображаются, а не интерпретируются браузером, что предотвращает выполнение встроенных сценариев. Если требуется отображение HTML, разработчикам следует санитизировать недоверенное содержимое с помощью хорошо поддерживаемого HTML-санитайзера перед вставкой.