技术的迅速崛起对熟练的开发人员提出了很高的要求。开放源码软件(OSS)已成为这支日益壮大的队伍的重要工具。目前,在各种编程语言中存在着数十万个成熟的开放源码软件包。超过 90% 的开发人员在其专有应用程序中使用这些开放源码组件,凸显了开放源码软件的效率和价值主张。全球开放源码软件市场预计到 2030 年将达到 807 亿美元,年增长率预计为 16.7%,这进一步凸显了开放源码软件的重要性。
然而,开放源码软件的广泛采用也带来了新的复杂性:安全漏洞。大量相互关联的开放源码软件组件为恶意行为者提供了更广阔的攻击面。管理各种开放源码软件包之间的依赖关系非常复杂,因此很难及时发现和修补漏洞。此外,开放源码软件的安全性往往依赖于开发人员社区的警惕性和贡献。这可能导致漏洞修补的延迟,特别是对于不太受欢迎的项目。
在本文中,OPSWAT 研究生研究员研究了CVE-2023-33733,这是流行的开源库 ReportLab 中发现的一个安全漏洞。他们的分析与利用 MetaDefender Core的 软件 Bill of Materials (SBOM)功能来识别应用程序依赖项中的漏洞,包括易受攻击的 ReportLab 库。
报告实验室图书馆简介
ReportLab 是一个功能强大的开源 Python 库,可帮助用户通过 Python 代码生成功能丰富的 PDF。它为开发人员提供了一个成功的组合:灵活性、易用性和广泛的自定义选项,用于创建动态文档。该库增强了开发人员对 PDF 的控制,允许精确地加入文本、图像、表格和图表。这种自定义程度使 ReportLab 成为生成发票和数据驱动报告等动态文档的重要工具。
CVE-2023-33733 背景
CVE-2023-33733 强调了 ReportLab 库中的一个安全漏洞,该漏洞影响 ReportLab 库的多个版本。
- 发现 ReportLab 3.6.13 之前的版本存在沙箱规避漏洞,特别是在
rl_safe_eval
功能。通过 HTML 标记的颜色属性实现了利用。评估()
函数,最终导致远程代码执行。 - NVD 分析师对 CVE-2023-33733 的 CVSS 评分为7.8 HIGH。
ReportLab 安全漏洞分析
OPSWAT 研究生对 ReportLab 工作流程进行了深入分析,找出了 CVE-2023-33733 安全漏洞的根本原因。
ReportLab 使开发人员能够高效地创建 PDF。该库可轻松实现集成:导入库、定义 HTML 内容,然后使用结果函数在一行代码中生成 PDF。
我们的研究生揭示了利用 ReportLab 从 HTML 创建 PDF 的 5 个步骤。
在使用 ReportLab 从 HTML 创建 PDF 的 5 步流程中,有三个主要流程比较突出:段落处理、解析器处理和 HTML 处理流程。
如上图所示,ReportLab 中的 HTML 处理流程使用了 评估()
功能,特别是颜色属性。作为执行恶意代码的集中点,"...... 评估()
该功能促使研究人员寻求对其输入进行控制,以利用该应用程序。然而,由于沙盒由 __rl_safe_eval__
功能。
ReportLab 实施了一个名为 __rl_safe_eval__
.该沙箱排除了所有 Python 内置函数,并包括几个重载的内置函数。这种限制允许在库中执行安全代码,同时防止访问可能用于恶意目的的危险函数和库(如文件系统访问、网络通信)。
"(《世界人权宣言》) rl_safe_eval
沙箱函数实现了各种条件,以确保在使用 Python 内置的 getattr()
函数来检索并返回结果。
安全评估功能旨在通过排除危险函数和防止恶意操作来确保环境安全。但是,如果找到绕过其条件并访问强大内置函数的方法,就有可能被利用。
基于这一想法,安全研究人员试图绕过这些限制。最初,他们利用对象注入技术,使用 类型()
函数来构造一个对象,并重新定义其属性和方法,以规避在 __rl_safe_eval__
.此外,由于 ReportLab 库会重写内置函数并将其作为全局函数放入评估上下文中,因此研究人员可以利用这种实现方式访问其中一个原始内置函数。这样,他们就能绕过沙盒环境,执行恶意代码。
有效载荷的准备工作如下
然而,在 eval 上下文中执行多行表达式是不可能的。不过,可以使用列表理解技巧,利用此 CVE 的有效负载如下:
报告实验室开发模拟
研究人员发布了 CVE-2023-33733 的概念验证 (POC),证明使用 ReportLab 的漏洞版本构建的应用程序可能会受到网络攻击。为了评估这一潜在威胁,OSPWAT 研究生对一个网络应用程序进行了模拟攻击。他们利用具有 SBOM 功能的MetaDefender Core 来识别应用程序软件依赖关系中的安全漏洞,包括受影响的 ReportLab 库的存在。
为了模拟真实世界中的这种利用情况,OPSWAT 研究生研究员使用 Python 和易受攻击版本的 ReportLab 库开发了一个网络应用程序。该应用程序模拟了一个典型的使用案例:用户可以上传 HTML 文件并将其转换为 PDF 文件。
攻击者可以制作恶意 HTML 文件,其中包含旨在利用以下功能的代码 33733.这些代码可以绕过沙箱,通过 评估()
功能。
由於過時的 ReportLab 程式庫存在漏洞,成功上載惡意檔案可讓攻擊者控制應用程式伺服器。
SBOM 和主动安全的重要性
OPSWAT 研究生研究员对 CVE-2023-33733 的研究强调了与开放源码软件相关的潜在安全风险。虽然开放源码软件在开发效率和成本效益方面提供了不可否认的好处,但像在 ReportLab 中发现的这种漏洞会使组织面临网络攻击。
OPSWAT SBOM 通过为源代码和容器提供全面的组件清单来确保软件供应链的安全。它支持 10 多种语言(包括 Java、JavaScript、Go、PHP 和 Python)、500 多万个第三方开源软件组件,并利用一个包含 17K 多个漏洞的数据库,这些漏洞来自国家漏洞数据库 (NVD) 和 GitHub (GHSA)。
OPSWAT MetaDefender Core 集成了SBOM 功能,使企业能够主动应对这些风险。MetaDefender Core 扫描软件应用程序和依赖关系,识别所列组件中是否存在 CVE-2023-33733 等已知漏洞。这样,开发人员和安全团队就可以确定修补工作的优先次序,并在安全风险被利用之前将其降低。
结束语
OPSWAT 研究生对 ReportLab 漏洞(CVE-2023-33733)的研究提醒我们在软件开发生命周期中采取积极主动的安全措施的重要性。通过利用OPSWAT MetaDefender Core 等工具,企业可以深入了解其软件依赖性,并在被攻击者利用之前发现潜在漏洞。
此外,OPSWAT 还提供一套全面的网络安全解决方案,不仅限于漏洞扫描。 这些解决方案提供实时威胁检测、数据安全和端点保护,保护企业免受各种网络威胁。通过采用包括MetaDefender Core 等工具在内的分层安全方法,企业可以充分利用开放源码软件的优势,同时将相关的安全风险降至最低。