🟠 【深度分析】高危安全漏洞:CVE-2026-12228

CVSS 评分: 高危(8.7)🟠  状态: Awaiting Analysis  发布时间: 2026-07-18


🔍 技术细节速览

字段 值
CVE ID CVE-2026-12228
CVSS 评分 8.7 🟠
严重程度 高危
CVSS 向量 CVSS:3.0/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:N
CWE 分类 CWE-79
发布时间 2026-07-18
最后更新 2026-07-23
状态 Awaiting Analysis
数据来源 security@huntr.dev

# CVE-2026-12228 漏洞深度分析

> ⚠️ **CVSS 评分:8.7(高危)**  
> **CVSS 向量:** `CVSS:3.0/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:N`  
> **危害等级:** 高危(远程利用、低交互要求、可导致完全机密性与完整性损失)

---

## 漏洞概述

CVE-2026-12228 是存在于 **parisneo/lollms**(截至最新版本)中的 **存储型跨站脚本(Stored XSS)漏洞**。攻击者可通过 `POST /api/prompts/share` 端点向受害者发送恶意构造的提示(prompt)共享消息。由于后端未对 `prompt_content` 进行服务端消毒,且前端 `MessageContentRenderer` 组件使用 `v-html` 指令直接插入未充分净化的 HTML,导致任意 JavaScript 代码在受害者浏览器上下文中执行。攻击者可借此窃取同源数据、模拟受害者执行认证操作,甚至实现账户接管。

该漏洞已由 huntr 安全团队提交,NVD 状态为“待分析”,但根据公开描述,漏洞影响明确且可利用性较高。

---

## 受影响组件与版本

- **受影响软件:** parisneo/lollms
- **受影响版本:** 最新版本(具体版本号未在 NVD 数据中明确,但根据报告时间(2026-07-18)推测为发行版中较新版本)
- **受影响端点:** `POST /api/prompts/share`
- **受影响组件:**
  - 后端:`DBDirectMessage.content` 存储用户输入
  - 前端:`MessageContentRenderer`(使用 `v-html` 渲染)
  - 前端消毒器:基于正则表达式的 HTML 清理逻辑(不完善)

> 注:由于厂商尚未发布官方确认或补丁,建议关注 lollms 官方仓库后续更新。

---

## 漏洞原理分析

### 攻击链路

1. **数据存储阶段(后端)**  
   攻击者通过 `POST /api/prompts/share` 提交包含恶意 HTML/JavaScript 的 `prompt_content` 字段。服务端未对内容进行任何消毒或转义处理,直接将其存入 `DBDirectMessage.content`。

2. **消息加载与渲染阶段(前端)**  
   当受害者打开与该攻击者的 DM 对话时,前端从数据库获取消息内容,并通过 `MessageContentRenderer` 组件渲染。该组件使用 Vue.js 的 `v-html` 指令将内容直接插入 DOM。

3. **消毒器失效**  
   NVD 描述指出前端确实存在一个基于正则表达式的消毒器,但其逻辑存在缺陷,无法覆盖所有 XSS 攻击向量(例如基于事件处理器的敏感属性、SVG 标签、`<script>` 标签的变体等)。因此攻击者精心构造的 payload 可绕过消毒。

4. **Payload 执行**  
   恶意 HTML 被插入 DOM 后,浏览器解析并执行其中的脚本,导致在受害者的 lollms 会话上下文中执行任意 JavaScript 代码。

### 技术细节(基于现有信息推断)

- **后端缺乏校验**:`prompt_content` 未经过 `htmlspecialchars` 或类似函数的转义,也未使用白名单过滤。
- **前端 DOM 操作风险**:使用 `v-html` 而非 `v-text`,意味着原始 HTML 被直接解释。
- **正则消毒器局限**:典型的正则表达式(如 `/<\/?[^>]*>/g`)无法处理 `onerror`、`onload`、`<svg/onload>`、`<img src=x onerror=alert(1)>` 等绕过方式,尤其是嵌套属性或 Unicode 编码变体。

### 攻击向量

