Skip to main content

Apache OpenNLP CVE-2026-43825

| EUVDEUVD-2026-41885 HIGH
Deserialization of Untrusted Data (CWE-502)
2026-07-06 apache GHSA-g4fv-7mf3-543r
7.3
CVSS 3.1 · Vendor: apache
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Identify app deserializing untrusted SvmDoccat models
  2. Delivery
    Craft serialized gadget-chain payload
  3. Exploit
    Deliver stream to deserialize() call
  4. Execution
    readObject() instantiates foreign object graph
  5. Persist
    Gadget chain triggers code execution
  6. Impact
    Remote code execution in JVM

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A08:2025 - Software or Data Integrity Failures
ASVS 5.0
V1 - Encoding and Sanitization Safe deserialization, type allowlists
MITRE ATT&CK

2 techniques across 2 tactics: Execution, Initial Access

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires an application running the affected libsvm module (Apache OpenNLP 3.0.0-M1 up to <3.0.0-M4) to call the public static SvmDoccatModel.deserialize(InputStream) on a stream the attacker can influence - the entry point is unauthenticated and needs no user interaction (PR:N/UI:N). The decisive additional prerequisite, explicit in the description, is that a usable Java deserialization gadget chain must exist on the consuming application's classpath, because Apache OpenNLP ships no gadget of its own; without such a chain the payload deserializes but does not achieve code execution. Exploitation is thus limited by: (1) the application must actually deserialize untrusted or semi-trusted model streams rather than only trusted internal artifacts, (2) the specific optional libsvm module and vulnerable 3.x milestone version must be in use, and (3) a compatible gadget must be present in transitive dependencies - a condition outside the attacker's direct control that materially narrows real-world exploitability.

Impact

The vendor CVSS 3.1 score of 7.3 (AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L) reflects a network-reachable, unauthenticated, no-interaction flaw but deliberately caps impact at Low/Low/Low rather than the High/High/High that full RCE would imply - a reasonable acknowledgement that code execution is conditional on a gadget chain being present on the consumer's classpath, a factor outside the attacker's control. SSVC aligns with this nuance: Exploitation is rated 'none' (no observed exploitation), Automatable 'yes' (the entry point is a public static method easily fed a payload at scale), and Technical Impact 'partial'. There is no KEV listing and no EPSS score provided, and POC availability is not indicated in the source data. The practical priority is therefore moderate and highly context-dependent: environments that call deserialize() on untrusted streams AND carry known-vulnerable gadget libraries face genuine RCE exposure, while those without a gadget chain face a much lower effective risk. Conflict to verify: the description characterizes the outcome as RCE while the scored impacts are only Low across C/I/A - the discrepancy is explained by gadget-chain dependency, not an error, but defenders should confirm their own classpath before deciding severity.

Exploit ScenarioDerived

An application embeds the OpenNLP libsvm module and loads a document-categorization model by passing a user-supplied or externally fetched byte stream to SvmDoccatModel.deserialize(). An attacker submits a crafted serialized payload referencing a gadget chain already present in the app's transitive dependencies; readObject() instantiates the chain before the SvmDoccatModel cast, executing attacker code in the JVM. No POC is identified in the source data, and success depends on a suitable gadget being on the classpath (AV:N, AC:L per vendor vector).

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 4.8% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv3 – Jul 06, 2026

Untrusted Java deserialization in Apache OpenNLP's SvmDoccatModel (libsvm document categorization module, versions 3.0.0-M1 through before 3.0.0-M4) lets an attacker who supplies a crafted serialized stream to the public static SvmDoccatModel.deserialize(InputStream) trigger deserialization of an arbitrary object graph before the SvmDoccatModel cast occurs. Where a usable gadget chain exists on the consuming application's classpath, this yields remote code execution in the loading JVM; OpenNLP ships no gadget itself, so realistic risk falls on downstream apps that embed the module alongside vulnerable transitive dependencies. No public exploit identified at time of analysis and the flaw is not in CISA KEV, though the SSVC assessment marks it automatable with partial technical impact.

Earlier versions of this analysis (2)
v2 Jul 06, 2026 - 21:22 cvss changed CVSS 7.3

