Safeguard
Vulnerability Analysis•

CVE-2026-41586: Critical Java Deserialization in Hyperledger Fabric SDK

CVE-2026-41586 is unsafe Java deserialization in the deprecated Hyperledger fabric-sdk-java Channel class with no patch. Never pass untrusted bytes and migrate.

Safeguard Security Team
3 min read

CVE-2026-41586 is a critical unsafe deserialization flaw (CVSS 9.8) in the deprecated fabric-sdk-java client library for Hyperledger Fabric. No patch exists. Do not pass untrusted bytes to its channel deserialization methods, and plan a move to the Fabric Gateway client.

What's affected

The GitHub advisory covers the Maven package org.hyperledger.fabric-sdk-java:fabric-sdk-java, versions 1.0.0 through 2.2.x, with no patched version. The record says there were no public patches at the time of publication. The advisory states the SDK is deprecated as of Fabric v2.5 and replaced by the fabric-gateway client, and that the code lives in a separate repository.

The flaw is in the client SDK, not in the Fabric peers. The advisory says channel data is not transmitted from peers, so this is a client side deserialization surface.

How to check if you're exposed

Find the dependency in your Java builds:

mvn dependency:tree | grep fabric-sdk-java
gradle dependencies | grep fabric-sdk-java

Then search your code for calls to deSerializeChannel and any code that reads serialized Channel objects from files, caches or messages. The risk is highest where those bytes come from a source outside the client's direct control. A dependency scan can list the library in each repository, and reachability analysis shows whether a deserialization call exists in your code.

What to do now

  1. Inventory every application that depends on fabric-sdk-java.
  2. Stop deserializing Channel bytes from untrusted or shared locations. Rebuild channel objects from trusted configuration instead.
  3. Plan the migration to the Fabric Gateway client, since the old SDK is deprecated and unpatched.
  4. Apply a JVM wide deserialization filter, for example through the jdk.serialFilter setting, to limit which classes can be deserialized.
  5. Lock down file system access to wherever serialized channel data is stored.

Why it matters

The record lists CWE-502, deserialization of untrusted data. The advisory says Channel.java calls ObjectInputStream.readObject() on byte arrays without an ObjectInputFilter. Java deserialization can instantiate classes the code never meant to use, and if a suitable chain of classes exists on the classpath, that can lead to code execution.

The 9.8 score assumes an attacker can supply the bytes. The advisory is more careful: the attacker must reach the client with crafted data, for example through a writable file or an application that accepts such bytes. That makes this a case where architecture decides your real risk. The record does not flag this CVE as known exploited.

Try it yourself

Click through it at your own pace, or open it full screen.

Quick check

With no patch, is there anything that really helps?

Yes. Remove untrusted input paths to the deserialization call, add a JVM deserialization filter, and migrate off the deprecated SDK.

Sources

Last reviewed: 19 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.