我最近在 SuiteCRM 中发现了两个漏洞,它们为低权限用户提供了一条攻击链,可在底层操作系统上实现代码执行。该攻击链是跨站脚本(XSS),可用于执行跨站请求伪造(CSRF),进而通过篡改应用程序配置和投毒日志文件实现远程代码执行。这一切通过一个包含恶意 JavaScript 的文件上传实现,低权限用户可以诱骗具有管理员权限的用户运行该文件。我附上的概念验证文件及视频演示了低权限用户执行此攻击并获取托管 SuiteCRM 系统上的反弹 Shell 的过程。
该问题已在 SuiteCRM 7.11.17 版本中修复。
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
我并非完全同意此评分,因为该漏洞利用确实需要管理员访问权限,这将使 PR:L 变为 PR:H,从而将最终得分从 8.8 调整为 7.2。
我认为评分应为:CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H
参考:https://nvd.nist.gov/vuln/detail/CVE-2020-28328
SuiteCRM 版本 7.11.15
存储型跨站脚本存在于“创建文档”文件上传功能中。低权限用户能够上传包含任意内容的文件。然后,用户可以通过查看提供的下载文档链接来获取文件在文件系统中的位置,即找到 id 参数。这个长而随机的值是 /uploads/ 目录中文件的名称。用户可以将任意 JavaScript 放入此文件中,然后将链接发送给另一个用户。这可用于劫持另一个用户的会话和/或代表该用户执行操作,PoC 视频中将会演示。
在发现我可以通过跨站脚本的会话劫持成为管理员后,我进一步发现我可以控制“管理 → 系统设置”下的系统属性,即日志文件属性。日志文件扩展名被很好地阻止了,但我能够使用 BurpSuite 将“日志文件名”值更新为任意值,包括 .php 扩展名。我通过提交一个没有任何更改的请求并捕获实际更新值的 POST 请求来实现这一点。我通过 logger_file_name 参数将文件名更改为 shell.php,并简单地将“扩展名”字段留空。这生成了一个可以在浏览器中通过 web 根目录访问的 php 文件,但我需要文件内有一些 php 代码来执行。
接下来,我检查了文件中的输出,并注意到如果我将日志记录设置为 info(我认为这是默认设置...),我可以通过在更新用户时控制用户属性(例如用户的名字或姓氏)来向文件中输入内容。因此,我捕获了一个请求并在 Burp 中将一些 php 代码 <?php $id =id; echo $id; ?> 插入到 last_name 表单字段中。这导致在 Linux 上以 web 服务器用户 www-data 的上下文输出了 id 命令的结果。根据日志文件,我能看到的唯一被转义的字符是单引号、双引号和反斜杠。你可以在后端通过 tail 查看 SQL 日志文件来验证这一点。
我能够以管理员用户身份执行所有这些操作,因为我能够获取会话 cookie,但要形成有效的攻击链,我需要让 JavaScript 在管理员用户上下文中执行这些操作。我通过几次 fetch 请求编写了脚本,用于执行每个 POST 请求。第一个更新系统属性,第二个更新管理员用户的“姓氏”字段,最后一个对带有恶意 php 代码的新创建的日志文件执行 GET 请求。恶意 php 代码将对我的机器执行 curl 请求,下载一个 bash 反弹 shell,然后将 curl 请求的输出直接传给 bash 执行代码。然后我使用 XSS 部分讨论的相同方法上传此脚本,并以管理员用户身份重新访问新链接。通过一个托管我的 bash 文件的 web 服务器和一个正在运行的 netcat 监听器,我成功获得了反弹 Shell。
确保在 Apache 中设置了 AllowOveride All。nginx 没有此设置,我也没有在 nginx 上进行测试。
更新到最新版本的 SuiteCRM,至少是 7.11.17 版本。
这是具体的修复。提交 1618af16eaa494c4551bac961e5ac8fc3d87ab8c
SuiteCRM 在整个报告过程中反应非常迅速。他们确认了 RCE 并被修复。XSS 是由 web 服务器配置导致的,因此他们不将其视为漏洞。不过,他们表示将根据此情况更新文档。
2020年8月6日 -> 向 [email protected] 报告了两个问题
2020年8月7日 <- SuiteCRM 确认收到报告,并将问题提交给内部安全团队
2020年8月21日 -> 我联系 [email protected] 进行跟进
2020年8月25日 <- SuiteCRM 回复关于 web 服务器配置/XSS 的问题
2020年8月26日 -> 我回复说建议 AllowOveride All 可缓解 XSS
2020年9月16日 -> 我联系 [email protected] 进行跟进
2020年9月17日 <- SuiteCRM 回复确认该问题为部分问题
2020年10月29日 更新发布
2020年11月3日 -> 我联系 [email protected] 以确保在他们那边发布文章前无需其他操作
2020年11月5日 <- SuiteCRM 回复
现在我们已发布该问题的补丁,并且已公开,从我们的角度来看,你发布关于这些漏洞的博客文章没有问题。
2020年11月5日 -> 我请求 CVE
2020年11月6日 <- CVE-2020-28328 发布
https://www.exploit-db.com/exploits/49001

他们非常易于合作,我绝对计划继续寻找并报告该软件中的漏洞!