Untrusted Java deserialization in Apache OpenNLP's libsvm document categorization module (SvmDoccatModel) lets remote attackers achieve code execution in applications that deserialize attacker-supplied model streams. The flaw affects the 3.x line only (releases 3.0.0-M1 up to before 3.0.0-M4), where SvmDoccatModel.deserialize() feeds an attacker-controlled stream to ObjectInputStream.readObject() with no ObjectInputFilter installed. There is no public exploit identified at time of analysis, and CISA SSVC rates current exploitation as none but automatable.

v1 Jul 06, 2026 - 17:01

Remote code execution in Apache OpenNLP's libsvm document categorization module (3.x line, before 3.0.0-M4) is possible when an attacker-controlled stream is passed to the public static SvmDoccatModel.deserialize() method, which invokes java.io.ObjectInputStream.readObject() without an ObjectInputFilter. Java materializes the full object graph before the cast to SvmDoccatModel executes, meaning a crafted gadget-chain payload triggers arbitrary code execution inside the host JVM prior to any type check. No public exploit has been identified at time of analysis and Apache OpenNLP does not ship a gadget chain itself, but downstream applications embedding the libsvm module alongside common vulnerable transitive dependencies - such as commons-collections or spring-beans - face realistic RCE exposure if they pass untrusted model streams to this method.

RemediationAI

Vendor-released patch: 3.0.0-M4 - 3.x users of the libsvm module should upgrade to 3.0.0-M4 as the primary fix, per the Apache advisory at https://lists.apache.org/thread/c7kom0pgk9cbpfnbooh5m3g85ndf50hn (see also https://seclists.org/oss-sec/2026/q3/66). For those who cannot upgrade immediately, treat all serialized SvmDoccatModel streams as untrusted and only deserialize them when provenance is verified through integrity checks such as signatures or checksums on the model artifact; concretely, avoid calling SvmDoccatModel.deserialize() on any stream supplied by end users or fetched from third-party sources. Additional compensating controls include installing a strict JVM-wide or per-stream ObjectInputFilter (jdk.serialFilter) that allow-lists only the expected OpenNLP/libsvm classes - this blocks foreign gadget classes at deserialization time but must be tuned carefully or it will reject legitimate model loads - and auditing/removing known-vulnerable gadget libraries (e.g. outdated Commons-Collections) from the classpath, which reduces exploitability but may affect components that depend on them. Restrict model-loading code paths so only trusted internal artifact stores can supply serialized models.

Affected VersionsENISA

Apache OpenNLP :: Core :: ML :: LibSVM 3.0.0-M1 <3.0.0-M4

Affected Packages

euvd apache_opennlp_core_ml_libsvm fix: 3.0.0-M4

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The root cause is CWE-502 (Deserialization of Untrusted Data). SvmDoccatModel.deserialize() wraps an attacker-controlled stream in java.io.ObjectInputStream and invokes readObject() with no ObjectInputFilter installed. Because ObjectInputStream materializes every class referenced in the stream during readObject() - before the returned object is cast to SvmDoccatModel - the type check that would reject a foreign object happens too late to prevent instantiation of arbitrary classes. Java deserialization RCE is not self-contained: it requires a 'gadget chain' (classes whose readObject/side-effect logic can be chained to execute code, e.g. from Commons-Collections, Spring, or similar libraries). The affected component is the optional libsvm-backed document categorization module (CPE: apache_software_foundation apache_opennlp core ml libsvm), introduced under OPENNLP-1808 and present only on the OpenNLP 3.x line.

Know when Java gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (apache) PRIMARY 7.3 MEDIUM
AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L
vuln.today AI 8.1 HIGH

Public static entry point gives AV:N/PR:N/UI:N; full RCE impact (C/I/A:H) when exploitable, but dependence on a classpath gadget outside attacker control justifies AC:H.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
4.0 AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
SUSE HIGH
Red Hat 7.3 MEDIUM

Primary rating from Vendor (apache).

CVSS VectorVendor: apache

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

Lifecycle Timeline

2
CVSS changed
Jul 06, 2026 - 20:22 NVD
7.3 (HIGH)
Patch available
Jul 06, 2026 - 18:02 EUVD

DescriptionCVE.org

Untrusted Java Deserialization in Apache OpenNLP SvmDoccatModel

Versions Affected: before 3.0.0-M4 (libsvm document categorization module; introduced in OPENNLP-1808 and only present on the 3.x line)

Description: SvmDoccatModel.deserialize(InputStream) reads an attacker-controlled stream with java.io.ObjectInputStream and calls readObject() without an ObjectInputFilter installed. ObjectInputStream materialises every class referenced in the stream before the resulting object is cast to SvmDoccatModel, so the cast that follows readObject() executes only after the foreign object graph has already been deserialised in full.

