CVE-2026-88900: Apache Camel: Camel-JGroups: Unsafe Java Deserialization of Cluster Messages in the JGroups Consumer Can Lead to Remote Code Execution
Deserialization of Untrusted Data vulnerability in Apache Camel Camel-Jgroups component.
This issue affects Apache Camel: from 4.0.0 before 4.18.5, from 4.19.0 before 4.22.1.
JGroupsEndpoint.createExchange(Message), which CamelJGroupsReceiver calls for every message the jgroups consumer receives before the exchange is routed, set the exchange body from org.jgroups.Message.getObject(). For an ObjectMessage, which is the message type the Camel jgroups producer sends, JGroups Java-deserializes the payload through an ObjectInputStream on its own receive thread as the message arrives, and getObject() returns the resulting object. No java.io.ObjectInputFilter was applied on that path unless the deployment had set a JVM-wide serialization filter: camel-jgroups installed none, and the JGroups versions shipped with the affected releases apply none of their own, so any serializable class on the application classpath could be instantiated and its deserialization callbacks run. Unless a channel or the channelProperties option is configured, the consumer creates its channel with new JChannel(), the stock JGroups protocol stack, which multicasts over UDP without the AUTH protocol and without encryption, so any host able to reach the cluster's multicast group or bind port can join the cluster and send messages to the consumer without credentials. Such a host could send a crafted serialized object that leads to remote code execution in the Camel process when a usable deserialization gadget chain is present on the classpath, and no non-default option was required on the consumer. Because JGroups materializes the object before Camel's receiver runs, a check performed by Camel can only inspect the deserialized result and cannot stop code that runs during deserialization, so closing the issue also requires a control that applies before the payload is read, as described in the mitigation. Exploitation requires network access to the cluster's multicast group or bind port, which with the default UDP multicast transport means a host on an adjacent network, and a usable gadget chain on the classpath, which is why the severity is assessed as high rather than critical.
Users are recommended to upgrade to version 4.23.0, which fixes the issue. If users are on the 4.22.x releases stream, then they are suggested to upgrade to 4.22.1. If users are on the 4.18.x releases stream, then they are suggested to upgrade to 4.18.5. The 4.14.x releases stream and earlier, and the 4.15.x to 4.17.x and 4.19.x to 4.21.x release lines, reached end of life before this issue was resolved and will not receive a fix, so deployments on those lines must move to a supported release.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
Apache Camel Camel-JGroupsto a version that resolves this vulnerability.Fixed in 4.23.0 - Upgrade
Upgrade
Apache Camel Camel-JGroupsto a version that resolves this vulnerability.Fixed in 4.22.1 - Upgrade
Upgrade
Apache Camel Camel-JGroupsto a version that resolves this vulnerability.Fixed in 4.18.5 - Configuration
Configure a JVM-wide jdk.serialFilter that allows only the classes the routes exchange over the cluster; deployments on 4.22.1 and 4.18.5 must configure this or another pre-read control.
JVM serialization jdk.serialFilter = Allow only the classes exchanged by the routes over the cluster - Configuration
Configure a channel secured with AUTH together with SYM_ENCRYPT or ASYM_ENCRYPT through the channelProperties option so protection is applied before the payload is read.
JGroups channel channelProperties = AUTH together with SYM_ENCRYPT or ASYM_ENCRYPT - Configuration
Configure the deserializationFilter option to restrict the class of the deserialized body before the exchange is routed; if unset, the JVM-wide jdk.serialFilter is honored, otherwise this default allow-list is applied.
Camel JGroups consumer deserializationFilter = !java.net.**;java.**;javax.**;org.apache.camel.**;!* - Configuration
On 4.23.0, configure the jgroups.deserialization.filter system property or another pre-read control; the consumer refuses to start unless at least one control is configured, unless acceptAllObjects=true is set.
JGroups jgroups.deserialization.filter = A restrictive deserialization filter
Event History
Frequently Asked Questions
Which deployments are exposed?
Deployments using the Camel JGroups consumer in Apache Camel versions 4.0.0 through before 4.18.5, or 4.19.0 through before 4.22.1, are affected. The issue is triggered before a received message is routed.
Does the default JGroups consumer configuration provide protection?
No. When no channel or channelProperties option is configured, the consumer creates a JChannel using the stock JGroups protocol stack, which multicasts over UDP and does not include the AUTH protocol.
What must an attacker be able to do?
An attacker needs to send a crafted JGroups ObjectMessage to a vulnerable consumer. The payload is Java-deserialized on JGroups' receive thread, and deserialization callbacks from serializable classes on the application classpath can run.
What mitigation is available if upgrading cannot happen immediately?
A JVM-wide Java serialization filter can provide protection, because affected Camel JGroups installations do not apply an ObjectInputFilter on this path themselves. Configuring channel security rather than relying on the default unauthenticated stack can also reduce message injection exposure.