
Reproducteur de preuve de concept exécutable pour CVE-2026-85316, démontrant un mode proxy non intentionnel dans la correspondance de préfixe de chemin d'Apache Camel camel-platform-http, avec des contrôles de version corrigée.
Reproducteur de preuve de concept exécutable pour la vulnérabilité Apache Camel où camel-platform-http décidait si un
endpoint s'exécutait en mode proxy en testant si son chemin configuré commençait par la chaîne proxy, plutôt que
de la faire correspondre exactement. Le mode proxy transforme un endpoint en fourre-tout (getPath() devient /) dont la cible de transfert
est tirée de l'en-tête Host de la requête elle-même. Ainsi, tout endpoint dont le chemin commence simplement par ces caractères —
proxyStats, proxy-health, proxying, … — devenait silencieusement un proxy de transfert que l'auteur de la route n'avait jamais demandé : une
primitive de falsification de requête et une exposition de tout ce que le chemin de transfert peut atteindre (CWE-1220).
| Runtime | Répertoire | Pile |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-platform-http 4.22.0 (affecté ; corrigé en 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-platform-http (Camel 4.22.0, affecté ; contrôle corrigé CQ 3.40.0 / Camel 4.22.1) |
Les deux modules démontrent le comportement affecté et corrigé face au véritable PlatformHttpEndpoint.
Le pilote reproduit le propre test de régression du correctif (PlatformHttpEndpointProxyPathTest). Il crée un
endpoint platform-http:proxyStats — un endpoint de statistiques dont le nom se trouve commencer par proxy — et demande
au composant s'il s'agit d'un proxy :
isHttpProxy() renvoie true et getPath() s'effondre en fourre-tout / — l'endpoint a été
transformé en proxy de transfert.isHttpProxy() renvoie false et getPath() vaut proxyStats — seul le chemin exact proxy sélectionne
le mode proxy.L'endpoint documenté platform-http:proxy reste un proxy dans les deux versions (montré par contraste), ce qui confirme que le
correctif ne supprime que la classification involontaire.
# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: proxyStats isHttpProxy=true, path "/"; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85316-platform-http-proxy-prefix-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: isHttpProxy=false, path "proxyStats"; >>> Not exploited
# Camel Quarkus
cd camel-quarkus
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected (Camel 4.22.0): proxyStats isHttpProxy=true, path "/"
docker compose down
# Patched control: CQ 3.40.0 ships Camel 4.22.1
mvn clean package -Dcamel-quarkus.version=3.40.0 -Dquarkus.platform.version=3.40.0
java -jar target/quarkus-app/quarkus-run.jar &
curl -s http://localhost:8080/exploit/attack # fixed: isHttpProxy=false, path "proxyStats"
| Propriété | Valeur |
|---|---|
| Composant | camel-platform-http (PlatformHttpEndpoint.isHttpProxy) |
| CWE | CWE-1220 (Granularité insuffisante du contrôle d'accès) |
| Sévérité | MOYENNE |
| Vecteur d'attaque | Une route déclare un endpoint platform-http dont le chemin commence par proxy (mais n'est pas censé faire office de proxy) ; il devient un fourre-tout redirigeant vers l'en-tête Host de l'appelant |
| Impact | Proxy/contrefaçon de requête non intentionnels et exposition de tout ce que le chemin de redirection peut atteindre |
| Versions affectées | Depuis 4.0.0 avant 4.18.5, depuis 4.19.0 avant 4.22.1 |
| Versions corrigées | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24455 |
| Crédit | Claude Security Scan Tool |
Avis : https://camel.apache.org/security/CVE-2026-85316.html
Le module Quarkus affecté est construit sur CQ 3.39.0 (Camel 4.22.0). Le correctif de contrôle est CQ 3.40.0 (Camel 4.22.1). La démonstration se contente de créer et d'inspecter un endpoint (
isHttpProxy()/getPath()), donc aucun serveur HTTP n'est démarré ; le module Spring Boot utilise le composantcamel-platform-httpsimple plutôt que le starter.
PlatformHttpEndpoint.isHttpProxy() compare désormais le chemin par égalité
avec proxy (PROXY_PATH.equals(this.path)) au lieu d'utiliser startsWith, de sorte que seul l'endpoint documenté platform-http:proxy
s'exécute en mode proxy.
Renommez tout chemin d'endpoint qui commence par proxy mais n'est pas censé être un proxy.
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. La démonstration se contente d'inspecter la classification des endpoints en cours de processus et ne transmet aucun trafic. N'utilisez pas ce contenu contre des systèmes dont vous n'êtes pas propriétaire ou que vous n'exploitez pas.