Docling XXE 漏洞 CVE-2026-31248 允许攻击者触发 XML 炸弹 DoS
CVE-2026-31248: Docling METS GBS 后端通过 2.61.0 未能禁用 etree.fromstring() 中的实体解析,通过精心制作的 .tar.gz 归档文件启用 XML 炸弹攻击。

文章标题:Docling XXE漏洞CVE-2026-31248允许攻击者触发XML炸弹DoS
执行摘要
一个严重的XML外部实体(XXE)漏洞,被追踪为CVE-2026-31248,影响了Docling文档处理库的METS GBS后端,直到版本2.61.0。这个漏洞允许未经身份验证的攻击者通过提交一个特别制作的.tar.gz归档文件,包含一个带有嵌套实体定义的恶意XML文件——被称为XML炸弹或十亿笑声攻击——来触发拒绝服务(DoS)条件。该漏洞源于后端使用Python的etree.fromstring()而没有禁用实体解析,从而允许指数级实体扩展,可能会耗尽系统内存和CPU资源。Docling维护者已经确认了这个问题;预计在即将发布的版本中会有修复。
技术分析
Docling是由Docling项目开发的开源文档转换库,旨在解析和转换包括PDF、DOCX和基于XML的METS(元数据编码和传输标准)文件在内的各种文档格式。METS GBS(谷歌图书风格)后端特别处理包装在.tar.gz归档文件中的XML元数据。
根据在项目GitHub仓库上发布的漏洞披露,METS GBS后端从.tar.gz归档文件中提取XML文件,并使用Python的xml.etree.ElementTree.fromstring()方法进行验证。默认情况下,这个解析器解析XML实体——当这个功能被启用时,允许实体扩展攻击。
XML炸弹技术,也称为十亿笑声攻击,利用递归实体定义。攻击者构建一个XML文档,其中实体在嵌套链中引用其他实体,导致解析器将一个小输入(例如,几千字节)扩展成千兆字节的内存数据。例如,定义一个实体&lol;扩展到&lol1;&lol1;...重复指数级增长,可以迅速耗尽可用内存和CPU,导致应用程序崩溃或使主机无响应。
攻击者可以将这样的恶意XML文件嵌入到.tar.gz归档文件中,并将其提交给任何使用Docling的METS GBS后端的服务或应用程序。在提取和解析过程中,etree.fromstring()调用在没有限制的情况下处理实体定义,触发指数级扩展。该漏洞存在于所有Docling版本中,包括2.61.0。
截至本文撰写时,CVE-2026-31248尚未被正式分配CVSS分数。然而,根据攻击向量——通过网络传递,低复杂性,无需身份验证——以及影响(通过资源耗尽导致可用性损失),预计严重性将很高,可能在CVSSv3.1下的7.5-8.0范围内。攻击不会导致数据泄露或代码执行,限制其范围为拒绝服务。
该问题通过项目GitHub问题跟踪器报告。披露包括一个概念验证,展示了XML炸弹有效载荷及其对未修补版本的影響。Docling维护者已经确认了这一发现,并正在努力修复XML解析器中禁用实体解析的问题。
缓解措施与建议
在Docling的修补版本发布之前,使用该库的组织——特别是那些将METS GBS后端暴露给不受信任输入的组织——应该实施以下缓解措施:
- 手动禁用实体解析:如果可能,修改应用程序代码,使用
etree.fromstring()与parser = etree.XMLParser(resolve_entities=False)而不是默认解析器。这可以完全防止实体扩展。 - 验证归档内容:在
.tar.gz归档文件到达解析器之前,实施预处理检查,拒绝包含具有实体定义的XML文件。 - 应用资源限制:在操作系统或容器级别(例如,cgroups,ulimit)配置内存和CPU限制,以限制任何成功的XML炸弹攻击的影响范围。
- 监控异常资源使用:部署监控规则,对处理文档上传的服务中的内存或CPU消耗的突然激增发出警报。
防御者应该关注Docling GitHub仓库的修补版本,并在一旦可用时立即应用。
订阅更新
将最新的网络安全资讯直接发送到您的邮箱。

