Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain PUBLISH access to a subscribed Redis channel
-
DeliveryCraft malicious serialized Java gadget payload
-
ExploitPublish payload bytes to the channel
-
ExecutionRedisConsumer.setBody deserializes via default JDK serializer
-
PersistGadget readObject executes during deserialization
-
ImpactArbitrary code execution on the Camel host
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A08:2025 - Software or Data Integrity Failures
ASVS 5.0
V1 - Encoding and Sanitization Safe deserialization, type allowlists
MITRE ATT&CK
2 techniques across 2 tactics: Execution, Initial Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Applies only when the camel-spring-redis endpoint runs with no explicit serializer option set, so the component lazily builds a bare JdkSerializationRedisSerializer with no java.io.ObjectInputFilter installed. On the consumer side the attacker must be able to PUBLISH to a channel the route subscribes to; on the producer side (GET/HGET/HGETALL/HVALS) and in SpringRedisIdempotentRepository the attacker must be able to write attacker-controlled bytes into the read keyspace. Exploitation further requires a viable deserialization gadget on the application classpath. Key limiting factors: a Redis instance that enforces authentication, restricts which clients may publish, and is not exposed to untrusted networks substantially reduces exposure. Critically, wiring a String serializer into a custom redisTemplate does NOT mitigate the consumer path - RedisConsumer.setBody reads getSerializer directly - so only the serializer endpoint option, the jdk.serialFilter JVM property, or upgrading closes it. |
| Impact | This is a genuine high-priority issue, not a CVSS-inflated one. The vendor-supplied CVSS:3.1 vector (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H, base 8.8) is internally consistent with the technical description: an unfiltered Java deserialization sink (CWE-502) reachable over the network with low attack complexity and no user interaction, yielding full confidentiality, integrity and availability impact - i.e. remote code execution on the Camel JVM. The PR:L metric aligns with the description's prerequisite that an attacker be 'able to issue PUBLISH on a subscribed channel' (or write to the read keyspace), implying some level of access to the Redis instance rather than fully anonymous internet exploitation. No EPSS score, no CISA KEV listing, and no public POC were provided in the input, so exploitation is currently theoretical/unproven in the wild despite the dangerous primitive. The practical risk hinges heavily on deployment exposure: a Redis instance reachable by untrusted clients (no auth, exposed to untrusted networks) combined with a deserialization gadget on the Camel classpath makes this readily exploitable, whereas an authenticated, network-restricted Redis sharply narrows the attack surface. Net: treat as a real priority for anyone running the camel-spring-redis component with the default serializer, but note the exploitation-signal data (EPSS/KEV/POC) is absent and risk is conditional on Redis exposure. |
| Exploit ScenarioDerived | An attacker who can publish messages to a Redis channel that a Camel route subscribes to crafts a serialized Java object graph built from a gadget chain present on the application's classpath and issues a PUBLISH to that channel. RedisConsumer.setBody feeds the raw bytes straight into the default JdkSerializationRedisSerializer before any route logic runs, so readObject executes the gadget and runs arbitrary code in the Camel JVM. No public exploit code was identified at time of analysis, and exploitation also requires a usable deserialization gadget to be available on the classpath. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 19, 2026
Deserialization of untrusted data in the Apache Camel Spring Redis component (camel-spring-redis) allows an authenticated attacker who can either PUBLISH to a channel the route subscribes to, or write attacker-controlled bytes into a key the component later reads, to instantiate an arbitrary class graph in the application's JVM and execute its readObject method. Every release from 2.11.0 up to (but not including) 4.18.5 and 4.22.1 ships the affected default, which lazily builds a bare JdkSerializationRedisSerializer with no java.io.ObjectInputFilter whenever no serializer option is configured. No public exploit code was identified at time of analysis, but exploitation needs only a viable gadget on the classpath, which is why this carries CVSS 8.8 with high confidentiality and integrity impact.
RemediationAI
Upgrade to Apache Camel 4.23.0, the release that fixes the issue; deployments on the 4.22.x stream should move to 4.22.1 and those on 4.18.x to 4.18.5. The 4.14.x stream and earlier are end of life and will not receive a fix, so those deployments must migrate to a supported release. If an immediate upgrade is impossible, set the JVM-wide serialization filter, for example -Djdk.serialFilter=!java.net.;java.;javax.;org.apache.camel.;!*, which the vulnerable path honours because it deserializes through a java.io.ObjectInputStream; the trade-off is that an over-broad filter can break legitimate payload types across the whole JVM, so scope and test it. Alternatively set the serializer endpoint option to a non-Java serializer such as StringRedisSerializer - this must be the endpoint's serializer option, not merely a serializer wired into a custom redisTemplate, because RedisConsumer.setBody bypasses the template and remains exposed otherwise; the side effect is that all message bodies must then be plain strings and existing Java-serialized payloads in Redis become unreadable. As defence in depth, enable authentication on the Redis instance, restrict which clients are permitted to PUBLISH to the subscribed channels (ACL rules limiting the PUBLISH command), and keep any Redis instance consumed by Camel off untrusted networks. Mitigation and fix details are in the PRs https://github.com/apache/camel/pull/25587, https://github.com/apache/camel/pull/25588, https://github.com/apache/camel/pull/25589 and https://github.com/apache/camel/pull/25734, and the advisory at https://camel.apache.org/security/CVE-2026-78165.html.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The root cause is CWE-502 (Deserialization of Untrusted Data) in a place that code scanning for explicit java.io.ObjectInputStream usage would miss: camel-spring-redis never constructs an ObjectInputStream itself. Instead, RedisConfiguration.getSerializer lazily returns a plain JdkSerializationRedisSerializer subclass of Spring Data Redis; Spring's implementation delegates deserialization through DeserializingConverter to DefaultDeserializer, which wraps the byte array in a ConfigurableObjectInputStream and installs no java.io.ObjectInputFilter. That serializer instance is reused for every read the component performs. On the consumer path, RedisConsumer.setBody applies it to the raw bytes of every message published to the subscribed channels before the Exchange is built, so the deserialization sink fires before any route logic - including any guard a route author might add - can inspect the payload. The same default backs the RedisTemplate created by RedisConfiguration.createDefaultTemplate, so producer read commands GET, HGET, HGETALL and HVALS deserialize whatever attacker-written content sits in the Redis keyspace, and SpringRedisIdempotentRepository inherits that template. Crucially, RedisConsumer.setBody reads getSerializer directly rather than the serializer bound to the template, so pinning a StringRedisSerializer onto a custom redisTemplate leaves the consumer side fully exposed; only setting the serializer endpoint option closes it. The upstream fix adds a security-labelled deserializationFilter endpoint option (jdk.serialFilter syntax) applied to the default JDK serializer on both consumer and producer read commands, falling back to the JVM-wide jdk.serialFilter and then to a conservative default that denies java.net. while allowing java., javax. and org.apache.camel.. Because the code path reads through an ObjectInputStream, the JVM-wide property is honoured, which is what makes the documented -Djdk.serialFilter workaround effective.
Know when Apache Camel gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Network-reachable deserialization with low complexity yielding RCE (C/I/A:H); PR:L because the attacker needs PUBLISH or keyspace-write access to the Redis instance rather than full anonymity.
Primary rating from Vendor (apache).
CVSS VectorVendor: apache
DescriptionCVE.org
Deserialization of Untrusted Data vulnerability in Apache Camel Spring Redis component.
This issue affects Apache Camel: from 2.11.0 before 4.18.5, from 4.19.0 before 4.22.1.
RedisConfiguration.getSerializer lazily built a bare JdkSerializationRedisSerializer whenever no serializer option was configured, and that instance was used for every read the component performs. Spring's implementation delegates through DeserializingConverter to DefaultDeserializer, which reads the bytes with a ConfigurableObjectInputStream and installs no java.io.ObjectInputFilter on the stream, so an arbitrary serialized class graph was materialised and its readObject method executed. RedisConsumer.setBody applied that serializer to the raw bytes of every message published to the subscribed channels, before the Exchange was constructed and therefore before any route logic could inspect the message, so an actor able to issue PUBLISH on a subscribed channel reached the deserialization sink directly. The same default serializer backed the RedisTemplate built by RedisConfiguration.createDefaultTemplate, so the producer read commands GET, HGET, HGETALL and HVALS deserialized whatever was stored in the Redis keyspace, and SpringRedisIdempotentRepository shared that template. Configuring a custom redisTemplate did not close the consumer path, because RedisConsumer.setBody reads getSerializer directly rather than the serializer attached to the template, so a deployment that had wired a String serializer into its own template remained exposed on the consumer side unless it also set the serializer option. The component never constructed a java.io.ObjectInputStream itself, which is why earlier passes over the Camel codebase for unfiltered Java deserialization did not reach it. The behaviour dates back to the introduction of the component, first released in 2.11.0, and was unchanged until this fix.
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 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. For deployments that cannot upgrade immediately, set the JVM-wide jdk.serialFilter system property, which the affected code path honours because it reads through a java.io.ObjectInputStream, for example -Djdk.serialFilter=!java.net.;java.;javax.;org.apache.camel.;!* ; or set the serializer endpoint option to a serializer that does not use Java serialization, such as StringRedisSerializer, noting that this must be set as the serializer option and not only on a custom redisTemplate. As defence in depth, require authentication on the Redis instance and restrict which clients may publish to the subscribed channels, and do not expose a Redis instance consumed by Camel to untrusted networks.
Executive ViewAI
Apache Camel's Spring Redis component (camel-spring-redis) contains a high-severity deserialization flaw that can allow an attacker with write access to a Redis channel or key to instantiate arbitrary classes and execute code inside the application's JVM. Applications using affected releases from 2.11.0 through the versions immediately preceding 4.18.5 and 4.22.1 are exposed, with potential high impact to the confidentiality and integrity of integration data and connected systems. No public exploit identified at time of analysis, but leadership should prioritize remediation because the component often sits in trusted data flows and exploitation only requires a viable gadget on the classpath.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Insecure deserialization occurs when an application converts serialized data (a stream of bytes representing an object's state) back into a living object without proper validation.
More in Apache Camel
View allRemote code execution in Apache Camel's camel-coap component (versions 4.14.0-4.14.5, 4.18.0 before 4.18.1, and 4.19.0)
Unsafe Java deserialization in Apache Camel's camel-infinispan component allows arbitrary code execution when the ProtoS
Unauthenticated remote code execution affects the camel-hazelcast component of Apache Camel 4.0.0 through 4.18.4 and 4.1
Header-injection in the Apache Camel camel-atmosphere-websocket producer lets an external sender hijack WebSocket messag
Header-filter bypass in the Apache Camel Undertow component (4.11.0-4.14.8, 4.15.0-4.18.3, and 4.19.0-4.21.x) lets remot
Remote code execution in Apache Camel 3.18.0-4.14.5 and 4.15.0-4.18.1 stems from CXF and Knative HeaderFilterStrategy im
Message header injection in Apache Camel's camel-mail component (3.0.0 before 4.14.6 and 4.15.0 before 4.18.1) lets an a
Remote code execution via unsafe Java deserialization affects the camel-pqc component of Apache Camel 4.18.0-4.18.2 and
Unsafe Java deserialization in Apache Camel's camel-consul component (ConsulRegistry / ConsulRegistryUtils.deserialize)
Unauthenticated deserialization of attacker-controlled messages in Apache Camel's camel-jgroups consumer can lead to rem
Expression language injection in the Apache Camel dynamic-router-control endpoint allows a party who can place a message
Cypher injection in Apache Camel's camel-neo4j producer allows attackers who control JSON key names in the CamelNeo4jMat
EUVD-2026-104221
GHSA-8p5r-xpxr-x2x7
NVD
CVE.org
Exploit-DB