CVE-2026-63317
Received Received - Intake

Arbitrary Class Instantiation in Apache OpenNLP

Vulnerability report for CVE-2026-63317, including description, CVSS score, EPSS score, affected products, exploitability, helpful resources, and attack-flow context.

Publication date: 2026-07-24

Last updated on: 2026-07-24

Assigner: Apache Software Foundation

Description

Arbitrary Class Instantiation via XML Feature Generator Descriptor and Format Name in Apache OpenNLP Versions Affected: - before 2.5.10 - before 3.0.0-M5 Description: Three code paths in Apache OpenNLP load a class by its fully-qualified name via Class.forName() and invoke its no-arg constructor without any prior validation of the class name or its type.Β  The affected paths are: (1) GeneratorFactory, which reads the class attribute of generator elements in an XML feature generator descriptor; such descriptors are embedded as artifacts in model archives (e.g. TokenNameFinder and POSTagger models) and are parsed during model loading, so an attacker who can supply a crafted model archive controls the class name directly. (2) StreamFactoryRegistry.getFactory(Class, String), which falls back to interpreting an unregistered format name as the fully-qualified class name of an ObjectStreamFactory; this is exploitable in applications that pass untrusted format names (e.g. exposing the -format parameter of the command-line tooling to external input). (3) StringInterners, which instantiates the interner implementation named by the opennlp.interner.class system property; this value is normally deployer-controlled, so it is hardened as defense in depth rather than being independently attacker-reachable. Exploitation requires a class with attacker-useful side effects in its static initializer or no-arg constructor (JNDI lookup, outbound network I/O, filesystem access) to be present on the classpath, so this is not drop-in remote code execution. T Mitigation: Upgrade to a fixed release. The fix routes all three paths through ExtensionLoader.instantiateExtension(...), which consults a package-prefix allowlist before Class.forName() is invoked, so a disallowed class is never loaded, initialized, or constructed. Classes under the opennlp. prefix remain permitted by default. Deployments that load models referencing feature generator factories, object stream factories, or string interners 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 all model files and format names are sourced from trusted origins and should audit their classpath for classes with side-effecting static initializers or constructors.

CVSS Scores

EPSS Scores

Probability:
Percentile:

Meta Information

Published
2026-07-24
Last Modified
2026-07-24
Generated
2026-07-24
AI Q&A
2026-07-24
EPSS Evaluated
N/A
NVD
EUVD

Affected Vendors & Products

Showing 2 associated CPEs
Vendor Product Version / Range
apache opennlp to 2.5.10 (exc)
apache opennlp to 3.0.0-M5 (exc)

Helpful Resources

Exploitability

CWE
CWE Icon
KEV
KEV Icon
CWE ID Description
CWE-470 The product uses external input with reflection to select which classes or code to use, but it does not sufficiently prevent the input from selecting improper classes or code.

Attack-Flow Graph

AI Quick Actions

Instant insights powered by AI
Executive Summary

This vulnerability in Apache OpenNLP allows arbitrary class instantiation through three code paths that load classes by name without validation. Attackers can exploit this by providing crafted model archives or untrusted format names to execute malicious code if exploitable classes exist on the classpath.

Detection Guidance

Detecting this vulnerability requires checking Apache OpenNLP versions and auditing classpath for suspicious classes. Use commands like 'mvn dependency:tree' or 'gradle dependencies' to verify OpenNLP versions are below 2.5.10 or 3.0.0-M5. Inspect model archives for embedded XML descriptors containing generator elements with class attributes.

Impact Analysis

An attacker could execute arbitrary code if they control model archives or format names and a malicious class is present on the classpath. This could lead to data breaches, system compromise, or unauthorized access, depending on the attacker's goals.

Compliance Impact

This vulnerability could lead to unauthorized data access or exfiltration, violating GDPR's data protection requirements or HIPAA's security rules. Compliance may be compromised if the vulnerability is exploited to access or leak sensitive data.

Mitigation Strategies

Immediately upgrade Apache OpenNLP to version 2.5.10 or later, or 3.0.0-M5 or later. If upgrading is not possible, restrict model sources to trusted origins and audit classpath for classes with side-effecting static initializers or constructors. Set OPENNLP_EXT_ALLOWED_PACKAGES to explicitly allow only trusted packages.

Chat Assistant

Ask questions about this CVE
Hi! I’m here to help you understand CVE-2026-63317. Ask me anything about the vulnerability, its impact, or mitigation strategies.
0/70

EPSS Chart