
Preuve de concept Spring Boot exécutable reproduisant CVE-2026-85317, où le cache de jetons OAuth2 de camel-http ignore le scope, la ressource et le point de terminaison de jeton, ainsi qu'un contrôle corrigé.
Reproducteur de preuve de concept exécutable pour la vulnérabilité Apache Camel où le cache de jetons du client OAuth2 de camel-http
— une map static globale à la JVM — indexait ses entrées uniquement sur (uri, clientId, clientSecret), en omettant les champs qui
définissent réellement le jeton : le scope demandé, l'indicateur de ressource et le point de terminaison de jeton. Deux
points de terminaison ne différant que par ces champs partageaient donc une entrée de cache, si bien qu'un point de terminaison pouvait se voir servir un jeton émis
pour un scope différent, une ressource différente, ou par un serveur d'autorisation différent — une requête portant
une autorité plus large que celle pour laquelle le point de terminaison était configuré, ou un jeton présenté à une partie pour laquelle il n'avait pas été émis
(CWE-524).
Spring Boot uniquement. Ce reproducteur ne contient qu'un seul module Camel Spring Boot. La faille se trouve dans le client OAuth2 de
camel-http, qui dispose également d'une extensioncamel-quarkus-http; mais dans le packaging JVM de cette extension, les options clientoauth2*au niveau du point de terminaison ne sont pas appliquées comme elles le sont sous Spring Boot (l'intercepteur de requêtes OAuth2 qui possède le cache de jetons n'est jamais câblé, si bien que le point de terminaison de jeton n'est jamais appelé) — la même limitation documentée pour CVE-2026-85251. Le module Spring Boot démontre le comportement affecté et le comportement corrigé.
| Runtime | Répertoire | Pile |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-http 4.22.0 (affecté ; corrigé en 4.22.1) |
Le pilote reproduit le propre test de non-régression du correctif (HttpOAuth2TokenCachingTest). Deux serveurs HTTP jetables s'exécutent au sein
du processus : un point de terminaison de jeton qui émet un jeton bearer, et une cible qui l'exige. Le vérificateur
(/exploit/attack) :
oauth2CacheTokens=true&oauth2Scope=read — un jeton est émis et mis en cache ;oauth2Scope=read+write.read —
elle réussit bien que le point de terminaison de jeton soit arrêté (aucun jeton frais ne pourrait être émis).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
| Propriété | Valeur |
|---|---|
| Composant | camel-http (OAuth2ClientConfigurer, cache de jetons) |
| CWE | CWE-524 (Utilisation d'un cache contenant des informations sensibles) |
| Gravité | MOYENNE |
| Vecteur d'attaque | Un déploiement configure plusieurs points de terminaison OAuth2 ne différant que par le scope, l'indicateur de ressource ou le point de terminaison de jeton ; ils partagent le cache de jetons global au JVM |
| Impact | Un point de terminaison se voit servir un jeton émis pour un autre scope/ressource/serveur d'autorisation — une autorité plus large que celle configurée, ou un jeton présenté à la mauvaise partie |
| Versions affectées | À partir de 4.0.0 avant 4.18.5, à partir de 4.19.0 avant 4.22.1 |
| Versions corrigées | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24456 |
| Crédit | Claude Security Scan Tool |
Avis : https://camel.apache.org/security/CVE-2026-85317.html
OAuth2ClientConfigurer étend l'enregistrement de clé de cache
OAuth2URIAndCredentials pour inclure le point de terminaison de jeton, le scope et l'indicateur de ressource, afin que les entrées ne soient plus partagées
entre des points de terminaison qui diffèrent sur l'un de ces champs.
Exécutez les points de terminaison qui diffèrent par le scope, l'indicateur de ressource ou le point de terminaison de jeton dans des JVM séparées afin qu'ils ne partagent pas le cache statique.
Ce dépôt est publié à des fins éducatives et défensives : pour aider les utilisateurs d'Apache Camel à comprendre la
vulnérabilité, vérifier s'ils sont affectés et confirmer que la mise à jour la résout. Le jeton
(xxx.yyy.zzz), l'identifiant client et le secret sont des valeurs de remplacement inoffensives et les deux serveurs HTTP s'exécutent en processus. N'utilisez pas ce
matériel contre des systèmes que vous ne possédez pas ou n'exploitez pas.