CVE-2026-94386: Camel OAuth: shared token cache leaks cross-profile tokens
MEDIUMApache Camel's camel-oauth component caches client-credentials tokens in a JVM-wide static cache keyed only on token endpoint and client ID, so two OAuth profiles that differ in scope or client secret can be handed each other's token. This matters for AI estates because the component fronts outbound calls from camel-openai, camel-langchain4j-agent, camel-huggingface, camel-spring-ai-chat and the watsonx connectors, so an agent or LLM call can run with broader authority than intended or reach a service the token was never issued for. Risk is moderate: CVSS is 4.8 (medium), EPSS is not available, the CVE is not in CISA KEV, no public exploit or Nuclei template exists, and exploitation needs a deployment with several profiles sharing one IdP client, so the real-world exposure is configuration-dependent. Upgrade to Camel 4.23.0 (or 4.22.2 on the 4.22.x stream); the 4.19.x–4.21.x lines are end of life and will not be fixed. Where you cannot upgrade yet, set camel.oauth.NAME.cache-tokens=false on every profile that shares a token endpoint and client ID, or register a separate IdP client per profile.
What is the risk?
Medium (CVSS 3.1: 4.8, AV:N/AC:H/PR:N/UI:N, C:L/I:L). Weakness is CWE-524 (use of cache containing sensitive information). It is not attacker-triggerable by untrusted input: profiles are set by the trusted deployment. It manifests only when more than one profile shares a token endpoint and client ID but differs in scope or client secret, and caching is on by default. The impact is privilege confusion: a token minted for one profile's scope or secret is replayed under another profile's identity. The party that benefits is the downstream service receiving the wrong token; if that service is hostile or compromised, it can replay the token within its scope. No KEV listing, no public exploit, EPSS unavailable. Affected versions are 4.19.0 up to but not including 4.22.2, and the 4.19–4.21 lines will not be patched.
How does the attack unfold?
What systems are affected?
| Package | Ecosystem | Vulnerable Range | Patched |
|---|---|---|---|
| org.apache.camel:camel-oauth | — | — | No patch |
Do you use org.apache.camel:camel-oauth? You're affected.
How severe is it?
What is the attack surface?
What should I do?
1 step1) Upgrade org.apache.camel:camel-oauth to 4.23.0, or to 4.22.2 if you are on the 4.22.x stream. 2) Deployments on 4.19.x–4.21.x must move to a supported release because no fix will be backported. 3) Interim workaround: set camel.oauth.NAME.cache-tokens=false for each named profile, or camel.oauth.cache-tokens=false for the default profile, on any profile that shares a token endpoint and client ID with another; this costs a token request per resolution. 4) Alternatively, register a separate IdP client for each profile that needs a different scope or client secret, so no two such profiles share a client ID. 5) Detection: inventory Camel routes and configs for multiple camel.oauth.* profiles with the same token endpoint and client ID; review IdP logs for token requests that are missing for profiles expected to authenticate independently; check that downstream AI services see tokens whose audience and scope match the calling profile. 6) Rotate secrets or reduce token lifetimes where cross-profile exposure is suspected.
How is it classified?
Which compliance frameworks are affected?
This CVE is relevant to:
Frequently Asked Questions
What is CVE-2026-94386?
Apache Camel's camel-oauth component caches client-credentials tokens in a JVM-wide static cache keyed only on token endpoint and client ID, so two OAuth profiles that differ in scope or client secret can be handed each other's token. This matters for AI estates because the component fronts outbound calls from camel-openai, camel-langchain4j-agent, camel-huggingface, camel-spring-ai-chat and the watsonx connectors, so an agent or LLM call can run with broader authority than intended or reach a service the token was never issued for. Risk is moderate: CVSS is 4.8 (medium), EPSS is not available, the CVE is not in CISA KEV, no public exploit or Nuclei template exists, and exploitation needs a deployment with several profiles sharing one IdP client, so the real-world exposure is configuration-dependent. Upgrade to Camel 4.23.0 (or 4.22.2 on the 4.22.x stream); the 4.19.x–4.21.x lines are end of life and will not be fixed. Where you cannot upgrade yet, set camel.oauth.NAME.cache-tokens=false on every profile that shares a token endpoint and client ID, or register a separate IdP client per profile.
Is CVE-2026-94386 actively exploited?
No confirmed active exploitation of CVE-2026-94386 has been reported, but organizations should still patch proactively.
How to fix CVE-2026-94386?
1) Upgrade org.apache.camel:camel-oauth to 4.23.0, or to 4.22.2 if you are on the 4.22.x stream. 2) Deployments on 4.19.x–4.21.x must move to a supported release because no fix will be backported. 3) Interim workaround: set camel.oauth.NAME.cache-tokens=false for each named profile, or camel.oauth.cache-tokens=false for the default profile, on any profile that shares a token endpoint and client ID with another; this costs a token request per resolution. 4) Alternatively, register a separate IdP client for each profile that needs a different scope or client secret, so no two such profiles share a client ID. 5) Detection: inventory Camel routes and configs for multiple camel.oauth.* profiles with the same token endpoint and client ID; review IdP logs for token requests that are missing for profiles expected to authenticate independently; check that downstream AI services see tokens whose audience and scope match the calling profile. 6) Rotate secrets or reduce token lifetimes where cross-profile exposure is suspected.
What systems are affected by CVE-2026-94386?
This vulnerability affects the following AI/ML architecture patterns: agent frameworks, LLM API integrations, enterprise integration pipelines, multi-tenant AI gateways.
What is the CVSS score for CVE-2026-94386?
CVE-2026-94386 has a CVSS v3.1 base score of 4.8 (MEDIUM). The EPSS exploitation probability is 0.34%.
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0055Unsecured CredentialsAML.T0091.000Application Access TokenCompliance Controls Affected
What are the technical details?
Original Advisory
Use of Cache Containing Sensitive Information vulnerability in Apache Camel Oauth component. This issue affects Apache Camel: from 4.19.0 before 4.22.2. OAuthClientCredentialsTokenResolver obtains OAuth 2.0 bearer tokens through the client credentials grant on behalf of the components that authenticate their outbound calls with a named OAuth profile, such as camel-openai, camel-langchain4j-agent, camel-huggingface, camel-docling, camel-a2a, camel-spring-ai-chat and the IBM watsonx components, and of applications that call the OAuthClientAuthenticationFactory SPI directly. It kept the tokens it obtained in a static cache shared by every resolver instance and every CamelContext in the JVM, and keyed that cache on the token endpoint and the client ID only, although the token request also carries the client secret and the requested scope. Two profiles that share a token endpoint and a client ID but request different scopes, or authenticate with different client secrets, therefore mapped to the same cache entry: the profile that resolved a token first populated the entry, and the other profile was then handed that token, with no token request made under its own configuration, for as long as the token remained valid. Token caching is enabled by default, and pointing several profiles at one identity provider client is an ordinary use of the profile support rather than an opt-in to an insecure setting. The outcome is an outbound request that carries a token issued for another profile's scope, which can grant broader authority than the calling profile was configured for, or reach a service the token was not issued for; with identity providers that derive a token's audience from the requested scope, a different scope can mean a token for a different service altogether. A profile configured with a different client secret was likewise served the token obtained with the other secret, without authenticating with its own. The profiles are configured by the deployment, which is trusted, so no untrusted input reaches the cache: the party that gains is the service that receives a token it was not meant to receive, which, if hostile or compromised, can replay that token within its scope. Reaching the issue requires a deployment that defines more than one profile sharing a token endpoint and client ID while differing in scope or client secret. 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.2. The 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 them must move to a supported release. For deployments that cannot upgrade immediately, disable token caching on every OAuth profile that shares a token endpoint and client ID with another profile, by setting camel.oauth.NAME.cache-tokens=false for a named profile or camel.oauth.cache-tokens=false for the default one, so that each resolution requests a token with that profile’s own scope and client secret, at the cost of a token request on every resolution. Alternatively, register a separate client at the identity provider for each profile that needs a different scope or client secret, so that no two such profiles share a client ID.
Exploitation Scenario
An enterprise runs a Camel integration with two profiles on one IdP client: 'llm-readonly' (scope for inference only) and 'agent-admin' (broader scope for an agent tool backend), both using camel-langchain4j-agent and camel-openai routes. Whichever route resolves a token first populates the shared static cache entry. The other profile then receives that cached token without any request under its own scope or secret. If the read-only route resolves second, it sends a request with the admin-scoped token to a model gateway or third-party endpoint; a compromised or hostile endpoint can capture and replay the token within its scope. Alternatively, with an IdP that derives audience from scope, a route intended for one AI service ends up presenting a token meant for a different service. No attacker input is needed; the flaw is triggered by normal operation, and exploitation requires the attacker to control or compromise a receiving service.
Weaknesses (CWE)
CWE-524 — Use of Cache Containing Sensitive Information: The code uses a cache that contains sensitive information, but the cache can be read by an actor outside of the intended control sphere.
- [Architecture and Design] Protect information stored in cache.
- [Architecture and Design] Do not store unnecessarily sensitive information in the cache.
Source: MITRE CWE corpus.
CVSS Vector
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:NReferences
Timeline
Related Vulnerabilities
CVE-2025-512010.0smolagents: sandbox escape enables unauthenticated RCE
Same attack type: Data LeakageCVE-2023-376510.0MLflow: path traversal allows arbitrary file read
Same attack type: Data LeakageCVE-2025-282810.0LangChain RequestsToolkit: SSRF exposes cloud metadata
Same attack type: Auth BypassCVE-2025-5376710.0Azure OpenAI: SSRF EoP, no auth required (CVSS 10)
Same attack type: Auth BypassCVE-2026-2185810.0n8n: Input Validation flaw enables exploitation
Same attack type: Auth Bypass