CVE-2025-11849CVE-2025-11849是mammoth库中的一个严重目录遍历漏洞,CVSS评分为9.3分,属于严重级别。该漏洞影响mammoth库的多个语言版本,包括JavaScript包(mammoth)、Java包(org.zwobble.mammoth:mammoth)以及.NET相关包。
mammoth是一个广泛使用的开源库,用于将Microsoft Word文档(.docx格式)转换为HTML格式,常用于Web应用中处理用户上传的文档。该漏洞的根本原因在于库在处理docx文件中包含外部链接的图片(使用r:link属性而非嵌入的r:embed属性)时,缺乏对路径和文件类型的充分验证。当解析docx文件中的图片标签时,mammoth库会将URI解析为文件路径并直接读取该文件内容,然后将内容编码为base64并作为data URI包含在HTML输出中。
攻击者可以通过精心构造一个恶意的docx文件,利用此漏洞读取系统上的任意文件,包括敏感配置文件、源代码、密钥等。此外,攻击者还可以通过链接到特殊设备文件(如/dev/random或/dev/zero)来导致服务器资源过度消耗,从而造成拒绝服务攻击。该漏洞需要用户交互(UI:R)来触发,因为需要受害者打开或上传恶意的docx文件。由于影响范围广泛且利用难度较低,该漏洞对使用mammoth库处理用户上传文档的Web应用构成严重威胁。
该漏洞的技术原理基于mammoth库对docx文件中图片引用的不当处理机制。
在docx文件格式中,图片可以通过两种方式引用:
1. 嵌入方式(r:embed属性):图片数据直接嵌入在docx文件中
2. 外部链接方式(r:link属性):图片通过URI引用外部资源
当mammoth库处理包含r:link属性的图片标签时,它会执行以下操作:
1. 解析r:link属性中的URI值
2. 将URI解析为本地文件路径(使用类似new URL(link).pathname或path.resolve()的方式)
3. 直接读取该文件的内容
4. 将文件内容编码为base64
5. 以data URI的形式嵌入到输出的HTML中
漏洞的关键问题在于:
- 库没有验证解析后的路径是否在允许的目录范围内
- 库没有检查文件类型或文件扩展名
- 库没有限制可以访问的路径(如限制在docx解压目录内)
利用方式:
1. 攻击者创建一个恶意的docx文件,在其中插入一个图片元素
2. 将图片的引用方式设置为外部链接(r:link),目标指向敏感文件如file:///etc/passwd
3. 将该docx文件发送给受害者或上传到目标Web应用
4. 当应用使用mammoth库处理该文件时,敏感文件的内容会被读取并嵌入到HTML输出中
5. 攻击者可以通过查看转换后的HTML获取敏感信息
对于拒绝服务攻击,攻击者可以将r:link指向/dev/zero(无限零字节流)或/dev/random(无限随机数据),导致服务器在读取文件时消耗大量内存和CPU资源,最终造成服务不可用。