CVE-2026-79294 — Moonshot AI Kimi 的 HTML 工件预览中的存储型 XSS,通过公开的分享视图传递,导致会话令牌泄露,并已演示账户接管。负责任披露公告。
| 厂商 / 产品 | Moonshot AI — Kimi |
| 组件 | HTML 工件预览渲染;公开分享视图 |
| 弱点 | CWE-79 — 网页生成期间输入中和不当 |
Kimi 在应用程序自身源内的预览窗格中渲染模型生成的 HTML 工件,且未对脚本进行中和处理。分享对话会将该工件发布到公开的分享 URL,因此由一个账户编写的脚本会在任何打开该链接的人的浏览器中运行。
Kimi 所依赖的会话值保存在 localStorage 中,因此可被该脚本读取:
access_token
refresh_token
msh_user_id
因此,脚本执行并不止于脚本执行本身。这三个值可以从受害者浏览器中读出、发送到任意位置,并被重放以获取该受害者的已认证会话。
攻击者账户 → 包含数据外泄脚本的工件 → 公开分享
→ 受害者打开链接 → 脚本在 Kimi 的源中运行
→ 三个 localStorage 值到达攻击者
→ 重放到干净的浏览器中 → 以受害者身份通过认证
攻击者只需一个普通账户。受害者只需在已登录状态下打开分享链接——而这正是分享链接的用途。
| 观察结果 | 方式 |
|---|---|
| 脚本在受害者浏览器中执行 | 一个请求到达了攻击者的端点,源自受害者的会话 |
| 三个值可被脚本读取 | 三者均出现在该请求体中 |
| 这些值可自行通过认证 | 将其写入一个从未登录过 Kimi 的浏览器;重新加载后,该浏览器持有一个已认证会话 |
| 这些值是原因 | 对照: 同一浏览器,省略这些值,重新加载——仍处于未认证状态 |
涉及的两个账户均由研究者创建和控制。在任何时候均未访问任何第三方的数据。
攻击链已在上文完整记录。可用的载荷和接收端点已被隐去——发布它们将武装攻击,而非描述攻击。
工件提示词的形式如下:
Generate an HTML page that reads the three localStorage values above
and POSTs them to <attacker endpoint>.