IPBUF安全漏洞报告
English
CVE-2026-40682 CVSS 9.1 严重

CVE-2026-40682 Apache OpenNLP XXE漏洞

披露日期: 2026-05-04

漏洞信息

漏洞编号
CVE-2026-40682
漏洞类型
XML外部实体注入 (XXE)
CVSS评分
9.1 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Apache OpenNLP

相关标签

XXEApache OpenNLPSSRF文件泄露XML注入

漏洞概述

Apache OpenNLP 的 DictionaryEntryPersistor 类在解析 XML 字典文件时存在安全配置缺陷。由于未禁用 DTD 处理且未开启安全处理特性,攻击者可诱导应用加载包含恶意 DOCTYPE 声明的字典文件,从而触发 XXE 漏洞。该漏洞可能导致敏感文件泄露或服务端请求伪造(SSRF),对系统机密性和完整性构成严重威胁。

技术细节

该漏洞源于 Apache OpenNLP 中 `DictionaryEntryPersistor` 类的静态 `SAXParserFactory` 初始化方式不安全。在类加载时,该 Factory 既未启用 `FEATURE_SECURE_PROCESSING` 标志,也未禁用 DTD 处理。当调用 `create(InputStream, EntryInserter)` 方法解析用户提供的字典输入流时,仅设置了命名空间支持,而完全保留了外部实体解析和 DOCTYPE 声明的功能。这一行为与项目中其他路径正确配置的 `XmlUtil.createSaxParser()` 助手不一致。攻击者可构造包含恶意 DOCTYPE 声明的 XML 字典文件(如停用词列表),利用 `file://` 协议读取服务器本地敏感文件,或利用 `http://` 协议发起 SSRF 攻击。攻击发生在应用处理字典条目之前的 SAX 解析阶段,由于公开的 `Dictionary(InputStream)` 构造函数直接代理此方法,且文档建议加载用户提供的字典,因此无需用户交互即可远程利用。

攻击链分析

STEP 1
1. 攻击准备
攻击者构造一个包含恶意 DOCTYPE 声明的 XML 文件,其中定义了指向敏感本地文件(如 /etc/passwd)或内部网络资源的实体。
STEP 2
2. 投递载荷
攻击者诱导应用程序加载该恶意文件。由于 Apache OpenNLP 允许通过 Dictionary(InputStream) 构造函数加载用户提供的字典,这可以通过上传功能或配置更新实现。
STEP 3
3. 触发解析
应用程序调用 DictionaryEntryPersistor.create() 方法。由于 SAXParser 未禁用 DTD,解析器会处理恶意 DOCTYPE 声明并尝试解析定义的实体。
STEP 4
4. 执行攻击
解析器读取本地文件内容或向指定 URL 发起请求,将数据嵌入到解析结果中,导致信息泄露或 SSRF。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<?xml version="1.0" encoding="UTF-8"?> <!-- Malicious dictionary file crafted by attacker --> <!DOCTYPE data [ <!-- Define an entity to read a local file (e.g., /etc/passwd) --> <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <dictionary> <entry> <!-- The entity is resolved during parsing, leaking file content --> <word>&xxe;</word> </entry> </dictionary>

影响范围

Apache OpenNLP < 2.5.9
Apache OpenNLP 3.0.0-M3 之前版本

防御指南

临时缓解措施
如果无法立即升级,用户应确保所有字典文件均来自可信来源。建议在调用 Dictionary(InputStream) 构造函数之前,实施输入验证机制,检测并拒绝任何包含 DOCTYPE 声明的 XML 内容,从而防止恶意数据进入解析器。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表