Loading...
Skip to main content

CVE-2026-42027 — Vulnerability in org.apache.opennlp:opennlp-tools...

CRITICAL

Apache OpenNLP ExtensionLoader Vulnerable to Arbitrary Class Instantiation via Model Manifest

Published May 4, 2026Updated September 9, 2026Source: osv

Summary

Versions Affected: before 1.9.5, before 2.5.9, before 3.0.0-M3 Description:  The ExtensionLoader.instantiateExtension(Class, String) method loads a class by its fully-qualified name via Class.forName() and invokes its no-arg constructor, with the class name sourced from the manifest.properties entry of a model archive. The existing isAssignableFrom check correctly rejects classes that are not subtypes of the expected extension interface (BaseToolFactory for factory=, ArtifactSerializer for serializer-class-*), but the check runs after Class.forName() has already loaded and initialized the named class. Class.forName() with default initialization semantics executes the target class's static initializer before returning, so an attacker who can supply a crafted model archive can cause the static initializer of any class on the classpath to run during model loading, regardless of whether that class passes the subsequent type check. Exploitation requires a class with attacker-useful side effects in its static initializer (for example, JNDI lookup, outbound network I/O, or filesystem access) to be present on the classpath, so this is not a drop-in remote code execution; however, the attack surface grows as third-party model distribution becomes more common (community model repositories, Hugging Face-style sharing), where users routinely load model files from origins they do not control. A secondary, narrower vector affects deployments that ship legitimate BaseToolFactory or ArtifactSerializer subclasses with side-effecting no-arg constructors: a malicious manifest can name such a class and force its constructor to run during model load. Mitigation:  * 1.x users should upgrade to 1.9.5. * 2.x users should upgrade to 2.5.9. * 3.x users should upgrade to 3.0.0-M3. Note: The fix introduces a package-prefix allowlist that is consulted before Class.forName() is invoked, so the static initializer of a disallowed class is never executed. Classes under the opennlp. prefix remain permitted by default. Deployments that load models referencing factories or serializers outside opennlp.* must opt those packages in, either programmatically via ExtensionLoader.registerAllowedPackage(String) before the first model load, or by setting the OPENNLP_EXT_ALLOWED_PACKAGES system property to a comma-separated list of allowed package prefixes. Users who cannot upgrade immediately should ensure that all model files are sourced from trusted origins and should audit their classpath for classes with side-effecting static initializers or constructors, particularly any that perform JNDI lookups, network requests, or filesystem operations during class initialization.

Advisory Timeline

  • First published May 4, 2026 (161 days ago).
  • Last revised September 9, 2026 — 128 days after initial publication.

Remediation

Upgrade to the fixed version using your package manager.

Maven
Update org.apache.opennlp:opennlp-tools to 3.0.0-M3 or later
<!-- Update pom.xml dependency version to 3.0.0-M3 for org.apache.opennlp:opennlp-tools -->
Maven
Update org.apache.opennlp:opennlp-tools to 1.9.5 or later
<!-- Update pom.xml dependency version to 1.9.5 for org.apache.opennlp:opennlp-tools -->
Maven
Update org.apache.opennlp:opennlp-tools to 2.5.9 or later
<!-- Update pom.xml dependency version to 2.5.9 for org.apache.opennlp:opennlp-tools -->

After upgrading, run your dependency scanner again to confirm the vulnerability is resolved.

Affected Packages (3)

Affects 1 ecosystem: maven (1).

PackageEcosystemAffectedFixed In
org.apache.opennlp:opennlp-tools
maven
3.0.0-M1, 3.0.0-M23.0.0-M3
org.apache.opennlp:opennlp-tools
maven
1.5.1-incubating, 1.5.2-incubating, 1.5.3, 1.6.0 (+13 more)1.9.5
org.apache.opennlp:opennlp-tools
maven
2.0.0, 2.1.0, 2.1.1, 2.2.0 (+15 more)2.5.9

Vulnerability Classification

Common Weakness Enumeration (CWE) identifiers for this vulnerability type.

CVSS Score Breakdown

What the CVSS (Common Vulnerability Scoring System) 9.8 score means for each attack dimension.

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

Frequently Asked Questions

What is CVE-2026-42027?
Apache OpenNLP ExtensionLoader Vulnerable to Arbitrary Class Instantiation via Model Manifest This vulnerability has been assigned a severity rating of CRITICAL (CVSS score: 9.8/10).
How do I check if my project is affected by CVE-2026-42027?
CVE-2026-42027 affects org.apache.opennlp:opennlp-tools. Use GeekWala's free vulnerability scanner to check your dependencies against CVE-2026-42027 and 200,000+ other known vulnerabilities.

Severity & Exploitability

CVSS Score
9.8

Exploitation is straightforward and causes maximum impact. Patch immediately.

Also Known As

GHSA-cx4m-2p55-rw7j

Related CVEs

  • CVE-2026-40682
    CRITICAL

    Apache OpenNLP DictionaryEntryPersistor Vulnerable to XML External Entity (XXE) via Unsanitized Dictionary Parsing

  • CVE-2026-107726
    CRITICAL

    Hazelcast allows arbitrary member memory access by low-privileged client

  • CVE-2026-107282
    CRITICAL

    AsyncHttpClient: Replay to a different host sends the original host request and credentials to the new host

Check if you're affected

Scan your dependencies to see if this vulnerability affects your projects.

Scan Your Dependencies