Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L
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.
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
Lifecycle Timeline
6DescriptionCVE.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.
Articles & Coverage 1
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.
Oracle Java SE 7 Update 6 and earlier contains multiple sandbox bypass vulnerabilities via the ClassFinder and forName m
Remote code execution in IBM Sterling B2B Integrator, Sterling Integrator, and Tivoli Common Reporting allows unauthenti
Java Runtime Environment sandbox bypass via incorrect image channel verification in 2D component allows remote unauthent
Oracle Java SE JDK/JRE 7 and 6 Update 27 and earlier allows remote code execution with complete system compromise throug
JBoss Seam 2 in Red Hat JBoss EAP 4.3.0 fails to sanitize JBoss Expression Language inputs, allowing remote attackers to
Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 update 4 and earlier, 6 up
Multiple vulnerabilities in Oracle Java 7 before Update 11 allow remote attackers to execute arbitrary code by (1) using
Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 2 and earlier, 6 Up
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
Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 7 and earlier allow
Remote unauthenticated attackers can execute arbitrary code on Adobe ColdFusion servers through Java deserialization fla
The ExceptionDelegator component in Apache Struts before 2.2.3.1 interprets parameter values as OGNL expressions during
Same weakness CWE-502 – Deserialization of Untrusted Data
View allSame technique Deserialization
View allVendor StatusVendor
SUSE
Severity: ImportantShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-41885
GHSA-g4fv-7mf3-543r