The vulnerability is a classic Java Deserialization Remote Code Execution (RCE) in the fabric-sdk-java library. The root cause is the unsafe deserialization of Channel objects from a byte stream without proper validation.
The attack starts when an application uses the org.hyperledger.fabric.sdk.HFClient.deSerializeChannel method to deserialize a Channel object from a byte array. This method is the public entry point for the vulnerability. It creates an ObjectInputStream from the provided bytes and calls readObject().
This triggers the readObject method within the org.hyperledger.fabric.sdk.Channel class itself. This method directly calls in.defaultReadObject() without configuring an ObjectInputFilter to restrict which classes can be deserialized. An attacker can therefore provide a crafted byte array containing a serialized object with a malicious gadget chain. When readObject() is called, the Java Virtual Machine (JVM) will deserialize the object, executing the gadget chain and leading to RCE on the client application's host.
The vulnerability advisory correctly identifies the vulnerable code pattern, although it mistakenly places the deSerializeChannel method in Channel.java when it is actually located in HFClient.java. The provided proof-of-concept, client.deSerializeChannel(maliciousBytes), confirms that HFClient is the correct class for the entry point.