Skip to main content

Apache OpenNLP EUVDEUVD-2026-41885

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

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
qualitative
Red Hat
7.3 MEDIUM
qualitative

Primary rating from Vendor (apache).

CVSS VectorVendor: apache

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L
Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
Low
Integrity
Low
Availability
Low

Lifecycle Timeline

6
Analysis Updated
Jul 06, 2026 - 21:23 vuln.today
v3 (cvss_changed)
Analysis Updated
Jul 06, 2026 - 21:22 vuln.today
v2 (cvss_changed)
Re-analysis Queued
Jul 06, 2026 - 20:22 vuln.today
cvss_changed
CVSS changed
Jul 06, 2026 - 20:22 NVD
7.3 (HIGH)
Patch available
Jul 06, 2026 - 18:02 EUVD
Analysis Generated
Jul 06, 2026 - 17:01 vuln.today

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.

AnalysisAI

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.

Technical ContextAI

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.

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.

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

Share

EUVD-2026-41885 vulnerability details – vuln.today

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