开源在线代码执行系统Judge0中的沙箱逃逸漏洞暴露系统以完成接管

Judge0 开源在线代码执行系统中已披露多个严重安全漏洞,可被利用以获取目标系统上的代码执行权限。

澳大利亚网络安全公司 Tanto Security 在今天发布的一份报告中表示,这三个缺陷本质上都很严重,允许“拥有足够访问权限的对手执行沙箱逃逸并获得主机的 root 权限”。

Judge0(发音为“judge Zero”)被其维护者描述为“强大的、可扩展的、开源的在线代码执行系统”,可用于构建需要在线代码执行功能的应用程序,例如候选人评估、电子学习,以及在线代码编辑器和 IDE。

据其网站称,该服务已被 AlgoDaily、CodeChum 和 PYnative 等 23 家客户使用。迄今为止,该项目已在 GitHub 上分叉 412 次。

以下列出了 Daniel Cooper 于 2024 年 3 月发现并报告的缺陷 –

CVE-2024-28185(CVSS 评分:10.0) – 应用程序不考虑沙箱目录内放置的符号链接,攻击者可利用该符号链接写入任意文件并在沙箱外获得代码执行。
CVE-2024-28189(CVSS 评分:10.0) – CVE-2024-28185 的补丁绕过,源于对沙箱内不受信任的文件使用 UNIX chown 命令。攻击者可以通过创建指向沙箱外部文件的符号链接 (symlink) 来滥用此功能,从而允许攻击者对沙箱外部的任意文件运行 chown。
CVE-2024-29021(CVSS 评分:9.1)- Judge0 的默认配置使服务容易通过服务器端请求伪造 (SSRF) 进行沙箱逃逸。这使得对 Judge0 API 有足够访问权限的攻击者能够以目标计算机上的 root 身份获取未沙盒的代码执行。
该问题的根源在于名为“ isolate_job.rb ”的 Ruby 脚本,该脚本负责设置沙箱、运行代码并存储执行结果。

具体来说,它需要在设置 bash 脚本以基于提交语言执行程序之前在目录中创建符号链接,以便允许写入非沙盒系统上的任意文件。

威胁参与者可以利用此缺陷覆盖系统上的脚本,并在沙箱之外以及运行提交作业的 Docker 容器上获得代码执行。

更重要的是,攻击者可以在 Docker 容器之外升级其权限,因为它是使用docker-compose.yml 中指定的特权标志运行的。

Judge0 的 Herman Došilović 表示:“这将允许攻击者挂载 Linux 主机文件系统,然后攻击者可以写入文件(例如恶意 cron 作业)来访问系统。”

“从此时起,攻击者将可以完全访问 Judge0 系统,包括数据库、内部网络、Judge0 Web 服务器以及 Linux 主机上运行的任何其他应用程序。”

另一方面,CVE-2024-29021 与允许与内部 Docker 网络内可用的 Judge0 的 PostgreSQL 数据库进行通信的配置有关,从而使攻击者能够武器化 SSRF 以连接到数据库并更改相关数据类型列并最终获得命令注入。

经过负责任的披露,这些缺陷已在 2024 年 4 月 18 日发布的1.13.1 版本中得到解决。建议 Judge0 用户更新到最新版本,以减轻潜在威胁。

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。查看原文

为您推荐