Apache OpenNLP任意类实例化CVE-2026-63317
Apache OpenNLP 是 Apache 基金会开源、纯 Java 开发的轻量级自然语言处理工具库,采用Apache开源协议,因此可商用免费使用。
一、基本情况
Apache OpenNLP 基于传统机器学习算法(最大熵、感知机、SVM)实现基础 NLP 能力,覆盖完整文本分析流水线,轻量化低依赖。

Apache OpenNLP 适配所有JVM生态,内置多种分类算法,支持自定义词典、训练器,可对接 UIMA 文本分析框架做企业级文本系统。
栋科技漏洞库关注到 Apache OpenNLP 任意类实例化漏洞,该漏洞现在已经被追踪为CVE-2026-63317,漏洞的CVSS 3.X评分为 5.6。
二、漏洞分析
CVE-2026-63317位于Apache OpenNLP 在解析 XML 特征生成器描述、回退解析未注册 format 名称和读取 opennlp.interner.class 时,
会在缺少类名白名单校验的情况下通过 Class.forName() 和无参构造实例化任意类,
攻击者在可控模型文件或 format 参数可达且类路径存在副作用类时可触发任意类加载、网络访问、文件访问或进程异常。
由于Apache OpenNLP 存在三处代码逻辑,直接通过Class.forName()`根据全限定类名加载类,
并调用其无参构造函数,全程未对类名、类类型做任何前置校验。
(一)受影响的三处逻辑:
1、生成器工厂(GeneratorFactory):
读取XML特征生成器配置中generator标签的class属性。
这类配置内嵌在模型压缩包内(如命名实体识别、词性标注模型),程序加载模型时会解析该配置。
攻击者若可上传特制模型包,就能直接控制待加载类名。
2、StreamFactoryRegistry.getFactory(Class, String):
若传入的格式名称未注册,程序会将该名称直接视作ObjectStreamFactory的全限定类名。
若应用程序将不可信外部输入作为格式参数(例如对外暴露命令行工具的-format参数),即可触发漏洞。
3、StringInterners:
根据系统属性opennlp.interner.class指定的类名实例化字符串缓存实现类。
该配置通常由部署人员管控,攻击者无法单独利用此路径,仅作为纵深防御加固点。
(二)受影响版本中,2.x 分支按用户提供的 NVD 描述覆盖到 2.5.10 之前版本,3.x 里程碑分支覆盖到 3.0.0-M5 之前版本,
受影响 artifact 为 Maven 组件 org.apache.opennlp:opennlp-tools;
其中 GeneratorFactory 在 buildGenerator 与 extractArtifactSerializerMappings 中直接读取模型归档内 XML descriptor 的 class 属性,
StreamFactoryRegistry.getFactory(Class, String) 把未注册 formatName 当作 ObjectStreamFactory 类名,
StringInterners 按系统属性 opennlp.interner.class 装载实现,使普通输入在进入这些入口后变成类加载指令。
(三)漏洞利用条件
类路径中必须存在可被攻击者利用的类,其静态初始化代码或无参构造函数包含危险行为(JNDI查询、外联网络请求、文件读写等),
因此该漏洞无法直接一键远程代码执行。
三、影响范围
Apache OpenNLP < 2.5.10
Apache OpenNLP < 3.0.0-M5
四、修复建议
Apache OpenNLP ≥ 2.5.10
Apache OpenNLP ≥ 3.0.0-M5
五、参考链接
管理员已设置登录后刷新可查看