Skip to main content

fabric-sdk-java EUVDEUVD-2026-28316

| CVE-2026-41586 CRITICAL
Deserialization of Untrusted Data (CWE-502)
2026-04-29 https://github.com/hyperledger/fabric GHSA-prf8-cf2x-rhx7
9.3
CVSS 4.0 · GitHub Advisory
Share

Severity by source

GitHub Advisory PRIMARY
9.3 CRITICAL
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X

Primary rating from GitHub Advisory · only source for this CVE.

CVSS VectorGitHub Advisory

CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
X

Lifecycle Timeline

7
Analysis Updated
May 07, 2026 - 06:43 vuln.today
v2 (cvss_changed)
Re-analysis Queued
May 07, 2026 - 06:35 vuln.today
cvss_changed
CVSS changed
May 07, 2026 - 06:35 NVD
9.3 (CRITICAL)
Source Code Evidence Fetched
Apr 29, 2026 - 20:58 vuln.today
Analysis Generated
Apr 29, 2026 - 20:58 vuln.today
Analysis Generated
Apr 29, 2026 - 20:45 vuln.today
CVE Published
Apr 29, 2026 - 20:41 nvd
CRITICAL

DescriptionGitHub Advisory

Summary

This advisory covers the deprecated fabric-sdk-java client SDK. Channel.java implements readObject() and exposes deSerializeChannel() which call ObjectInputStream.readObject() on untrusted byte arrays without configuring an ObjectInputFilter. This is the classic Java deserialization RCE pattern.

Note: fabric-sdk-java is deprecated and maintained in https://github.com/hyperledger/fabric-sdk-java. Filing here as that repo does not have private vulnerability reporting enabled.

Affected Code

java
// src/main/java/org/hyperledger/fabric/sdk/Channel.java
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
    in.defaultReadObject();  // No ObjectInputFilter configured
}

public Channel deSerializeChannel(byte[] channelBytes)
        throws IOException, ClassNotFoundException, InvalidArgumentException {
    ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(channelBytes));
    Channel channel = (Channel) ois.readObject();  // Untrusted bytes deserialized
    return channel;
}

Attack Vector

An attacker who can supply crafted serialized Channel bytes to the client application - for example, by compromising a local channel file, injecting data through an application that accepts Channel bytes from external sources, or exploiting a separate write primitive - can achieve RCE via gadget chain exploitation when deSerializeChannel() processes those bytes. The risk is highest in deployments that accept Channel data from sources outside the client's direct control. Note: channel data is not transmitted from Fabric peers; this is a client-side deserialization surface.

Proof of Concept

java
// Generate malicious payload with ysoserial:
// java -jar ysoserial.jar CommonsCollections6 "touch /tmp/pwned" > malicious_channel.ser

// Victim code:
byte[] maliciousBytes = Files.readAllBytes(Paths.get("malicious_channel.ser"));
Channel channel = client.deSerializeChannel(maliciousBytes);  // RCE fires here

Notes on Deprecation

fabric-sdk-java is deprecated as of Hyperledger Fabric v2.5 (replaced by org.hyperledger.fabric:fabric-gateway). However, organizations that have not yet migrated remain fully exposed. Automated dependency scanners (Snyk, Dependabot) cannot alert users without a published GHSA. This advisory is filed to ensure those users are notified and directed to migrate.

Fix

For the deprecated SDK: add ObjectInputFilter to whitelist only expected classes:

java
ObjectInputFilter filter = ObjectInputFilter.Config.createFilter(
    "org.hyperledger.fabric.sdk.*;java.util.*;java.lang.*;!*"
);
ois.setObjectInputFilter(filter);

The recommended remediation is migration to org.hyperledger.fabric:fabric-gateway, which does not use Java serialization.

Resources

  • CWE-502: Deserialization of Untrusted Data
  • Migration guide: https://hyperledger.github.io/fabric-gateway/

Credits

Found via independent security research.

AnalysisAI

Remote code execution in Hyperledger fabric-sdk-java (all versions 1.0.0 through 2.2.26) allows unauthenticated attackers to execute arbitrary commands via malicious serialized Java objects. The deprecated SDK's Channel.java class deserializes untrusted byte arrays without input filtering in readObject() and deSerializeChannel() methods, enabling classic Java gadget chain exploitation. Publicly available exploit code exists (ysoserial toolkit), and exploitation requires only that an application accept Channel serialization data from attacker-controlled sources such as compromised files, external APIs, or injected parameters. EPSS data unavailable; not listed in CISA KEV. Vendor has published GHSA advisory but provides no patch-remediation requires migration to the replacement fabric-gateway SDK.

Technical ContextAI

This vulnerability affects the deprecated fabric-sdk-java Maven package (org.hyperledger.fabric-sdk-java:fabric-sdk-java), specifically the Channel.java class in the Hyperledger Fabric client SDK for Java applications. The flaw is CWE-502 (Deserialization of Untrusted Data)-a well-known dangerous pattern in Java where ObjectInputStream.readObject() processes arbitrary byte streams without an ObjectInputFilter to whitelist permitted classes. Java deserialization attacks exploit gadget chains: sequences of existing classes in the application's classpath (often from common libraries like Apache Commons Collections) that can be chained together through serialized object graphs to achieve arbitrary code execution when readObject() reconstitutes the object hierarchy. The fabric-sdk-java library was used by blockchain applications to interact with Hyperledger Fabric networks but has been deprecated since Fabric v2.5 in favor of fabric-gateway, which uses protocol buffers instead of Java serialization. The vulnerable methods are private void readObject(ObjectInputStream in) and public Channel deSerializeChannel(byte[] channelBytes), both of which call ObjectInputStream.readObject() on potentially attacker-controlled data without input validation.

RemediationAI

Migrate to the replacement org.hyperledger.fabric:fabric-gateway SDK, which does not use Java serialization and is the vendor's official remediation path (migration guide at https://hyperledger.github.io/fabric-gateway/). No patch will be released for fabric-sdk-java versions 1.0.0-2.2.26 as the product is deprecated. For organizations unable to migrate immediately, implement compensating controls with significant trade-offs: (1) Add ObjectInputFilter to Channel deserialization code per advisory example to whitelist only org.hyperledger.fabric.sdk.*, java.util.*, java.lang.* classes-this requires source code modification and may break functionality if legitimate Channel serialization uses other classes; test thoroughly. (2) Eliminate all code paths where Channel.deSerializeChannel() or Channel deserialization processes data from untrusted sources-block file uploads of .ser files, remove API endpoints accepting serialized Channel bytes, restrict Channel loading to administrator-controlled local files only-this may require application architecture changes. (3) Deploy Java Security Manager policies to restrict Runtime.exec() and file system access from the JVM running fabric-sdk-java code-complex configuration with high risk of breaking legitimate functionality. (4) Network segmentation to isolate applications using fabric-sdk-java from untrusted networks-reduces remote attack surface but does not prevent exploitation via local file compromise or insider threats. All compensating controls are stopgaps; prioritize migration to fabric-gateway as the only complete fix.

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

Share

EUVD-2026-28316 vulnerability details – vuln.today

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