Skip to main content

Apache Camel CVE-2026-78165

| EUVDEUVD-2026-104221 HIGH
Deserialization of Untrusted Data (CWE-502)
2026-10-19 apache GHSA-8p5r-xpxr-x2x7
8.8
CVSS 3.1 · Vendor: apache
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Obtain PUBLISH access to a subscribed Redis channel
  2. Delivery
    Craft malicious serialized Java gadget payload
  3. Exploit
    Publish payload bytes to the channel
  4. Execution
    RedisConsumer.setBody deserializes via default JDK serializer
  5. Persist
    Gadget readObject executes during deserialization
  6. Impact
    Arbitrary 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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

Apache Camel 2.11.0 <4.18.5
Apache Camel 4.19.0 <4.22.1

Affected Packages

euvd apache_camel fix: 4.18.5, 4.22.1

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

Vendor (apache) PRIMARY 8.8 HIGH
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
vuln.today AI 8.8 HIGH

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.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (apache).

CVSS VectorVendor: apache

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

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

Why It Matters

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.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

Prevalence
Medium
widely-used enterprise integration framework but Redis component is an optional module
Data Quality
4 sources
Confidence: Medium

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS N/A
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact
High

Priority Score

44
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +44
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

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.

CVE-2026-33453 CRITICAL POC
10.0 Apr 27

Remote 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)

CVE-2026-40858 HIGH POC
8.8 Apr 27

Unsafe Java deserialization in Apache Camel's camel-infinispan component allows arbitrary code execution when the ProtoS

CVE-2026-78162 CRITICAL
10.0 Oct 19

Unauthenticated remote code execution affects the camel-hazelcast component of Apache Camel 4.0.0 through 4.18.4 and 4.1

CVE-2026-71300 CRITICAL
9.8 Aug 24

Header-injection in the Apache Camel camel-atmosphere-websocket producer lets an external sender hijack WebSocket messag

CVE-2026-78329 CRITICAL
9.8 Aug 24

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

CVE-2026-47323 CRITICAL
9.8 May 19

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

CVE-2026-33454 CRITICAL
9.4 Apr 27

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

CVE-2026-46590 HIGH
8.8 Jul 06

Remote code execution via unsafe Java deserialization affects the camel-pqc component of Apache Camel 4.18.0-4.18.2 and

CVE-2026-27172 HIGH
8.8 Apr 27

Unsafe Java deserialization in Apache Camel's camel-consul component (ConsulRegistry / ConsulRegistryUtils.deserialize)

CVE-2026-88900 HIGH
8.8 Oct 19

Unauthenticated deserialization of attacker-controlled messages in Apache Camel's camel-jgroups consumer can lead to rem

CVE-2026-83531 HIGH
8.8 Oct 19

Expression language injection in the Apache Camel dynamic-router-control endpoint allows a party who can place a message

CVE-2026-46591 HIGH
8.2 Jul 06

Cypher injection in Apache Camel's camel-neo4j producer allows attackers who control JSON key names in the CamelNeo4jMat

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy