
Reproducteur de preuve de concept pour le contournement du filtre d'en-têtes camel-undertow d'Apache Camel (CVE-2026-78329), démontrant l'injection d'en-têtes websocket.* et fournissant les détails des versions concernées et la vérification du correctif.
websocket.*)Reproducteur fonctionnel (preuve de concept) de la vulnérabilité Apache Camel où UndertowEndpoint définissait par défaut sa
headerFilterStrategy sur la HttpHeaderFilterStrategy de base et poussait cette instance dans la UndertowHttpBinding
qu'il crée, écrasant la UndertowHeaderFilterStrategy que DefaultUndertowHttpBinding installe. À moins qu'un
déploiement ne fournisse une liaison personnalisée ou une headerFilterStrategy explicite, le filtrage spécifique à undertow ne
s'exécutait jamais — l'objet de stratégie était construit puis immédiatement remplacé avant de pouvoir être consulté.
| Exécution | Répertoire | Pile |
|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-undertow 4.18.2 |
Camel Quarkus : il n'existe pas d'extension
camel-quarkus-undertow(Quarkus utilise sa propre pile HTTP Vert.x), donc ce composant ne peut pas être exécuté sur Camel Quarkus — le reproducteur est Spring Boot uniquement.
La conséquence est que le préfixe hérité websocket. des en-têtes Exchange n'est pas filtré à la frontière de transport undertow
dans aucune des deux directions. Un consommateur HTTP undertow mappe donc les en-têtes filaires entrants de cette forme
(websocket.connectionKey, websocket.connectionKey.list, websocket.sendToAll, …) sur l'Exchange, où un
producteur WebSocket undertow les lit comme des directives d'acheminement et peut être amené à livrer à un pair autre que
celui que la route visait — la même classe de détournement d'acheminement que l'atmosphere-websocket
CVE-2026-71300.
Ce reproducteur envoie une requête HTTP contenant des en-têtes d'acheminement websocket.* ainsi qu'un en-tête de contrôle Camel*, et
montre ce qui a réellement atteint l'Exchange : les en-têtes websocket.* traversent la frontière (non filtrés), tandis que Camel*
est supprimé — ce qui prouve que le filtre de base (et non celui d'undertow) était en vigueur.
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
Sortie attendue sur une version affectée :
What actually reached the Exchange, as echoed by the undertow route:
websocket.connectionKey.list on Exchange = [attacker-connection-key]
websocket.sendToAll on Exchange = [true]
CamelFoo on Exchange (control) = []
>>> PROVEN: the undertow endpoint applied the base HttpHeaderFilterStrategy (Camel* filtered) instead of the
>>> UndertowHeaderFilterStrategy, so the legacy websocket.* dispatch headers passed onto the Exchange ...
| Propriété | Valeur |
|---|---|
| Composant | camel-undertow (camel-undertow-starter) |
| CWE | CWE-20 (Validation inappropriée des entrées) → CWE-74 (Injection) |
| Vecteur d'attaque | En-têtes websocket.* entrants sur un consommateur HTTP undertow, lus comme des directives d'acheminement par un producteur WebSocket undertow |
| Impact | Prendre le contrôle de la décision d'acheminement du producteur WebSocket — livrer à / refuser la livraison à des pairs WebSocket arbitraires |
| Versions affectées | De 4.11.0 avant 4.14.9, de 4.15.0 avant 4.18.4, de 4.19.0 avant 4.22.0 |
| Versions corrigées | 4.14.9, 4.18.4, 4.22.0 |
| JIRA | CAMEL-24360 |
| Crédit | Andrea Cosentino (Apache Software Foundation); Barak Srour (Apiiro) |
Avis de sécurité : https://camel.apache.org/security/CVE-2026-78329.html
Le point de terminaison undertow n'écrase plus la UndertowHeaderFilterStrategy de la liaison, qui filtre le
préfixe websocket. (ajouté dans CAMEL-23588) dans les deux directions — les en-têtes d'acheminement sont donc supprimés à la
frontière de transport et un émetteur externe ne peut plus les injecter.
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 à niveau la résout. N'utilisez pas ce matériel contre des systèmes que vous ne possédez pas ou n'exploitez pas.