图像文件通常被视为安全文件,人们在处理时往往未意识到其潜在的安全隐患。这些图像文件,尤其是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文件。因此,若在将图像文件输入转换服务前进行净化处理,有效载荷将被清除,从而阻止攻击发生。Core 中的 Deep Content Disarm and Reconstruction CDR)技术,通过对文件进行净化与重建Core 已知及未知的文件传播威胁。凭借对160余种常用文件格式的支持及数百种文件重建选项,OPSWATDeep CDR™技术能消除任何潜在的嵌入式威胁,确保净化后的文件在保持安全内容的同时完全可用。




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