Description
Deserialization of Untrusted Data vulnerability in Apache Camel, Apache Camel JMS component.

JmsBinding.extractBodyFromJms() in camel-jms - and the equivalent JmsBinding in camel-sjms - deserializes the payload of an incoming JMS ObjectMessage via jakarta.jms.ObjectMessage.getObject() whenever the mapJmsMessage option is enabled (the default) and Camel acts as a JMS consumer. The CVE-2026-40860 hardening added a post-deserialization class check that rejects classes outside the default allow-list java.**;javax.**;org.apache.camel.**;!*. However org.apache.camel.support.DefaultExchangeHolder itself lives in the allow-listed org.apache.camel.** namespace, so an ObjectMessage whose top-level object is a DefaultExchangeHolder passes the check. The receiving side then calls DefaultExchangeHolder.unmarshal() on it without requiring the transferExchange option to be enabled - an asymmetric trust boundary, since the sending side gates ObjectMessage and transferExchange handling but the receiving side did not - writing every non-null field of the holder into the Exchange: the message body, the IN and OUT headers, the exchange properties, the variables, the exchange id and the exception. An attacker who can publish an ObjectMessage to a queue or topic consumed by an affected Camel application can therefore inject arbitrary Exchange state using only universally-trusted java.lang and java.util types, with no deserialization gadget chain required, to manipulate routing and headers, exchange properties and error handling. The same handling applies to camel-sjms and camel-sjms2, and to the JMS-family components built on JmsComponent and JmsBinding: camel-amqp, camel-activemq and camel-activemq6. This is a bypass of the CVE-2026-40860 fix rather than a flaw in it.
This issue affects Apache Camel: from 3.0.0 before 4.14.8, from 4.15.0 before 4.18.3, from 4.19.0 before 4.21.0; Apache Camel: from 3.0.0 before 4.14.8, from 4.15.0 before 4.18.3, from 4.19.0 before 4.21.0.

Users are recommended to upgrade to version 4.21.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.8. If users are on the 4.18.x releases stream, then they are suggested to upgrade to 4.18.3. After upgrading, JMS ObjectMessage handling is disabled by default in camel-jms, camel-sjms and the JMS-family components (a new objectMessageEnabled option defaults to false at the component and endpoint level), so an incoming ObjectMessage - including a DefaultExchangeHolder payload - is no longer deserialized unless the option is explicitly enabled; only set objectMessageEnabled=true when the consumed JMS destination is fed exclusively by trusted producers. For deployments that cannot upgrade immediately, restrict publish access to the queues and topics consumed by Camel to trusted producers via JMS broker authorization, and do not expose JMS consumers that map ObjectMessage bodies to untrusted networks; a JMS-provider deserialization allow-list does not mitigate this specific bypass because the crafted payload uses only universally-trusted classes.
Published: 2026-07-06
Score: 7.3 High
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

The flaw is a deserialization issue in Apache Camel's JMS component. When the mapJmsMessage option is enabled (the default), Camel extracts the payload of an incoming JMS ObjectMessage by calling jakarta.jms.ObjectMessage.getObject(). A recent hardening added a whitelist that blocks classes outside the java.*, javax.*, and org.apache.camel.* namespaces, but org.apache.camel.support.DefaultExchangeHolder is in that namespace. Thus an ObjectMessage containing a DefaultExchangeHolder bypasses the whitelist, and the component calls unmarshal() on it without requiring transferExchange. The holder writes any non‑null field into the Camel Exchange—message body, IN/OUT headers, properties, variables, exchange id, exception—allowing an attacker who can publish an ObjectMessage to a queue or topic to inject arbitrary Exchange state, manipulate routing, modify headers, change error handling, or trick the application flow. This constitutes a high‑severity deserialization flaw (CWE‑502) that can lead to arbitrary code behavior or denial of service.

Affected Systems

The affected product is Apache Camel (versions starting at 3.0.0). The flaw exists in camel-jms, camel-sjms, camel-sjms2, camel-amqp, camel-activemq, and camel-activemq6 JMS‑family components. Vulnerable releases include the 4.14.x stream before 4.14.8, the 4.15.x stream before 4.18.3, and the 4.19.x stream before 4.21.0. Users running any of these streams that consume JMS ObjectMessages with the default mapJmsMessage enabled are at risk.

Risk and Exploitability

The EPSS score is less than 1%, and the vulnerability is not listed in CISA KEV, indicating a low likelihood of current exploitation. The CVSS base score is 7.3, signifying high severity. The attack requires the ability to publish a crafted ObjectMessage to a queue or topic that Camel consumes and the mapJmsMessage option to be enabled. Since the component defaults to disabling objectMessageEnabled after the fix, the risk is only present in configurations that still have it enabled or that consume ObjectMessage bodies from untrusted networks. An attacker with broker‑level write permissions can create the malicious payload using only standard java.lang or java.util classes, avoiding a gadget chain, and thus can exert arbitrary control over the Exchange state.

