Severity by source
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
Lifecycle Timeline
7DescriptionGitHub 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
// 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
// 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 hereNotes 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:
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.
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 allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-28316
GHSA-prf8-cf2x-rhx7