
Proof-of-Concept-Reproduktionscode für Apache Camel camel-atmosphere-websocket Dispatch-Header-Injection (CVE-2026-71300), der demonstriert, wie ein injizierter Header WebSocket-Nachrichten an einen vom Angreifer gewählten Empfänger umleiten kann.
Lauffähiger Proof-of-Concept-Reproducer für die Apache-Camel-Schwachstelle, bei der der camel-atmosphere-websocket-Producer seine WebSocket-Empfänger aus websocket.*-Exchange-Headern auswählt, deren Namen außerhalb des Camel-Namensraums liegen — sodass eine HTTP-HeaderFilterStrategy (die nur Camel* / camel* entfernt) sie durchlässt und ein externer Absender die Dispatch-Entscheidung des Producers übernehmen kann.
| Laufzeit | Verzeichnis | Stack |
|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-atmosphere-websocket 4.18.2 |
Camel Quarkus: Es gibt keine
camel-quarkus-atmosphere-websocket-Extension, daher kann diese Komponente nicht auf Camel Quarkus ausgeführt werden — der Reproducer ist nur für Spring Boot.
Eine Route verbindet einen HTTP-Consumer mit einem atmosphere-websocket-Producer und liefert jede HTTP-Nachricht an einen einzigen festgelegten WebSocket-Empfänger (das „Opfer"), indem sie den websocket.connectionKey-Header selbst setzt. Aber WebsocketProducer.process prüft den Listen-Header websocket.connectionKey.list vor dem Einzel-Key-Header, und dieser gepunktete Name liegt nicht im Camel-Namensraum, sodass der HTTP-Header-Filter ihn nicht entfernt. Ein injizierter websocket.connectionKey.list-Header gelangt daher aus der Anfrage in den Exchange und überschreibt den festgelegten Empfänger — die für das Opfer bestimmte Nachricht wird stattdessen an eine vom Angreifer gewählte Verbindung zugestellt.
POST /notify ──► setHeader(websocket.connectionKey = victim) ──► atmosphere-websocket producer ──► victim peer
│ ▲
└─ injected header websocket.connectionKey.list: <attacker key> ───────┘ (tested first → wins)
Zum Test-Harness. Die atmosphere-WebSocket-Laufzeitumgebung benötigt das WebSocket-Upgrade des Servlet-Containers und die eigene Initialisierung des Frameworks, die nicht aus einer reinen Standalone-Spring-Boot-App heraus gesteuert werden können. Dieser Reproducer übt daher die echte
WebsocketProducer-Dispatch-Logik über einen echten HTTP-Eingang aus — nur die beiden verbundenen Peers sind Platzhalter, die direkt in denWebSocketStoredes Endpunkts registriert werden (wie das atmosphere- Framework echte Browserverbindungen registrieren würde). Der Header-Filter-Bypass und die Dispatch- Priorität des Producers — die eigentliche Schwachstelle — werden real ausgeübt.
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
Erwartete Ausgabe bei einem betroffenen Build:
1) Benign POST /notify (no injected header):
victim received: [hello for the victim]
attacker received: []
2) Injected POST /notify with header 'websocket.connectionKey.list: attacker-connection-key':
victim received: []
attacker received: [private data meant for the victim, ...]
>>> PROVEN: ... delivering a message meant for the victim to an attacker-chosen WebSocket connection instead: true
| Eigenschaft | Wert |
|---|---|
| Komponente | camel-atmosphere-websocket (camel-atmosphere-websocket-starter) |
| CWE | CWE-20 (Improper Input Validation) → CWE-74 (Injection) |
| Angriffsvektor | Ein injizierter websocket.connectionKey.list- (oder websocket.connectionKey- / websocket.sendToAll-)Header bei einer Anfrage, die in einen atmosphere-websocket-Producer gebrückt wird |
| Auswirkung | Übernahme der Dispatch-Entscheidung des Producers — Zustellung an / Vorenthaltung gegenüber beliebigen WebSocket-Peers |
| Betroffene Versionen | Von 4.0.0 bis vor 4.14.9, von 4.15.0 bis vor 4.18.4, von 4.19.0 bis vor 4.22.0 |
| Behobene Versionen | 4.14.9, 4.18.4, 4.22.0 |
| JIRA | CAMEL-24359 |
| Entdecker | Barak Srour (Apiiro) |
Sicherheitshinweis: https://camel.apache.org/security/CVE-2026-71300.html
Die Dispatch-Header-Konstanten wurden in den Camel-Namensraum umbenannt — CamelAtmosphereWebsocketConnectionKey,
CamelAtmosphereWebsocketConnectionKeyList, CamelAtmosphereWebsocketSendToAll — sodass die HTTP-HeaderFilterStrategy
sie an der Transportgrenze entfernt und ein externer Absender sie nicht mehr injizieren kann. Der zugehörige
camel-undertow-WebSocket-Pfad wird durch
CVE-2026-78329 abgedeckt.
Dieses Repository wird zu Bildungs- und Verteidigungszwecken veröffentlicht: um Apache-Camel-Benutzern zu helfen, die Schwachstelle zu verstehen, zu überprüfen, ob sie betroffen sind, und zu bestätigen, dass ein Upgrade das Problem behebt. Verwenden Sie dieses Material nicht gegen Systeme, die Sie nicht besitzen oder betreiben.