Generated by OpenCVE AI on July 28, 2026 at 09:49 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade Apache Camel to version 4.21.0 or later; if on the 4.14.x stream upgrade to 4.14.8, if on 4.18.x stream upgrade to 4.18.3.
  • After upgrading, verify that objectMessageEnabled is set to false for camel-jms, camel-sjms, camel-sjms2, camel-amqp, camel-activemq, and camel-activemq6, and enable it only when the destination is supplied exclusively by trusted producers.
  • If an upgrade is not immediately possible, restrict publish permissions on the JMS queues or topics consumed by Camel to trusted users using broker authorization, and avoid exposing Camel consumers that map ObjectMessage bodies to external networks.

Generated by OpenCVE AI on July 28, 2026 at 09:49 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Wed, 08 Jul 2026 12:15:00 +0000

Type Values Removed Values Added
References
Metrics threat_severity

None

threat_severity

Important


Mon, 06 Jul 2026 20:30:00 +0000

Type Values Removed Values Added
Metrics cvssV3_1

{'score': 7.3, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L'}

ssvc

{'options': {'Automatable': 'yes', 'Exploitation': 'none', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Mon, 06 Jul 2026 13:00:00 +0000

Type Values Removed Values Added
First Time appeared Apache
Apache camel
Vendors & Products Apache
Apache camel

Mon, 06 Jul 2026 09:00:00 +0000

Type Values Removed Values Added
Description Deserialization of Untrusted Data vulnerability in Apache Camel, Apache Camel JMS component. JmsBinding.extractBodyFromJms() in camel-jms - and the equivalent JmsBinding in camel-sjms - deserializes the payload of an incoming JMS ObjectMessage via jakarta.jms.ObjectMessage.getObject() whenever the mapJmsMessage option is enabled (the default) and Camel acts as a JMS consumer. The CVE-2026-40860 hardening added a post-deserialization class check that rejects classes outside the default allow-list java.**;javax.**;org.apache.camel.**;!*. However org.apache.camel.support.DefaultExchangeHolder itself lives in the allow-listed org.apache.camel.** namespace, so an ObjectMessage whose top-level object is a DefaultExchangeHolder passes the check. The receiving side then calls DefaultExchangeHolder.unmarshal() on it without requiring the transferExchange option to be enabled - an asymmetric trust boundary, since the sending side gates ObjectMessage and transferExchange handling but the receiving side did not - writing every non-null field of the holder into the Exchange: the message body, the IN and OUT headers, the exchange properties, the variables, the exchange id and the exception. An attacker who can publish an ObjectMessage to a queue or topic consumed by an affected Camel application can therefore inject arbitrary Exchange state using only universally-trusted java.lang and java.util types, with no deserialization gadget chain required, to manipulate routing and headers, exchange properties and error handling. The same handling applies to camel-sjms and camel-sjms2, and to the JMS-family components built on JmsComponent and JmsBinding: camel-amqp, camel-activemq and camel-activemq6. This is a bypass of the CVE-2026-40860 fix rather than a flaw in it. This issue affects Apache Camel: from 3.0.0 before 4.14.8, from 4.15.0 before 4.18.3, from 4.19.0 before 4.21.0; Apache Camel: from 3.0.0 before 4.14.8, from 4.15.0 before 4.18.3, from 4.19.0 before 4.21.0. Users are recommended to upgrade to version 4.21.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.8. If users are on the 4.18.x releases stream, then they are suggested to upgrade to 4.18.3. After upgrading, JMS ObjectMessage handling is disabled by default in camel-jms, camel-sjms and the JMS-family components (a new objectMessageEnabled option defaults to false at the component and endpoint level), so an incoming ObjectMessage - including a DefaultExchangeHolder payload - is no longer deserialized unless the option is explicitly enabled; only set objectMessageEnabled=true when the consumed JMS destination is fed exclusively by trusted producers. For deployments that cannot upgrade immediately, restrict publish access to the queues and topics consumed by Camel to trusted producers via JMS broker authorization, and do not expose JMS consumers that map ObjectMessage bodies to untrusted networks; a JMS-provider deserialization allow-list does not mitigate this specific bypass because the crafted payload uses only universally-trusted classes.
Title Apache Camel, Apache Camel: Camel JMS - CVE-2026-40860 fix bypass via DefaultExchangeHolder
Weaknesses CWE-502
References

cve-icon MITRE

Status: PUBLISHED

Assigner: apache

Published:

Updated: 2026-07-06T19:10:00.576Z

Reserved: 2026-05-04T11:44:06.700Z

Link: CVE-2026-43866

cve-icon Vulnrichment

Updated: 2026-07-06T19:09:56.676Z

cve-icon NVD

No data.

cve-icon Redhat

Severity : Important

Publid Date: 2026-07-06T08:35:04Z

Links: CVE-2026-43866 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-07-28T10:00:12Z

Weaknesses
  • CWE-502

    Deserialization of Untrusted Data