
CVE-2026-9806 — это уязвимость типа «хранимая межсайтовая подделка сценариев» (Stored XSS), затрагивающая версии CTI Transmute до выпуска с исправлением.
CVE-2026-9806 — это уязвимость типа «хранимый межсайтовый скриптинг» (Stored XSS), затрагивающая CTI Transmute версий до исправленного релиза. Проблема существует в панели уведомлений, где сообщения уведомлений, содержащие управляемые пользователем имена конвертов, отображаются в выпадающем списке колокольчика уведомлений с помощью innerHTML без надлежащей санитизации. Если злоумышленник может создать или повлиять на имя конверта, которое появляется в уведомлении, произвольный JavaScript может выполниться в браузере аутентифицированного пользователя, когда он открывает панель уведомлений.
Панель уведомлений формирует записи уведомлений с помощью innerHTML. Сообщения уведомлений включают имена конвертов, которые контролируются пользователем. Поскольку эти значения вставляются непосредственно в DOM без HTML-кодирования или санитизации, любой HTML или JavaScript, содержащийся в имени конверта, интерпретируется браузером.
Концептуально:
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
Уязвимость вызвана рендерингом недоверенного ввода как HTML, а не как обычного текста.
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
Предположим, что конверт создан со специально сформированным именем, содержащим HTML.
Позже другой аутентифицированный пользователь получает уведомление, ссылающееся на этот конверт. Когда пользователь нажимает на колокольчик уведомлений, приложение вставляет сообщение уведомления на страницу с помощью innerHTML.
Вместо отображения имени конверта как текста браузер интерпретирует его как HTML и выполняет встроенный JavaScript, что позволяет злоумышленнику выполнять действия в сессии браузера жертвы.
Легитимный пользователь создает конверт с именем:
Monthly Sales Report
Приложение сохраняет его в базе данных.
Злоумышленник вместо этого вводит имя, содержащее HTML:
Quarterly Report <b>Important</b>
Приложение сохраняет:
Quarterly Report <b>Important</b>
Позже другой пользователь получает уведомление, например:
Convert "Quarterly Report <b>Important</b>" completed successfully.
Если приложение делает:
notification.innerHTML = response.message;
браузер отображает:
Конверт Quarterly Report Important успешно завершен.
поскольку интерпретируется как HTML.
Если приложение вместо этого использует:
notification.textContent = response.message;
браузер отображает буквальный текст:
Convert "Quarterly Report <b>Important</b>" completed successfully.
Никакой HTML не интерпретируется.
Успешная эксплуатация может позволить злоумышленнику:
| Показатель | Оценка |
|---|---|
| CVSS v4.0 (CNA) | 6.3 (Средний) |
NVD ещё не присвоила собственную оценку CVSS.
Примечание: Вендор не опубликовал точный уязвимый исходный код. Ниже продемонстрирован уязвимый паттерн.
// User-controlled convert name
const message = response.notificationMessage;
// Unsafe rendering
notificationDropdown.innerHTML += `
<div class="notification">
${message}
</div>
`;
innerHTML обрабатывает сообщение уведомления как HTML. Если сообщение содержит HTML или JavaScript, происходящие из вредоносного имени конверта, браузер анализирует и выполняет их.
const notification = document.createElement("div");
notification.className = "notification";
// Safe rendering
notification.textContent = response.notificationMessage;
notificationDropdown.appendChild(notification);
Использование textContent гарантирует, что сообщение уведомления отображается как обычный текст вместо HTML. Как указано в опубликованном исправлении, проблема была устранена путём создания элементов уведомлений через DOM-методы и присваивания содержимого через textContent вместо innerHTML, что предотвращает выполнение встроенных скриптов.