/

CVE-2026-41586

Severity:

CRITICAL RISK

(9.8)

Unsafe Deserialization (CWE-502) in Fabric Channel

CVE-2026-41586

Analyzed

Vulnerability type

Category:

Unsafe Deserialization

CWE:

CWE-502

Impact:

Remote Code Execution

Severity:

CRITICAL RISK

(9.8)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

Hyperledger Fabric contains an unsafe Java deserialization vulnerability in Channel.java, where untrusted byte arrays are passed to ObjectInputStream.readObject() without an ObjectInputFilter. An attacker who can supply or influence serialized channel data may achieve remote code execution, making the issue critical in exposed or insufficiently isolated deployments.

Hyperledger Fabric contains an unsafe Java deserialization vulnerability in Channel.java, where untrusted byte arrays are passed to ObjectInputStream.readObject() without an ObjectInputFilter. An attacker who can supply or influence serialized channel data may achieve remote code execution, making the issue critical in exposed or insufficiently isolated deployments.

Affected context

The vulnerability affects Hyperledger Fabric deployments using versions 1.0.0 through 2.2.26, where Channel.java exposes deserialization through readObject() and deSerializeChannel(). Risk depends on whether an attacker can cause untrusted serialized data to reach these code paths and whether the affected process has meaningful privileges or network access.

The vulnerability affects Hyperledger Fabric deployments using versions 1.0.0 through 2.2.26, where Channel.java exposes deserialization through readObject() and deSerializeChannel(). Risk depends on whether an attacker can cause untrusted serialized data to reach these code paths and whether the affected process has meaningful privileges or network access.

Exploit preconditions

  • Attack surface: Java object deserialization in the Fabric channel-handling component
  • Required access: Ability to provide, modify, relay, or otherwise influence serialized channel data accepted by a vulnerable process
  • Trigger point: Invocation of readObject() through readObject() or deSerializeChannel()
  • Why exploitation is possible: Untrusted bytes are deserialized without an ObjectInputFilter, allowing attacker-controlled object graphs and potentially dangerous classes to be instantiated
  • Attack surface: Java object deserialization in the Fabric channel-handling component
  • Required access: Ability to provide, modify, relay, or otherwise influence serialized channel data accepted by a vulnerable process
  • Trigger point: Invocation of readObject() through readObject() or deSerializeChannel()
  • Why exploitation is possible: Untrusted bytes are deserialized without an ObjectInputFilter, allowing attacker-controlled object graphs and potentially dangerous classes to be instantiated

Why this happens

The underlying flaw is the use of Java native object deserialization on untrusted input without restricting the classes or object graph characteristics that may be processed. ObjectInputStream.readObject() can invoke deserialization behavior associated with attacker-controlled data, and the absence of an ObjectInputFilter removes an important containment boundary. This behavior maps to CWE-502: Deserialization of Untrusted Data.

The underlying flaw is the use of Java native object deserialization on untrusted input without restricting the classes or object graph characteristics that may be processed. ObjectInputStream.readObject() can invoke deserialization behavior associated with attacker-controlled data, and the absence of an ObjectInputFilter removes an important containment boundary. This behavior maps to CWE-502: Deserialization of Untrusted Data.

Potential impact

  • An attacker may execute arbitrary code in the context of the Fabric process
  • Ledger, channel, or application data could be modified, disclosed, or destroyed
  • The compromised process could be used for lateral movement within connected environments
  • Network credentials, private material, or operational secrets could be exposed
  • Availability of Fabric services could be disrupted
  • An attacker may execute arbitrary code in the context of the Fabric process
  • Ledger, channel, or application data could be modified, disclosed, or destroyed
  • The compromised process could be used for lateral movement within connected environments
  • Network credentials, private material, or operational secrets could be exposed
  • Availability of Fabric services could be disrupted

General mitigation guidance

Mitigation generally focuses on eliminating native deserialization of untrusted data and reducing the trust placed in serialized objects.

