Apache OpenNLP up to 2.5.8/3.0.0-M2 Model Manifest ExtensionLoader externally-controlled input to select classes or code

| CVSS Meta Temp Score | Current Exploit Price (≈) | CTI Interest Score |
|---|---|---|
| 7.9 | $0-$5k | 0.00 |
Summary
A vulnerability was found in Apache OpenNLP up to 2.5.8/3.0.0-M2. It has been declared as critical. This affects the function ExtensionLoader of the component Model Manifest. The manipulation results in Remote Privilege Escalation.
This vulnerability is identified as CVE-2026-42027. The attack can be executed remotely. There is not any exploit available.
It is recommended to upgrade the affected component.
Details
A vulnerability, which was classified as critical, was found in Apache OpenNLP up to 2.5.8/3.0.0-M2. Affected is the function ExtensionLoader of the component Model Manifest. The manipulation with an unknown input leads to a remote privilege escalation vulnerability. CWE is classifying the issue as 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. This is going to have an impact on confidentiality, integrity, and availability. CVE summarizes:
Arbitrary Class Instantiation via Model Manifest in Apache OpenNLP ExtensionLoader 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: * 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.
The advisory is available at lists.apache.org. This vulnerability is traded as CVE-2026-42027. The exploitability is told to be easy. It is possible to launch the attack remotely. Technical details are known, but there is no available exploit. The structure of the vulnerability defines a possible price range of USD $0-$5k at the moment (estimation calculated on 06/29/2026).
The vulnerability scanner Nessus provides a plugin with the ID 312234 (Linux Distros Unpatched Vulnerability : CVE-2026-42027), which helps to determine the existence of the flaw in a target environment.
Upgrading to version 2.5.9 or 3.0.0-M3 eliminates this vulnerability.
The vulnerability is also documented in the databases at Tenable (312234) and EUVD (EUVD-2026-27005). If you want to get best quality of vulnerability data, you may have to visit VulDB.
Product
Vendor
Name
Version
License
Website
- Vendor: https://www.apache.org/
CPE 2.3
CPE 2.2
CVSSv4
VulDB Vector: 🔒VulDB Reliability: 🔍
CVSSv3
VulDB Meta Base Score: 8.0VulDB Meta Temp Score: 7.9
VulDB Base Score: 6.3
VulDB Temp Score: 6.0
VulDB Vector: 🔒
VulDB Reliability: 🔍
ADP CISA Base Score: 9.8
ADP CISA Vector: 🔒
CVSSv2
| AV | AC | Au | C | I | A |
|---|---|---|---|---|---|
| 💳 | 💳 | 💳 | 💳 | 💳 | 💳 |
| 💳 | 💳 | 💳 | 💳 | 💳 | 💳 |
| 💳 | 💳 | 💳 | 💳 | 💳 | 💳 |
| Vector | Complexity | Authentication | Confidentiality | Integrity | Availability |
|---|---|---|---|---|---|
| Unlock | Unlock | Unlock | Unlock | Unlock | Unlock |
| Unlock | Unlock | Unlock | Unlock | Unlock | Unlock |
| Unlock | Unlock | Unlock | Unlock | Unlock | Unlock |
VulDB Base Score: 🔒
VulDB Temp Score: 🔒
VulDB Reliability: 🔍
Exploiting
Class: Use of externally-controlled input to select classes or codeCWE: CWE-470
CAPEC: 🔒
ATT&CK: 🔒
Physical: No
Local: No
Remote: Yes
Availability: 🔒
Status: Not defined
EPSS Score: 🔒
EPSS Percentile: 🔒
Price Prediction: 🔍
Current Price Estimation: 🔒
| 0-Day | Unlock | Unlock | Unlock | Unlock |
|---|---|---|---|---|
| Today | Unlock | Unlock | Unlock | Unlock |
Nessus ID: 312234
Nessus Name: Linux Distros Unpatched Vulnerability : CVE-2026-42027
Threat Intelligence
Interest: 🔍Active Actors: 🔍
Active APT Groups: 🔍
Countermeasures
Recommended: UpgradeStatus: 🔍
0-Day Time: 🔒
Upgrade: OpenNLP 2.5.9/3.0.0-M3
Timeline
05/01/2026 Advisory disclosed05/01/2026 VulDB entry created
06/29/2026 VulDB entry last update
Sources
Vendor: apache.orgAdvisory: lists.apache.org
Status: Confirmed
CVE: CVE-2026-42027 (🔒)
GCVE (CVE): GCVE-0-2026-42027
GCVE (VulDB): GCVE-100-360786
EUVD: 🔒
Entry
Created: 05/01/2026 22:19Updated: 06/29/2026 23:57
Changes: 05/01/2026 22:19 (51), 05/04/2026 20:21 (1), 05/06/2026 07:34 (2), 06/29/2026 23:57 (13)
Complete: 🔍
Cache ID: 216::103
If you want to get best quality of vulnerability data, you may have to visit VulDB.
No comments yet. Languages: en.
Please log in to comment.