
Reproduttore proof-of-concept per il bypass del filtro header di Apache Camel camel-undertow (CVE-2026-78329), che dimostra l'iniezione di header websocket.* e fornisce dettagli sulle versioni interessate e la verifica della correzione.
websocket.*)Un reproducer proof-of-concept eseguibile per la vulnerabilità Apache Camel in cui UndertowEndpoint impostava la propria
headerFilterStrategy sulla base HttpHeaderFilterStrategy e inseriva quell'istanza nella UndertowHttpBinding
che crea, sovrascrivendo la UndertowHeaderFilterStrategy che DefaultUndertowHttpBinding installa. A meno che
una distribuzione non fornisse un binding personalizzato o una headerFilterStrategy esplicita, il filtraggio specifico di undertow non veniva mai
eseguito: l'oggetto strategy veniva costruito e immediatamente sostituito prima che potesse essere consultato.
| Runtime | Directory | Stack |
|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-undertow 4.18.2 |
Camel Quarkus: non esiste un'estensione
camel-quarkus-undertow(Quarkus usa il proprio stack HTTP Vert.x), quindi questo componente non può essere eseguito su Camel Quarkus — il reproducer è solo Spring Boot.
La conseguenza è che il prefisso legacy websocket. degli header dell'Exchange non viene filtrato al confine
di trasporto undertow in nessuna delle due direzioni. Un consumer HTTP undertow, pertanto, mappa gli header di trasporto in ingresso di quella forma
(websocket.connectionKey, websocket.connectionKey.list, websocket.sendToAll, …) sull'Exchange, dove un
producer WebSocket undertow li legge come direttive di dispatch e può essere indotto a consegnare a un peer diverso da
quello che la route intendeva — la stessa classe di dirottamento del dispatch dell'atmosphere-websocket
CVE-2026-71300.
Questo reproducer invia una richiesta HTTP con header di dispatch websocket.* e un header di controllo Camel*, e
mostra ciò che ha effettivamente raggiunto l'Exchange: gli header websocket.* attraversano il confine (non filtrati), mentre Camel*
viene rimosso — dimostrando che era attivo il filtro di base (non quello di undertow).
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
Output atteso su una build interessata:
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 ...
| Proprietà | Valore |
|---|---|
| Componente | camel-undertow (camel-undertow-starter) |
| CWE | CWE-20 (Convalida dell'input impropria) → CWE-74 (Iniezione) |
| Vettore di attacco | Header websocket.* in ingresso su un consumer HTTP undertow, letti come direttive di dispatch da un producer WebSocket undertow |
| Impatto | Impossessarsi della decisione di dispatch del producer WebSocket — consegnare a / negare la consegna a peer WebSocket arbitrari |
| Versioni vulnerabili | Dalla 4.11.0 prima della 4.14.9, dalla 4.15.0 prima della 4.18.4, dalla 4.19.0 prima della 4.22.0 |
| Versioni corrette | 4.14.9, 4.18.4, 4.22.0 |
| JIRA | CAMEL-24360 |
| Crediti | Andrea Cosentino (Apache Software Foundation); Barak Srour (Apiiro) |
Avviso di sicurezza: https://camel.apache.org/security/CVE-2026-78329.html
L'endpoint undertow non sovrascrive più la UndertowHeaderFilterStrategy del binding, che filtra il
prefisso websocket. (aggiunto in CAMEL-23588) in entrambe le direzioni — così gli header di dispatch vengono rimossi al
confine di trasporto e un mittente esterno non può più iniettarli.
Questo repository è pubblicato a scopo educativo e difensivo: per aiutare gli utenti di Apache Camel a comprendere la vulnerabilità, verificare se sono interessati e confermare che l'aggiornamento la risolve. Non utilizzare questo materiale contro sistemi che non possiedi o che non gestisci.