ajax.tickets.php 中的 BOLA / IDOR 漏洞对象级授权失效 (BOLA):不安全的直接对象引用 (IDOR)
include/ajax.tickets.php→viewField()函数
由 @JF0x0r 报告 · 2026年3月27日 状态:已修复 - 修复已在 osTicket v1.17.8 / v1.18.4 中发布
| 字段 | 详情 |
|---|---|
| 漏洞类型 | BOLA / IDOR(对象级授权失效) |
| 目标 | osTicket v1.18-git - 提交 2570d69 |
| 组件 | include/ajax.tickets.php |
| 函数 | viewField() - 第 805–806 行 |
| 端点 | GET /scp/ajax.php/tickets/{ticket_id}/field/{field_id}/view |
| CVSS 4.0 评分 | 8.2 高危 - AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N |
| CWE | CWE-862(缺失授权)、CWE-639(通过用户控制的密钥绕过授权) |
| 状态 | ✅ 已修补 — 已在 osTicket v1.17.8 和 v1.18.4 中修复 |
我是 Juan Felipe Oz(@JF0x0r),一名热衷于开源安全的安全研究员。我这样做不是为了赏金,而是因为我坚信人们所依赖的工具应该是安全的。当我发现问题时,我会负责任地报告、妥善记录,并在修复后公之于众。
在对 osTicket 的 AJAX 子系统进行手动代码审查时,我注意到 ajax.tickets.php 中有些不对劲。viewField() 函数处理查看工单字段数据的请求——它确实会检索工单对象并验证字段是否存在。但它从不检查发出请求的客服人员是否真的有权限访问该工单。
没有 checkStaffPerm()。没有部门验证。什么都没有。
这意味着任何已认证的客服人员,即使是严格限制在单个部门的客服人员,也可以读取系统中任何其他部门的工单字段,只需知道或猜测 ticket_id 和 field_id 即可。这些是连续的整数,很容易枚举。
更让这个问题一目了然的是与 editField() 的对比——它是同一文件中紧挨在上方的姊妹函数。editField() 正确调用了 $ticket->checkStaffPerm($thisstaff, Ticket::PERM_EDIT),并在违规时返回 HTTP 403。写入操作的修复早已实现——只是从未应用到读取操作上。
我在受控的实验室环境中录制了一段完整的端到端漏洞利用演示:
视频演示了以下过程:
agent_a 已完成认证,访问权限仅限于 Dept-A本仓库中的 exploit.py 脚本自动化了整个攻击链(认证 → 枚举 → 未授权字段访问),在评估期间用于确认该问题的影响范围远超手动测试。
ticket_id / field_id 整数使批量抓取变得轻而易举在 viewField() 中插入一行代码,紧接在检索到工单对象之后——与 editField() 已经正确执行的操作完全一致。完整的技术细节、diff 和 CVSS 分解见随附的报告。
📄 BOLA_IDOR_osTicket_Report_v2.pdf
osTicket 确认了该报告,并通过在解析/渲染所请求的字段之前添加 $ticket->checkStaffPerm($thisstaff) 实施了缓解措施——与 editField() 中已有的检查保持一致。现在,员工必须先拥有对父工单的访问权限,才能查看字段数据。
osTicket 建议在公开分享完整漏洞利用步骤之前留出短暂的升级缓冲期。本仓库遵循该建议——请参阅下方的披露时间线。
.
├── README.md # This file
├── BOLA_IDOR_osTicket_Report_v2.pdf # Full technical disclosure report
├── exploit.py # PoC automation script
└── PoC_osTicket.mov # Local copy of the demo video
我在发布任何内容之前,已私下向 osTicket 安全团队报告了此问题。本仓库仅在负责任披露期结束后才公开,现在官方补丁已发布,完整的技术报告可供查阅。如果您是 osTicket 维护者并有疑问,欢迎直接通过 GitHub 联系。
由 @JF0x0r 发现 · 开源安全至关重要。
| 详情 | 参考 |
|---|
| 补丁提交 | d590a9770d25159fb7741681f36e23a35f1fb5e9 |
| 修复版本 | v1.17.8 · v1.18.4 |
| 官方下载 | osticket.com/download |
| 发布类型 | 加速安全发布 |
| 致谢 | Juan Felipe Oz(@JF0x0r) |
| 日期 | 事件 |
|---|
| 2026年3月27日 | 发现并记录漏洞 |
| 2026年3月27日 | 报告发送至 [email protected] |
| 2026年6月17日 | osTicket 确认该问题并分享缓解补丁以供验证 |
| 2026年6月17日 | osTicket 发布包含修复的 v1.17.8 和 v1.18.4(提交 d590a9770d25159fb7741681f36e23a35f1fb5e9) |
| — | CVE 分配待定,通过 GitHub CNA 进行 |