WesWrench/CVE-2026-36214

GitHub: WesWrench/CVE-2026-36214

该项目披露并验证了 osTicket 工单系统中因 Bootstrap Tooltip 组件缺陷导致的存储型跨站脚本漏洞(CVE-2026-36214)。

Stars: 1 | Forks: 0

# CVE-2026-36214 - osTicket 中因易受攻击的 Bootstrap Tooltip 组件导致的存储型跨站脚本攻击 (XSS) ## 受影响版本 - **已测试并确认存在漏洞:** - osTicket **1.18.2** - osTicket **1.18.3** - **受影响版本:** - v1.10 - v1.17.8 (不包含) - v1.18 - v1.18.4 (不包含) 如下方所示,该组件自 **2015年5月13日** 起便已存在于 osTicket 代码库中: - 文件:`scp/js/bootstrap-tooltip.js` - 提交记录:`e5a28410ae7c238932eef07c2b3568da015a792c` 此提交记录关联的 osTicket 发布标签可追溯至 **1.10 版本**,这表明该存在漏洞的 Bootstrap Tooltip 组件已包含在跨越多个主要版本的众多 osTicket 发行版中。这种长期的代码包含强烈暗示,**多年来发布的许多 osTicket 版本均受到影响**。 ## 1. 概述 osTicket 是一款广泛使用的开源工单系统,允许最终用户在创建工单和回复时提交富 HTML 内容和文件附件。 osTicket 定义了三大类用户: - **Admin** - 拥有完全的管理员权限 - 管理全局配置、用户、角色、插件 - **Agent** - 拥有工单的操作权限 - 可以查看、回复、转交和关闭工单 - **User (Client / End User)** - 只能访问客户端门户 - 可以创建和查看自己的工单 **User** 提交的任何 HTML 内容稍后都可能会在 **Agent** 或 **Admin** 的浏览器中渲染,这使得客户端漏洞具有特别严重的影响。 ## 2. 概念验证 首先,使用您的最终用户账号登录并转到工单创建页面。 然后创建一个包含 payload 的 JavaScript 文件(例如:test.js)。例如: ``` alert(123); ``` 注意:默认情况下,osTicket 允许工单附件**没有文件类型限制**。 ![上传 JS 文件](https://static.pigsec.cn/wp-content/uploads/repos/cas/ba/ba283731c8d8cefebca943f6537ba050d27e795addc7fff9ab6540e532836563.png) 然后在不提供任何**“Issue Details”**的情况下,点击**“Create Ticket”**提交工单。 应用程序会将我们重定向回工单提交表单,并提示错误**“Issue Details is a required field”**。 利用此页面,我们可以在不实际提交工单的情况下,获取到我们 JavaScript 文件 (`test.js`) 的下载链接。 ![获取我们上传的 JS 文件的直接链接](https://static.pigsec.cn/wp-content/uploads/repos/cas/9d/9d0e54770a398a20ccbdcbfaf5bcedd9e843f932dda0a2b6a07e988d1754d58b.png) ![我们上传的 JS 文件的 Content-Type](https://static.pigsec.cn/wp-content/uploads/repos/cas/91/91a759b18b173b5c012959b3b46cef58a8fe5f90ec6f05bca7c460cbc632ef5b.png) 一旦获取到此链接,返回工单提交表单。 点击 HTML 编辑器并粘贴此 payload,将 `script` 标签的 `src` 属性替换为之前获取的链接。 ```
``` 以下是完整的 payload 示例,其中 `[LINK_HERE]` 已被替换为之前获取的链接: ```
``` 然后提交工单。 ![我们上传的 JS 文件的 Content-Type](https://static.pigsec.cn/wp-content/uploads/repos/cas/91/91a759b18b173b5c012959b3b46cef58a8fe5f90ec6f05bca7c460cbc632ef5b.png) ![提交恶意 payload](https://raw.githubusercontent.com/WesWrench/CVE-2026-36214/main/images/content-submit_malicious_payload.png) 当管理员或客服人员查看我们的恶意工单时,payload 将被触发。 ![Payload 已触发](https://static.pigsec.cn/wp-content/uploads/repos/cas/b2/b2951b68fa87cfd69b5bb424fa745bbd790973ce92257f1c9f0d3458ba9240a6.png) **结果:** 当管理员/客服人员打开恶意工单时,JavaScript payload 将被加载并在 admin/agent 会话的上下文中执行。 这会导致**存储型 XSS**,允许完整的会话被劫持(例如,通过 ezXSS,或利用 CSRF 执行 admin/agent 操作)。 ## 3. 影响 ### Agent 账号被接管 如果恶意工单被 **Agent** 查看,存储型 XSS 将在 Agent 已认证的会话上下文中执行。 这使得攻击者能够有效地**接管 Agent 会话,而无需提取会话 cookie**(例如,即使在无法提取 cookie 的场景下,或在使用像 ezXSS 这样的盲打 XSS 平台时)。一旦 XSS 运行,攻击者就可以执行**该受损 Agent 有权执行的任何操作**,例如: - 查看该 Agent 有权访问的工单(通常包含服务台的大部分工单) - 下载并查看工单附件 - 回复工单并与用户互动 - 转交、关闭或以其他方式更新工单状态 - 添加内部备注(如果被允许) 这会导致 Agent 的操作能力以及工单流程的机密性/完整性遭到完全破坏。 ### 管理员账号被接管 如果恶意工单被**管理员**查看,影响将升级为整个应用程序遭到破坏。攻击者可以: - 接管管理员会话 - 修改**全局配置**(设置、权限等) - 通过篡改关键配置值引发**拒绝服务** - 修改管理“页面”/模板,从而在应用 UI 上实现**全局挂马**和钓鱼 - 创建新的 **Agent** 和/或**管理员**账号以建立持久访问 ### 关于受限文件上传和内容安全策略 (CSP) 的说明 尽管 osTicket 的默认配置允许上传 JavaScript 文件,但可以在 Admin Panel 中配置 osTicket,禁止最终用户上传 JavaScript 文件。 此外,客服人员和管理员使用的 Staff Control Panel 强制执行了内容安全策略 (CSP),该策略会阻止执行来自第三方域名的 JavaScript。 让我们以以下 payload 为例: ```
``` 下方的截图显示,从 `https://evil.com` 加载脚本的操作被 Staff Control Panel 强制执行的 CSP 所阻止。 ![Payload 被 CSP 拦截](https://static.pigsec.cn/wp-content/uploads/repos/cas/df/dfe3647a84ff1351ff17aa0659302f22b3e5f001d1ce4279d61a25320ae8bdc1.png) 但是,应用程序上实现的 CSP 允许内联 JavaScript。 ![Agent/Admin 面板上的 CSP](https://static.pigsec.cn/wp-content/uploads/repos/cas/1b/1b04e64af897d39b7bf5933ca69e354d46d026b6a9fe99f80cb9ddd1e28ecb7c.png) 在 JavaScript 文件上传被阻止的情况下,攻击者仍然有可能执行恶意操作。让我们考虑以下 payload: ```
``` Base64 形式的 payload 解码后的内容为: ``` ``` 此 payload 允许攻击者将查看该恶意工单的 agent 或 administrator 重定向到任意网站,例如钓鱼网站。 以下是查看包含上述 payload 的工单后的结果。 ![重定向到任意网站](https://static.pigsec.cn/wp-content/uploads/repos/cas/45/451e4494cb6f39ea23aca4d3352684d530dc3e9107f0ea9678be098142e88130.png)
标签:osTicket, PoC, 多模态安全, 存储型跨站脚本, 数据可视化, 暴力破解, 漏洞分析, 路径探测