IPBUF安全漏洞报告
English
CVE-2026-43899 CVSS 9.6 严重

CVE-2026-43899: DeepChat 任意协议执行绕过导致远程代码执行漏洞

披露日期: 2026-05-11

漏洞信息

漏洞编号
CVE-2026-43899
漏洞类型
远程代码执行 (RCE)
CVSS评分
9.6 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
DeepChat

相关标签

RCEDeepChatElectron代码执行CVE-2026-43899任意协议执行

漏洞概述

DeepChat 是一个统一模型、工具和代理的开源人工智能代理平台。在 v1.0.4-beta.1 版本之前,由于对 CVE-2025-55733 的缓解措施不完整,DeepChat 仍然容易受到任意协议执行攻击(RCE)。尽管之前的补丁正确限制了渲染器 preload 脚本中的 `api.openExternal()`,但在结构上忽略了清理原生 Electron 弹出窗口处理程序。攻击者或受损的 AI 端点可以通过返回带有 `target="_blank"` 属性的 Markdown 链接,触发 `tabPresenter.ts` 中的原生窗口拦截,进而将恶意 URL 直接转发给 `shell.openExternal()`,完全绕过 `isValidExternalUrl` 安全边界。

技术细节

该漏洞的核心在于 Electron 应用中对外部 URL 验证逻辑的绕过。DeepChat 开发团队此前为了修复类似漏洞,在 `preload/index.ts` 中对 `api.openExternal()` 进行了限制,强制要求通过 `isValidExternalUrl` 验证。然而,Electron 提供了多种打开链接的方式,开发人员忽略了通过原生窗口事件打开新窗口的路径。

具体漏洞点位于 `tabPresenter.ts` 文件中。当 DeepChat 渲染 AI 返回的 Markdown 内容时,如果遇到包含 `target="_blank"` 的链接,Electron 会触发新建窗口的事件。`tabPresenter.ts` 拦截了该事件,但直接调用了 Node.js 环境下的 `shell.openExternal(url)` 来处理该 URL。由于这一调用发生在主进程而非经过严格验证的预加载脚本上下文中,它绕过了 `isValidExternalUrl` 的安全检查。

利用该漏洞,攻击者只需让 AI 模型返回包含恶意 Scheme(如 `file:///`、`custom-protocol://` 等)的 Markdown 链接。一旦用户交互或系统自动处理该链接,恶意 URL 将被传递给操作系统执行,从而导致任意命令执行。

攻击链分析

STEP 1
步骤1:准备恶意载荷
攻击者构造包含恶意 URL Scheme(如 file:// 或自定义协议)的 Markdown 链接,并设置 target="_blank" 属性。
STEP 2
步骤2:投递载荷
攻击者通过控制 AI 模型的输出端点,或者诱导用户输入特定 Prompt,使 DeepChat 应用渲染该恶意 Markdown 内容。
STEP 3
步骤3:触发漏洞
DeepChat 渲染链接,当用户点击或应用尝试处理新窗口请求时,触发 `tabPresenter.ts` 中的事件处理逻辑。
STEP 4
步骤4:绕过安全检查
漏洞代码直接调用 `shell.openExternal(url)`,绕过了预加载脚本中定义的 `isValidExternalUrl` 白名单验证机制。
STEP 5
步骤5:执行代码
操作系统接收并执行恶意 URL 关联的命令,导致攻击者在目标机器上实现远程代码执行。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC Concept: Malicious Markdown Payload // This payload simulates a response from a compromised AI endpoint. // When rendered in DeepChat < v1.0.4-beta.1, the 'target="_blank"' attribute // triggers the vulnerable tabPresenter.ts handler, which calls shell.openExternal(). const maliciousMarkdown = ` # Security Advisory Please check the system configuration by clicking the link below: [Check System Logs](file:///etc/passwd) [Install Update](custom-protocol://malicious-command -argument) [External Link](http://evil.com/exploit) `; // Attack Flow: // 1. AI Endpoint returns the 'maliciousMarkdown' string. // 2. DeepChat renders the Markdown. // 3. The user clicks the link, or the renderer processes the target="_blank". // 4. tabPresenter.ts intercepts the event and calls shell.openExternal('file:///etc/passwd'). // 5. The OS executes the command, bypassing the security check.

影响范围

DeepChat < v1.0.4-beta.1

防御指南

临时缓解措施
如果无法立即升级,建议在网络层面限制 DeepChat 对不可信外部域名的访问,并严格监控 AI 端点的输出内容,过滤包含 `target="_blank"` 及非标准协议(如 file://, shell:// 等)的链接。

参考链接