- 任意已认证用户均可触发。
- 攻击者无需高权限(只需 Lollms 普通账号)。
- 受害者需要与被攻击者建立 Direct Message(需要点击会话,但无其他额外认证步骤)。
- 攻击可拓展为:
  - 窃取会话 Cookie/Token
  - 模拟受害者发送 API 请求(如修改配置、泄露文件)
  - 在受害者浏览器中执行持久化 XSS 载荷

---

## 影响评估

| 评估维度 | 得分/说明 |
|---------|-----------|
| **攻击复杂度** | 低(AC:L)——无需特殊技巧,构造 XSS payload 即可 |
| **所需权限** | 低(PR:L)——仅需 Lollms 帐户 |
| **用户交互** | 需要(UI:R)——受害者需打开 DM 会话 |
| **攻击范围** | 改变(S:C)——代码执行可能影响同源下的其他页面或跨域资源 |
| **机密性影响** | 高(C:H)——攻击者可读取所有同源数据(如聊天记录、API 密钥、本地文件等,取决于 Lollms 架构) |
| **完整性影响** | 高(I:H)——可执行任意操作,如创建/删除资源、冒充受害者 |
| **可用性影响** | 无(A:N)——漏洞本身不直接导致服务拒绝 |

### 实际威胁

- **无需特殊配置**:Lollms 默认开启 Share 功能时即可利用。
- **隐蔽性强**:恶意消息在 DM 列表中显示为正常提示共享,受害者点击后即触发。
- **可能演变为蠕虫**:攻击脚本可利用受害者身份继续向其他用户发送恶意提示,造成连锁扩散。

---

## 修复建议

### 紧急修复(临时缓解)

1. **关闭 Prompt Share 功能**(若允许):在代码层面禁用 `POST /api/prompts/share` 端点,或仅允许受信任用户(管理员)使用。
2. **强制前端禁用 `v-html`**:将 `MessageContentRenderer` 中的 `v-html` 替换为 `v-text`,并将用户输入进行 HTML 实体编码(如 `&lt;script&gt;`)。
3. **加固前端消毒器**:若无法立即更换渲染方式,应使用成熟的 HTML 清理库(如 **DOMPurify**)替代正则表达式。配置白名单标签与属性。

### 根本修复(补丁建议)

- **服务端输入消毒**:在存入数据库前对 `prompt_content` 进行严格的 HTML 转义(例如使用 `htmlspecialchars` 或 OWASP Java Encoder 等)。
- **输出编码**:无论是否消毒,始终在 JSON 响应中对 `content` 字段进行实体编码(前端再解码时仅作为文本)。
- **内容安全策略(CSP)**:添加 HTTP 响应头 `Content-Security-Policy: script-src 'self'`,限制脚本来源,降低 XSS 危害。
- **升级 lollms 版本**:关注官方发布修复后的版本(预计会在最近版本中修复),及时更新。

### 开发者检查清单

- [ ] 对 `prompt_content` 字段添加服务端验证(拒绝任何 HTML 标签)
- [ ] 移除或替换 `v-html` 为安全绑定
- [ ] 将前端消毒器升级为 DOMPurify 并配置白名单
- [ ] 添加 CSP 响应头
- [ ] 测试边界情况:事件属性、`<svg>`、`<iframe>`、编码变体

---

## 参考资料

- **CVE 详情页(NVD)**:https://nvd.nist.gov/vuln/detail/CVE-2026-12228
- **CWE 分类**:CWE-79(Improper Neutralization of Input During Web Page Generation,即跨站脚本)
- **原始安全报告**:security@huntr.dev(NVD 数据来源)
- **OWASP XSS Prevention Cheat Sheet**:https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html
- **DOMPurify 库**:https://github.com/cure53/DOMPurify

> 本分析基于 NVD 提供的公开数据编写,所有技术细节均源于 CVE 描述。若后续官方发布更多补丁信息,请以供应商公告为准。

--- 

**免责声明**:本文档仅用于安全研究和防御参考,未经授权对漏洞进行利用或测试可能违反相关法律法规。请遵循负责任的漏洞披露流程。