Skip to main content

Apache MINA CVE-2026-47065

| EUVDEUVD-2026-34069 CRITICAL
Deserialization of Untrusted Data (CWE-502)
2026-06-03 apache GHSA-v3pr-hxpr-mfm8
Critical
Disputed · 9.8 Vendor: apache
Share

Severity by source

Sources disagree (Low–Critical)
Vendor (apache) PRIMARY
9.8 CRITICAL
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Red Hat
9.8 LOW
qualitative

vuln.today treats the vendor’s rating as authoritative. A higher third-party CVSS (e.g. CISA-ADP) is shown for transparency but does not drive the headline severity.

CVSS VectorVendor: apache

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

Lifecycle Timeline

3
Patch available
Jun 03, 2026 - 12:01 EUVD
Analysis Generated
Jun 03, 2026 - 11:01 vuln.today
CVE Published
Jun 03, 2026 - 09:39 nvd
CRITICAL 9.8

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 10 maven packages depend on org.apache.mina:mina-core (10 direct, 0 indirect)

Ecosystem-wide dependent count for version 2.2.0.

DescriptionCVE.org

ZDRES-232: resolveProxyClass Not Overridden - acceptMatchers Filter Bypass via java.lang.reflect.Proxy

Assessment: Fully addressed.

When the serialised stream contains a TC_PROXYCLASSDESC (the marker for a java.lang.reflect.Proxy ), JDK’s ObjectInputStream.readProxyDesc() is dispatched. JDK then calls the default ObjectInputStream.resolveProxyClass(interfaces) implementation, which performs Class.forName(intf, false, latestUserDefinedLoader()) for EACH interface name and constructs the proxy class — bypassing the accepted classes list .

ZDRES-233: Class.forName(name, initialize=true, classLoader) in readClassDescriptor Triggers Static Initialiser of Allow-Listed Classes

Assessment: Fully addressed.

For ANY class on the allow-list, deserialising a stream that names it triggers the class’s (static initialiser) BEFORE any instance is constructed. This means an attacker who supplies a class name on the allow-list (e.g., the developer wrote accept(“com.myapp.*") , attacker supplies com.myapp.SomeClass ) causes <clinit> of SomeClass — and many real-world classes have side-effecting static initialisers

Both issues have been fixed.

AnalysisAI

Unsafe Java deserialization in Apache MINA's ObjectSerializationDecoder allows remote unauthenticated attackers to bypass the acceptMatchers class allow-list and achieve arbitrary code execution. Two distinct flaws are addressed: a TC_PROXYCLASSDESC handling gap where resolveProxyClass is not overridden (permitting java.lang.reflect.Proxy instantiation outside the allow-list), and a Class.forName invocation in readClassDescriptor that triggers static initializers of allow-listed classes before any instance check. No public exploit identified at time of analysis, but the CVSS 9.8 rating and well-known deserialization attack patterns make this a high-priority issue for any application exposing MINA's object serialization codec.

Technical ContextAI

Apache MINA is a widely deployed Java network application framework (NIO-based) used to build protocol servers and clients, including by Apache Directory Server, Apache FtpServer, and many enterprise messaging stacks. Its ObjectSerializationDecoder relies on Java's native ObjectInputStream and exposes an acceptMatchers configuration intended as an allow-list firewall against unsafe deserialization (CWE-502). The first flaw (ZDRES-232) arises because MINA does not override ObjectInputStream.resolveProxyClass; when a serialized stream contains TC_PROXYCLASSDESC, the default JDK implementation calls Class.forName for each interface using the latestUserDefinedLoader and constructs a dynamic Proxy without ever consulting the allow-list. The second flaw (ZDRES-233) is that readClassDescriptor invokes Class.forName with initialize=true, so naming any allow-listed class on the wire executes that class's <clinit> static initializer before any instance is created - turning side-effecting initializers in otherwise 'safe' classes into a gadget surface.

RemediationAI

Patch available per vendor advisory - upgrade Apache MINA to the fixed release described in the Apache advisory at https://lists.apache.org/thread/y7xj1bl8qo47p9bktb11hg5v6k1d4dyj; exact fix version is not enumerated in the provided data, so confirm the release tag against that thread before deploying. If immediate upgrade is not possible, the most effective compensating control is to stop accepting untrusted Java-serialized data: replace ObjectSerializationDecoder with a safer codec (Protobuf, JSON, or a hand-written binary protocol), which has the trade-off of breaking any peers that rely on native Java serialization. As a narrower stopgap, restrict network reachability of MINA endpoints that decode objects to trusted peers only (firewall or mTLS), and audit any classes currently on accept() patterns to remove ones whose static initializers perform I/O, reflection, JNDI lookups, or process execution - note that this only mitigates ZDRES-233, not the ZDRES-232 Proxy bypass.

Vendor StatusVendor

Share

CVE-2026-47065 vulnerability details – vuln.today

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