Skip to content

Unsafe Deserialization from JMS

Description

Deserialization of untrusted JMS ObjectMessage can lead to remote code execution. Avoid directly calling `getObject()` on untrusted data.

Examples

Insecure Code

java
ObjectMessage objMsg = (ObjectMessage) message; Object obj = objMsg.getObject();

Secure Code

java
protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException {
  if (!desc.getName().equals(Bicycle.class.getName())) {
    throw new InvalidClassException("Unauthorized deserialization attempt", desc.getName());
  }
  return super.resolveClass(desc);
}

Remediation

Avoid deserialization of untrusted data. Use a class whitelist via a custom ObjectInputStream.

Rule Details

FieldValue
IDCODE-0504
CategoryDeserialization
SeverityHIGH
CWECWE-502
ConfidenceHIGH
ImpactHIGH
LikelihoodMEDIUM
ExploitabilityMODERATE
Tagsdeserialization, jms, objectmessage
OWASPA8:2017-Insecure Deserialization, A08:2021-Software and Data Integrity Failures