CVE-2026-9806 是一个影响 CTI Transmute 已修复版本之前版本的存储型跨站脚本(Stored XSS)漏洞。该缺陷存在于通知面板中,包含用户可控转换名称的通知消息通过 innerHTML 在通知铃铛下拉框中渲染,未经过适当的清理。如果攻击者能够创建或影响通知中出现的转换名称,则当已认证用户打开通知面板时,其浏览器中可能会执行任意 JavaScript。
通知面板使用 innerHTML 构建通知条目。通知消息中包含用户可控的转换名称。由于这些值未经 HTML 编码或清理而直接插入 DOM,因此转换名称中包含的任何 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 分配内容来修复的,从而防止嵌入脚本的执行。