If a Java deserialization gadget chain is available on the consumer's classpath, a crafted payload supplied to deserialize() executes arbitrary code in the JVM that loads it. Apache OpenNLP itself does not ship a known gadget chain, so the realistic risk is to downstream applications that embed the libsvm module alongside vulnerable transitive dependencies. The method is public and static, so any caller can pass an untrusted stream to it directly.

The practical impact is remote code execution against processes that load SvmDoccatModel instances from untrusted or semi-trusted origins.

Mitigation:

3.x users should upgrade to 3.0.0-M4.

Users who cannot upgrade immediately should treat all serialized SvmDoccatModel streams as untrusted input unless their provenance is verified, and should avoid invoking SvmDoccatModel.deserialize() on streams supplied by end users or fetched from third-party sources without integrity checks.

Executive ViewAI

Why It Matters

Apache OpenNLP versions 3.0.0-M1 through M4 contain an unsafe Java deserialization flaw in the SvmDoccatModel module that can enable remote code execution when processing untrusted serialized input, provided vulnerable dependencies exist on the application classpath. Organizations using affected OpenNLP versions that accept external data face material risk of complete system compromise. Risk exposure is most acute in applications where document categorization workflows process data from untrusted sources.

Business Impact: High
Compensating Controls

Apply vendor patch. For immediate interim mitigations where patching cannot be completed within 7 days: implement input validation to accept only internally generated serialized objects (reject externally sourced input to SvmDoccatModel.deserialize()), disable or isolate the document categorization module if unused, and restrict outbound network access from affected application instances to limit post-exploitation lateral movement.

Threat Intelligence Overview

EPSS Score
4.8%
Top 9% exploitable
Prevalence
Low
niche NLP library; vulnerable libsvm module only on 3.x milestone builds
Data Quality
5 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 4.8%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
Yes
Human Impact
High
Technical Impact
Partial

Priority Score

41
Low Medium High Critical
KEV: 0
EPSS: +5
CVSS: +36
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Insecure deserialization occurs when an application converts serialized data (a stream of bytes representing an object's state) back into a living object without proper validation.

Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.

More in Java

View all
CVE-2012-4681 CRITICAL POC
9.8 Aug 28

Oracle Java SE 7 Update 6 and earlier contains multiple sandbox bypass vulnerabilities via the ClassFinder and forName m

CVE-2015-7450 CRITICAL POC
9.8 Jan 02

Remote code execution in IBM Sterling B2B Integrator, Sterling Integrator, and Tivoli Common Reporting allows unauthenti

CVE-2013-2465 CRITICAL POC
9.8 Jun 18

Java Runtime Environment sandbox bypass via incorrect image channel verification in 2D component allows remote unauthent

CVE-2011-3544 CRITICAL POC
9.8 Oct 19

Oracle Java SE JDK/JRE 7 and 6 Update 27 and earlier allows remote code execution with complete system compromise throug

CVE-2010-1871 HIGH POC
8.8 Aug 05

JBoss Seam 2 in Red Hat JBoss EAP 4.3.0 fails to sanitize JBoss Expression Language inputs, allowing remote attackers to

CVE-2012-1723 CRITICAL POC
9.8 Jun 16

Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 update 4 and earlier, 6 up

CVE-2013-0422 CRITICAL POC
9.8 Jan 10

Multiple vulnerabilities in Oracle Java 7 before Update 11 allow remote attackers to execute arbitrary code by (1) using

CVE-2012-0507 CRITICAL POC
9.8 Jun 07

Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 2 and earlier, 6 Up

CVE-2015-4852 CRITICAL POC
9.8 Nov 18

The WLS Security component in Oracle WebLogic Server 10.3.6.0, 12.1.2.0, 12.1.3.0, and 12.2.1.0 allows remote attackers

CVE-2012-5076 CRITICAL POC
9.8 Oct 16

Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 7 and earlier allow

CVE-2017-3066 CRITICAL POC
9.8 Apr 27

Remote unauthenticated attackers can execute arbitrary code on Adobe ColdFusion servers through Java deserialization fla

CVE-2012-0391 CRITICAL POC
9.8 Jan 08

The ExceptionDelegator component in Apache Struts before 2.2.3.1 interprets parameter values as OGNL expressions during

Vendor StatusVendor

SUSE

Severity: Important

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy