{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2026-47065", "assignerOrgId": "f0158376-9dc2-43b6-827c-5f631a4d8d09", "state": "PUBLISHED", "assignerShortName": "apache", "dateReserved": "2026-05-18T16:53:39.555Z", "datePublished": "2026-06-03T09:39:41.629Z", "dateUpdated": "2026-06-04T03:55:48.440Z" }, "containers": { "cna": { "affected": [ { "collectionURL": "https://repo.maven.apache.org/maven2/org/apache/mina", "defaultStatus": "unaffected", "packageName": "org.apache.mina:mina-core", "product": "Apache MINA", "vendor": "Apache Software Foundation", "versions": [ { "lessThan": "2.2.8", "status": "affected", "version": "2.2.0", "versionType": "semver" }, { "lessThan": "2.1.13", "status": "affected", "version": "2.1.0", "versionType": "semver" }, { "lessThan": "2.0.29", "status": "affected", "version": "2.0.0", "versionType": "semver" } ] } ], "credits": [ { "lang": "en", "type": "reporter", "value": "Venkatraman Kumar, SecureIn" }, { "lang": "en", "type": "finder", "value": "keda (GitHub: @yuui25)" } ], "descriptions": [ { "lang": "en", "supportingMedia": [ { "base64": false, "type": "text/html", "value": "
ZDRES-232: resolveProxyClass Not Overridden - acceptMatchers Filter Bypass via java.lang.reflect.Proxy
\nAssessment: Fully addressed.
\nWhen the serialised stream contains a TC_PROXYCLASSDESC (the marker \nfor a java.lang.reflect.Proxy ), JDK’s ObjectInputStream.readProxyDesc()\n is\ndispatched. JDK then calls the default \nObjectInputStream.resolveProxyClass(interfaces) implementation, which \nperforms Class.forName(intf, false, latestUserDefinedLoader()) for EACH \ninterface name and constructs the proxy class — bypassing the accepted\n classes list .
\nZDRES-233: Class.forName(name, initialize=true, classLoader) in \nreadClassDescriptor Triggers Static Initialiser of Allow-Listed Classes
\nAssessment: Fully addressed.
\nFor ANY class on the allow-list, deserialising a stream that names it triggers the class’s \n (static initialiser) BEFORE any instance is constructed. This means an \nattacker who supplies a class name on the allow-list (e.g., the \ndeveloper wrote accept(“com.myapp.*\") , attacker supplies \ncom.myapp.SomeClass ) causes <clinit> of SomeClass — and many \nreal-world classes have side-effecting static initialisers
\nBoth issues have been fixed.