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 允许工单附件**没有文件类型限制**。

然后在不提供任何**“Issue Details”**的情况下,点击**“Create Ticket”**提交工单。
应用程序会将我们重定向回工单提交表单,并提示错误**“Issue Details is a required field”**。
利用此页面,我们可以在不实际提交工单的情况下,获取到我们 JavaScript 文件 (`test.js`) 的下载链接。


一旦获取到此链接,返回工单提交表单。
点击 HTML 编辑器并粘贴此 payload,将 `script` 标签的 `src` 属性替换为之前获取的链接。
```
```
以下是完整的 payload 示例,其中 `[LINK_HERE]` 已被替换为之前获取的链接:
```
```
然后提交工单。


当管理员或客服人员查看我们的恶意工单时,payload 将被触发。

**结果:**
当管理员/客服人员打开恶意工单时,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 所阻止。

但是,应用程序上实现的 CSP 允许内联 JavaScript。

在 JavaScript 文件上传被阻止的情况下,攻击者仍然有可能执行恶意操作。让我们考虑以下 payload:
```
```
Base64 形式的 payload 解码后的内容为:
```
```
此 payload 允许攻击者将查看该恶意工单的 agent 或 administrator 重定向到任意网站,例如钓鱼网站。
以下是查看包含上述 payload 的工单后的结果。

标签:osTicket, PoC, 多模态安全, 存储型跨站脚本, 数据可视化, 暴力破解, 漏洞分析, 路径探测