JmsBinding.extractBodyFromJms() in camel-jms, and the equivalent JmsBinding class in camel-sjms, deserialized the payload of incoming JMS ObjectMessage values via javax.jms.ObjectMessage.getObject() without applying any ObjectInputFilter, class allowlist or class denylist. Because this code path is reached whenever the mapJmsMessage option is enabled (the default) and Camel acts as a JMS consumer, an attacker able to publish a crafted ObjectMessage to a queue or topic consumed by a Camel application could achieve remote code execution when a deserialization gadget chain was present on the classpath. The same handling was reached transitively through camel-sjms2 (whose Sjms2Endpoint extends SjmsEndpoint) and through camel-amqp (whose AMQPJmsBinding extends JmsBinding), and by other JMS-family components built on JmsComponent such as camel-activemq and camel-activemq6. This issue affects Apache Camel: from 3.0.0 before 4.14.7, from 4.15.0 before 4.18.2, from 4.19.0 before 4.20.0. Users are recommended to upgrade to version 4.20.0, which fixes the issue. If users are on the 4.14.x LTS releases stream, then they are suggested to upgrade to 4.14.7. If users are on the 4.18.x releases stream, then they are suggested to upgrade to 4.18.2.
The JmsBinding.extractBodyFromJms() method in the camel-jms and camel-sjms modules calls javax.jms.ObjectMessage.getObject() to deserialize the payload of incoming JMS ObjectMessage type messages without applying input filters (ObjectInputFilter), allowlists, or blocklists. This path is reached by default when the mapJmsMessage option is enabled (default value) and the Camel application operates as a JMS consumer. An attacker with the ability to publish messages to a queue or topic handled by such an application can deliver a crafted payload exploiting any deserialization gadget chain present on the classpath. The issue also affects the camel-sjms2, camel-amqp, camel-activemq, and camel-activemq6 components, which indirectly use vulnerable JmsBinding classes.
Successful exploitation of the vulnerability allows an unauthenticated attacker to remotely execute arbitrary code (RCE) in the context of the Apache Camel application process, which can lead to complete server compromise, data leakage, or service availability disruption.
Apache Camel should be updated to version 4.20.0 (recommended). Users of the LTS 4.14.x branch should update to version 4.14.7. Users of the 4.18.x branch should update to version 4.18.2. As a temporary workaround, consider disabling the mapJmsMessage option or restricting access to JMS queues and topics exclusively to trusted senders.
Apache Camel in versions: from 3.0.0 to (excluding) 4.14.7, from 4.15.0 to (excluding) 4.18.2, and from 4.19.0 to (excluding) 4.20.0. Affects components: camel-jms, camel-sjms, camel-sjms2, camel-amqp, camel-activemq, camel-activemq6.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HApache Camel
APPApache4.19.03.0.0 – 4.14.7 (bez)4.15.0 – 4.18.2 (bez)
Related vulnerabilities
Apache Camel: wstrzyknięcie nagłówków HTTP w camel-cxf i camel-knative (RCE)
Apache Camel — obejście filtrowania nagłówków umożliwiające RCE
Apache Camel: wstrzyknięcie nagłówków przez komponent Camel-Mail
Apache Camel camel-coap: RCE poprzez wstrzyknięcie nagłówków Camel
Apache Camel: pominięcie weryfikacji issuer JWT w KeycloakSecurityPolicy