图像文件通常被认为是安全文件,在处理时往往没有意识到潜在的安全问题。这些图像文件,尤其是 SVG 文件,是发起跨站脚本 (XSS) 或 XML 外部实体 (XXE) 注入等危险攻击的常见攻击载体。与 XSS 攻击不同,XXE 注入攻击不会影响客户端,但会严重影响服务器端,从而导致若干严重影响。 在本博文中,我们将探讨 XXE 攻击的本质,特别是通过可扩展矢量图形 (SVG)攻击向量进行的攻击,讨论一个真实案例,并提供OPSWAT 产品的缓解策略。
背景信息
在深入研究该漏洞之前,我们首先要研究 XML、SVG 文件格式以及 XXE 注入技术背后的根本原因。
XML 文件格式
XML(可扩展标记语言)是一种独立于平台的文件格式,用于存储和交换结构化数据。XML 支持分层结构,因此非常适合表示复杂的数据关系。XML 格式的数据按标记、属性和内容组织,与 HTML 的方式相同。不过,XML 具有高度的定制性和可扩展性,允许用户根据自己的要求定义标记和属性。下图显示了IT 部门的 XML 格式数据。
XML 实体
在 XML 中,实体是数据的占位符,可以将文本或整个文档嵌入到当前文档中。从语法上讲,XML 中的实体是用逗号(&)和分号(;)括起来的。在下面的示例中,文档类型定义中定义了两个实体,并将其引用到 XML 文件的内容中。这两个实体的区别在于,内部实体是在当前文档中定义和引用的,而外部实体的内容来自外部文档。在解析和解析实体后,实体会被替换为相应的数据。
SVG 文件格式
SVG(可缩放矢量图形)是一种通用文件格式,广泛用于网络开发、图形设计和数据可视化。与 JPEG 或 PNG 等传统图像格式不同,SVG 使用 XML 格式来描述二维矢量图形。具体来说,SVG 图像由线条、曲线和多边形等几何图形组成,由数学公式而不是单个像素定义。因此,SVG 图形可以无限缩放而不会降低质量,是响应式网页设计和高分辨率显示器的理想选择。由于 SVG 格式的 XML 性质,它还为 XML 相关的漏洞利用提供了潜在的攻击向量。
XXE 注射技术和影响
XXE 注入技术滥用了外部实体解析机制。具体来说,当解析器遇到外部实体时,它会根据资源文件的类型获取相应的内容。
如果资源文件是本地文件,解析器将检索文件内容并用相应数据替换实体。这将允许攻击者显示服务器配置、凭据等敏感数据。要成功利用该漏洞,攻击者需要声明一个引用敏感文件内容的外部实体,例如 /etc./password。
但是,如果资源是远程的或内部服务,解析器就会尝试通过请求定义的 URL 来获取数据。这可能会被利用来进行服务器端请求伪造(SSRF)。在这种情况下,攻击者会将有效载荷改为代表服务器请求的受攻击服务的 URL,而不是引用本地文件。
通过 SVG 文件错误处理的 XXE 攻击:案例研究
我们将针对一个实际案例,即 SVGLIB 库 0.9.3 版的 XXE 进行调查。该漏洞于 2020 年被发现,并被归类为CVE-2020-10799。我们将首先检查该库的流程,分析易受攻击的代码片段,最后通过 SVG 到 PNG 的转换服务证明漏洞的利用。目标是使用易受攻击的 SVGLIB 版本进行转换的自实现网络应用程序。
svglib 软件包
svglib 是一个纯 Python 库,旨在使用 Report Lab 开源工具包将 SVG 格式转换为其他格式,如 PNG、JPG、PDF 等。由于 SVG 文件使用 XML 格式,因此解析和处理 XML 也是该库主要流程的相关部分。该库的 3 个主要步骤如下:
剥削
漏洞存在于 SVG 文件解析过程中,如果配置错误,将泄漏服务器上的敏感数据,并可能导致 SSRF 漏洞。进一步检查 svglib 软件包的源代码,发现 XXE 漏洞是由于在加载 SVG 文件时使用了解析和处理 XML 格式的默认配置。该软件包使用了lxml软件包,其中XMLParser类的resolve_ entities属性默认值为True。
补救措施
问题的根本原因是不安全的 XML 解析,该解析在 svglib 库和 lxml 依赖关系的一部分中实现不当。因此,使用该库的漏洞版本可能会导致敏感信息泄露、服务器端请求伪造,甚至潜在的远程代码执行,具体取决于部署环境和应用程序的功能。第三方库引入的漏洞对大型应用程序的安全性来说是一个严重问题,因为它们的依赖关系可能很复杂,而且不透明。
MetaDefender 软件 Supply Chain
OPSWAT MetaDefender 软件 Supply Chain结合多种技术,提供更高的可视性和对供应链风险的强大防御。OPSWAT 软件 Bill of Materials (SBOM) 有助于获得开源第三方软件包的可见性,并识别软件依赖性、漏洞或存在于容器映像每一层下的其他潜在风险。由于集成了 30 多个防病毒引擎,Multiscanning 技术的恶意软件检测率达到 99.99% 以上。此外,Proactive DLP (数据丢失防护)技术还能识别密码、机密、令牌、API 密钥等凭证或遗留在源代码中的其他敏感信息。有了我们的零信任威胁检测和预防技术,您的软件开发生命周期(SDLC)就不会受到恶意软件和漏洞的攻击,从而加强了应用程序的安全性和合规性。
MDSSC 可检测在 svglib 中发现的 CVE。它还会在 SBOM 报告中标记 CVE 严重程度,并识别易受攻击的软件版本。
MetaDefender Core -Deep CDR
使该漏洞成为可能的另一个原因是,应用程序会处理一个注入了恶意有效载荷的 SVG 文件。因此,如果在将图像文件输入转换服务之前对其进行消毒,就可以消除有效载荷,从而防止攻击的发生。MetaDefender Core 中的 Deep Content Disarm and Reconstruction (CDR) 技术通过对文件进行消毒和重建,防止已知和未知的文件传播威胁。OPSWAT的Deep CDR 支持 160 多种常见文件类型和数百种文件重建选项,可消除任何潜在的嵌入式威胁,确保经过消毒的文件保持完整可用性和安全内容。

Luan Pham 参加了OPSWAT 的 "关键基础设施网络安全研究生奖学金计划",目前他是OPSWAT 的协理渗透测试员。他热衷于保护OPSWAT 的产品免受潜在威胁并分享他的知识。