首页 网络安全 正文

Apache OpenNLP任意类实例化CVE-2026-63317

摘要

栋科技漏洞库关注到 Apache OpenNLP 任意类实例化漏洞,该漏洞现在已经被追踪为CVE-2026-63317,漏洞的CVSS 3.X评分为 5.6。

Apache OpenNLP 是 Apache 基金会开源、纯 Java 开发的轻量级自然语言处理工具库,采用Apache开源协议,因此可商用免费使用。

一、基本情况

Apache OpenNLP 基于传统机器学习算法(最大熵、感知机、SVM)实现基础 NLP 能力,覆盖完整文本分析流水线,轻量化低依赖。

Apache OpenNLP任意类实例化CVE-2026-63317

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

五、参考链接

管理员已设置登录后刷新可查看



扫描二维码,在手机上阅读
评论
更换验证码
友情链接