
Lauffähiger Spring-Boot-Proof-of-Concept zur Reproduktion von CVE-2026-85317, bei dem der OAuth2-Token-Cache von camel-http Scope, Resource und Token-Endpoint ignoriert, sowie eine gepatchte Kontrollvariante.
Lauffähiger Proof-of-Concept-Reproduzierer für die Apache-Camel-Schwachstelle, bei der der OAuth2-Client-Token-Cache von camel-http
— eine JVM-globale static-Map — seine Einträge nur nach (uri, clientId, clientSecret) verschlüsselte und dabei die Felder ausließ, die
das Token tatsächlich prägen: den angeforderten Scope, den Resource Indicator und den Token-Endpoint. Zwei
Endpoints, die sich nur in diesen Feldern unterschieden, teilten sich daher einen Cache-Eintrag, sodass einem Endpoint ein Token geliefert werden konnte, das
für einen anderen Scope, eine andere Ressource oder von einem anderen Authorization Server ausgestellt wurde — eine Anfrage mit
weiterreichender Berechtigung als der Endpoint konfiguriert war, oder ein Token, das einer Partei vorgelegt wurde, für die es nicht ausgestellt war
(CWE-524).
Nur Spring Boot. Dieser Reproduzierer enthält ein einziges Camel-Spring-Boot-Modul. Der Fehler liegt im OAuth2-Client von
camel-http, der auch einecamel-quarkus-http-Erweiterung besitzt; in der JVM-Paketierung dieser Erweiterung werden dieoauth2*-Client-Optionen auf Endpoint-Ebene jedoch nicht so angewendet wie unter Spring Boot (der OAuth2-Request-Interceptor, der den Token-Cache besitzt, wird nie verdrahtet, sodass der Token-Endpoint nie aufgerufen wird) — dieselbe Einschränkung, die für CVE-2026-85251 dokumentiert ist. Das Spring-Boot-Modul demonstriert das betroffene und das behobene Verhalten.
| Laufzeitumgebung | Verzeichnis | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-http 4.22.0 (betroffen; behoben in 4.22.1) |
Der Treiber bildet den eigenen Regressionstest des Fixes nach (HttpOAuth2TokenCachingTest). Zwei Wegwerf-HTTP-Server laufen innerhalb
des Prozesses: ein Token-Endpoint, der ein Bearer-Token ausstellt, und ein Ziel, das dieses erfordert. Der Verifier
(/exploit/attack):
oauth2CacheTokens=true&oauth2Scope=read — ein Token wird ausgestellt und zwischengespeichert;oauth2Scope=read+write.read-Token wiederverwendet —
sie ist erfolgreich, obwohl der Token-Endpoint nicht mehr läuft (ein frisches Token könnte unmöglich ausgestellt werden).HttpHostConnectException).cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: 2nd request 200 (reused read token); >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85317-http-oauth2-token-cache-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: 2nd request HttpHostConnectException; >>> Not exploited
| Eigenschaft | Wert |
|---|---|
| Komponente | camel-http (OAuth2ClientConfigurer, Token-Cache) |
| CWE | CWE-524 (Use of Cache Containing Sensitive Information) |
| Schweregrad | MITTEL |
| Angriffsvektor | Eine Bereitstellung konfiguriert mehr als einen OAuth2-Endpunkt, die sich nur in Scope, Resource Indicator oder Token-Endpunkt unterscheiden; sie teilen sich den JVM-globalen Token-Cache |
| Auswirkung | Einem Endpunkt wird ein Token bereitgestellt, das für einen anderen Scope/eine andere Ressource/einen anderen Autorisierungsserver ausgestellt wurde — eine breitere Berechtigung als konfiguriert oder ein Token, das der falschen Partei vorgelegt wird |
| Betroffene Versionen | Ab 4.0.0 vor 4.18.5, ab 4.19.0 vor 4.22.1 |
| Behobene Versionen | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24456 |
| Danksagung | Claude Security Scan Tool |
Advisory: https://camel.apache.org/security/CVE-2026-85317.html
OAuth2ClientConfigurer erweitert den Cache-Schlüssel-Datensatz
OAuth2URIAndCredentials um den Token-Endpunkt, den Scope und den Resource Indicator, sodass Einträge nicht mehr
zwischen Endpunkten geteilt werden, die sich in einem dieser Felder unterscheiden.
Betreiben Sie Endpunkte, die sich in Scope, Resource Indicator oder Token-Endpunkt unterscheiden, in separaten JVMs, damit sie den statischen Cache nicht teilen.
Dieses Repository wird zu Bildungs- und Verteidigungszwecken veröffentlicht: um Apache Camel-Nutzern zu helfen, die
Schwachstelle zu verstehen, zu prüfen, ob sie betroffen sind, und zu bestätigen, dass ein Upgrade sie behebt. Das Token
(xxx.yyy.zzz), die Client-ID und das Secret sind harmlose Platzhalter und beide HTTP-Server laufen prozessintern. Verwenden Sie dieses
Material nicht gegen Systeme, die Ihnen nicht gehören oder die Sie nicht betreiben.