CVE-2026-95663
Apache Camel : la politique de sécurité Camel-Keycloak accepte des jetons d'accès expirés car les résultats d'introspection de jetons mis en cache ne sont pas limités par l'expiration du jeton
- Publié
- 26 oct. 2026
- Mise à jour
- 26 oct. 2026
- Attribution de CNA
- apache
- Preuve observée
- 30 oct. 2026
CVSS primaire
nvd · CVSS 3.1
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:NFaible · 30 prochains jours
- Percentile
- 15,6 %
- Date du modèle
- 29 oct. 2026
EPSS est une estimation statistique, et non une certitude ou une mesure d'impact. Combinez-le avec CVSS, le statut KEV, l'exposition et votre environnement.
Résumé
Vulnérabilité d'expiration de session insuffisante dans le composant Apache Camel Keycloak. Ce problème affecte Apache Camel : de 4.16.0 avant 4.18.5, de 4.19.0 avant 4.22.2. Lorsque l'introspection de jeton est activée sur la KeycloakSecurityPolicy de camel-keycloak (useTokenIntrospection=true), le processeur de sécurité valide le jeton d'accès d'une requête en l'envoyant au point de terminaison d'introspection de jeton OAuth 2.0 de Keycloak, et accepte le jeton tant que la réponse le rapporte comme actif. Le point de terminaison d'introspection rapporte un jeton comme inactif une fois son temps exp (expiration) écoulé, donc sur ce chemin c'est l'indicateur active qui fait respecter l'expiration du jeton. Les résultats d'introspection sont mis en cache par défaut (introspectionCacheEnabled=true, introspectionCacheTtl=60 secondes), et les deux implémentations de cache fournies avec le composant, ConcurrentMapTokenCache et CaffeineTokenCache, expiraient une entrée après un temps fixe à compter de son insertion, sans limiter cette durée de vie par la revendication exp que la réponse mise en cache portait déjà. KeycloakSecurityProcessor, quant à lui, ne vérifiait que l'indicateur active du résultat, sur chaque chemin qui utilise l'introspection, et ne comparait jamais exp avec l'heure courante. Une réponse mise en cache peu avant l'expiration du jeton était donc servie aux requêtes ultérieures portant le même jeton pendant jusqu'à la durée de vie configurée après l'expiration du jeton, et ces requêtes étaient admises avec les rôles et permissions que le jeton expiré portait, bien que la RFC 7662, qui définit l'introspection de jeton, stipule qu'une réponse contenant exp ne doit pas être mise en cache au-delà de ce moment. Le jeton d'accès est fourni par l'appelant à chaque requête, généralement sous forme de jeton bearer dans l'en-tête Authorization, de sorte qu'un appelant détenant un jeton encore valide quelques instants plus tôt pouvait continuer à l'utiliser après son expiration, aussi longtemps que l'entrée en cache subsistait. La fenêtre est bornée par introspectionCacheTtl, qui vaut 60 secondes par défaut et 300 à 600 secondes là où la recommandation de la documentation pour les services internes a été suivie, et elle ne s'ouvre que pour un jeton que le même processus Camel a introspecté et mis en cache alors que le jeton était encore actif. Le problème n'accorde rien au-delà de ce que le jeton portait déjà : il ne permet ni falsification de jeton ni élévation de privilèges, et l'introspection de jeton n'est pas activée par défaut, ce qui explique que la gravité soit évaluée comme moyenne. Le chemin de vérification JWT local, utilisé lorsque l'introspection est désactivée, n'est pas affecté par ce problème. Il est recommandé aux utilisateurs de mettre à niveau vers la version 4.23.0, qui corrige le problème. Si les utilisateurs sont sur la branche des versions 4.22.x, il leur est suggéré de mettre à niveau vers 4.22.2. Si les utilisateurs sont sur la branche des versions 4.18.x, il leur est suggéré de mettre à niveau vers 4.18.5. Les lignes de versions 4.16.x, 4.17.x et 4.19.x à 4.21.x ont atteint leur fin de vie avant la résolution de ce problème et ne recevront pas de correctif, de sorte que les déploiements sur celles-ci doivent migrer vers une version prise en charge. Pour les déploiements qui ne peuvent pas être mis à niveau immédiatement, définissez introspectionCacheEnabled=false sur la KeycloakSecurityPolicy, afin que chaque requête soit vérifiée auprès du point de terminaison d'introspection, qui rapporte un jeton expiré comme inactif, au prix d'un appel d'introspection par requête. Réduire introspectionCacheTtl ne fait que restreindre la fenêtre et ne la ferme pas.
Utilisation responsable
Utilisez les informations de vulnérabilité uniquement sur les systèmes que vous possédez ou que vous êtes autorisé à tester. Kitploit renvoie aux métadonnées de la recherche publique et ne stocke pas de code d'exploitation ni de charges utiles malveillantes.