CVE-2026-42027Apache 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应用生态中极常见,极易导致远程代码执行。