CVE-2026-83531
Apache Camel : le point de terminaison de contrôle Camel-Dynamic-Router compile les expressions de prédicat fournies par les messages de contrôle
- Publié
- 19 oct. 2026
- Mise à jour
- 20 oct. 2026
- Attribution de CNA
- apache
- Preuve observée
- 19 oct. 2026
CVSS primaire
nvd · CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:HFaible · 30 prochains jours
- Percentile
- 57,9 %
- Date du modèle
- 25 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é
Contrôle inapproprié de la génération de code (« Injection de code »), neutralisation inappropriée des éléments spéciaux utilisés dans une instruction de langage d'expression (« Injection de langage d'expression »), vulnérabilité dans Apache Camel. Ce problème affecte Apache Camel : de 4.4.0 avant 4.18.5, de 4.19.0 avant 4.22.1. Le point de terminaison dynamic-router-control, introduit dans 4.4.0, permet aux participants de routage de gérer les abonnements Dynamic Router en envoyant des messages de contrôle. Lorsqu'il traitait une demande d'abonnement ou de mise à jour, DynamicRouterControlProducer prenait le prédicat d'abonnement et le nom du langage utilisé pour le compiler depuis le message entrant, soit à partir des champs predicate et expressionLanguage d'un corps DynamicRouterControlMessage, soit à partir des en-têtes CamelDynamicRouterPredicate et CamelDynamicRouterExpressionLanguage. DynamicRouterControlService résolvait ensuite ce langage depuis le CamelContext et compilait l'expression en un Predicate, sans liste d'autorisation ni opt-in. Le prédicat compilé était ajouté à la base de règles du canal et évalué contre chaque échange routé via le point de terminaison dynamic-router correspondant, tant que l'abonnement existait. Une route qui transmet des messages depuis un transport externe vers le point de terminaison de contrôle, comme illustré dans la documentation du composant pour les participants de routage dans d'autres JVM ou applications, permettait donc à tout acteur capable d'envoyer un message sur ce transport de fournir une expression de son choix, laquelle était évaluée avec les privilèges du processus Camel. N'importe quel langage d'expression disponible sur le classpath pouvait être sélectionné, y compris le langage simple, qui est toujours présent et était celui par défaut sur le chemin des en-têtes, de sorte que retirer les langages d'expression optionnels du classpath n'empêchait pas le problème. L'exploitation nécessite la capacité d'envoyer un message sur un transport dont la route le transmet à un point de terminaison dynamic-router-control ; aucune autre authentification ni interaction utilisateur n'est nécessaire. Les versions antérieures à 4.4.0 ne sont pas affectées, car leur canal de contrôle ne prenait les expressions de prédicat que depuis l'URI du point de terminaison configuré par l'auteur de la route. 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.1. Si les utilisateurs sont sur la branche des versions 4.18.x, il leur est suggéré de mettre à niveau vers 4.18.5. La branche des versions 4.14.x et les versions antérieures ont atteint leur fin de vie avant que ce problème ne soit résolu et ne recevront pas de correctif, de sorte que les déploiements sur ces branches doivent migrer vers une version prise en charge. Après la mise à niveau, un message de contrôle qui transporte une expression de prédicat ou un langage d'expression est rejeté, sauf si la nouvelle option allowPredicateFromMessage est activée sur le point de terminaison dynamic-router-control ; ne l'activez que lorsque chaque expéditeur de messages de contrôle est de confiance. Pour les déploiements qui ne peuvent pas être mis à niveau immédiatement, ne transmettez pas de messages depuis des transports non fiables ou partagés vers un point de terminaison dynamic-router-control. Lorsque des messages de contrôle doivent traverser un tel transport, authentifiez l'expéditeur et assurez-vous que le prédicat et le langage d'expression de chaque abonnement sont définis par la route plutôt que pris depuis le message entrant, par exemple en supprimant les en-têtes CamelDynamicRouterPredicate et CamelDynamicRouterExpressionLanguage et en vidant les champs predicate et expressionLanguage d'un DynamicRouterControlMessage avant qu'il n'atteigne le point de terminaison. Retirer les langages d'expression optionnels du classpath ne constitue pas une mesure de contournement suffisante. En défense en profondeur, limitez qui peut envoyer vers les transports qui alimentent le point de terminaison de contrôle, et sur 4.23.0 et 4.22.1, définissez l'option allowedSchemes du point de terminaison dynamic-router pour limiter les points de terminaison que le destinationUri d'un abonnement peut désigner.
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.