Common defensive patterns include:

  • Prefer explicit, schema-bound data formats with safe parsers over native Java object deserialization
  • Apply restrictive ObjectInputFilter policies when deserialization cannot be removed
  • Allow only documented classes and impose limits on object depth, references, and serialized size
  • Validate provenance, integrity, and expected structure before processing serialized data
  • Run Fabric components with least privilege and isolate them from unnecessary network and filesystem access
  • Treat serialized channel data as untrusted even when it originates from an authenticated peer
  • Monitor for anomalous deserialization activity and unexpected child-process execution

At the time of the stated disclosure, publicly available patches were not reported; compensating controls should therefore be evaluated where applicable.

Mitigation generally focuses on eliminating native deserialization of untrusted data and reducing the trust placed in serialized objects.

Common defensive patterns include:

  • Prefer explicit, schema-bound data formats with safe parsers over native Java object deserialization
  • Apply restrictive ObjectInputFilter policies when deserialization cannot be removed
  • Allow only documented classes and impose limits on object depth, references, and serialized size
  • Validate provenance, integrity, and expected structure before processing serialized data
  • Run Fabric components with least privilege and isolate them from unnecessary network and filesystem access
  • Treat serialized channel data as untrusted even when it originates from an authenticated peer
  • Monitor for anomalous deserialization activity and unexpected child-process execution

At the time of the stated disclosure, publicly available patches were not reported; compensating controls should therefore be evaluated where applicable.

How teams detect issues like this

Organizations can look for this vulnerability through:

  • Static analysis rules identifying ObjectInputStream.readObject() on externally influenced data
  • Code review checks for readObject(), custom readObject() methods, and deserialization wrappers lacking ObjectInputFilter configuration
  • Dependency and source audits covering Fabric channel-handling components
  • Runtime monitoring for unexpected process creation, class-loading anomalies, or unusual serialized input sizes
  • Policy enforcement requiring approved serialization formats and explicit allowlists for Java deserialization

Automated code-review and software composition analysis tools may help identify related unsafe deserialization patterns.

Organizations can look for this vulnerability through:

  • Static analysis rules identifying ObjectInputStream.readObject() on externally influenced data
  • Code review checks for readObject(), custom readObject() methods, and deserialization wrappers lacking ObjectInputFilter configuration
  • Dependency and source audits covering Fabric channel-handling components
  • Runtime monitoring for unexpected process creation, class-loading anomalies, or unusual serialized input sizes
  • Policy enforcement requiring approved serialization formats and explicit allowlists for Java deserialization

Automated code-review and software composition analysis tools may help identify related unsafe deserialization patterns.

Sources

SourceLink
github.comgithub.com/hyperledger/fabric/security/advisories/GHSA-prf8-cf2x-rhx7
hyperledger.github.iohyperledger.github.io/fabric-gateway

Frequently asked

questions

Potentially. Exploitability depends on whether untrusted serialized channel data can reach the vulnerable deserialization paths through a reachable Fabric service or trusted intermediary.

Not necessarily in the code pattern itself. The practical requirement is the ability to influence the serialized bytes accepted by the affected process; deployment authentication and authorization controls may limit that ability.

Remove native Java deserialization from untrusted-data paths and use an explicit, schema-bound format. If deserialization is unavoidable, enforce a strict ObjectInputFilter allowlist and resource limits.

Treat all serialized data as untrusted, require security review for deserialization APIs, enforce static-analysis policies, and run ledger components with minimal privileges and strong isolation.

Potentially. Exploitability depends on whether untrusted serialized channel data can reach the vulnerable deserialization paths through a reachable Fabric service or trusted intermediary.

Not necessarily in the code pattern itself. The practical requirement is the ability to influence the serialized bytes accepted by the affected process; deployment authentication and authorization controls may limit that ability.

Remove native Java deserialization from untrusted-data paths and use an explicit, schema-bound format. If deserialization is unavoidable, enforce a strict ObjectInputFilter allowlist and resource limits.

Treat all serialized data as untrusted, require security review for deserialization APIs, enforce static-analysis policies, and run ledger components with minimal privileges and strong isolation.

Find out what's already
exploitable in your codebase.