
Riproduttori eseguibili Spring Boot e Quarkus per CVE-2026-84180, che dimostrano la fuga di eccezioni del consumer HTTP camel-knative e verificano la correzione muteException.
Reproduttore proof-of-concept eseguibile per la vulnerabilità di Apache Camel in cui il consumer HTTP Knative, quando un
exchange falliva sul lato consumer, scriveva l'eccezione risultante al chiamante remoto come corpo della risposta
HTTP — inclusi il nome della classe, il messaggio e l'intero stack trace. Un mittente esterno poteva quindi provocare un errore
e leggere dettagli interni sul deployment: nomi di classi e package, nomi di file system o host contenuti nei messaggi
delle eccezioni, la struttura della route e — dove un messaggio di eccezione incorpora una stringa di connessione o una configurazione — quei
dati direttamente. camel-knative era il consumer rimanente della famiglia HTTP che non era stato allineato al comportamento
muteException stabilito per gli altri consumer HTTP da CAMEL-23651.
| Runtime | Directory | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-knative 4.22.0 (affetto; corretto in 4.22.1), consumer sul server platform-http Vert.x di Camel |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-knative (Camel 4.15.0, affetto; controllo corretto CQ 3.40.0 / Camel 4.22.1), consumer su Quarkus HTTP |
Entrambi i moduli dimostrano il comportamento affetto e quello corretto.
Una route source (consumer) HTTP Knative riceve un CloudEvent e poi fallisce durante l'elaborazione — rappresentando
qualsiasi route che incontra un errore interno (una lookup di datasource fallita, un timeout a valle, un bug). La route lancia una
IllegalStateException il cui messaggio porta dettagli interni simulati: un finto hostname interno
(internal-db.prod.svc.cluster.local), una finta URL JDBC e un token marcatore INTERNAL-DETAIL-MARKER-7F3A2B. L'attaccante
è semplicemente un chiamante remoto: invia via POST un CloudEvent ben formato al consumer e legge la risposta che il consumer
restituisce.
at com.example... / del framework.muteException (predefinito
true), quindi viene restituito lo stato di errore ma nessun dettaglio dell'eccezione raggiunge il chiamante.# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: stack trace leaks; prints >>> PROVEN
docker compose down
# Patched control: rebuild with the fixed version, then run on the host
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-84180-knative-info-disclosure-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: empty body; prints >>> 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.15.0): stack trace leaks; >>> PROVEN
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: empty body; >>> Not exploited
| Proprietà | Valore |
|---|---|
| Componente | camel-knative (consumer HTTP Knative, KnativeHttpConsumer.computeResponseBody) |
| CWE | CWE-209 (Generazione di messaggi di errore contenenti informazioni sensibili) |
| Gravità | MEDIA |
| Vettore di attacco | Un chiamante remoto provoca un errore di instradamento sul lato consumer e legge i dettagli dell'eccezione dal corpo della risposta |
| Impatto | Divulgazione di informazioni: classe/messaggio/stack trace dell'eccezione (nomi host interni, nomi dei pacchetti, struttura della route, stringhe di connessione incorporate) raggiungono un mittente esterno |
| Versioni interessate | Dalla 4.0.0 precedente alla 4.18.5, dalla 4.19.0 precedente alla 4.22.1 |
| Versioni corrette | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24428 |
| Riconoscimento | Claude Security Scan Tool |
Avviso: https://camel.apache.org/security/CVE-2026-84180.html
KnativeHttpConsumer.computeResponseBody ora verifica una nuova
opzione muteException (consumer, predefinita true). Quando è silenziata, uno scambio fallito produce un corpo di
risposta vuoto (new byte[0]) anziché lo stack trace — il corpo vuoto è intenzionale affinché lo stato di errore
venga preservato (un corpo null farebbe inviare al chiamante 204 No Content). Impostare muteException=false per
ripristinare l'output precedente. Questo allinea camel-knative agli altri consumer della famiglia HTTP (CAMEL-23651).
Aggiungere un handler onException alla route del consumer che imposti esplicitamente il corpo della risposta (ad
esempio a un corpo vuoto o a un messaggio generico), in modo che il framework non riscriva mai l'eccezione al
chiamante.
Questo repository è pubblicato per scopi educativi e difensivi: per aiutare gli utenti di Apache Camel a comprendere la vulnerabilità, verificare se sono interessati e confermare che l'aggiornamento la risolve. Il nome host "interno", l'URL JDBC e il token marcatore nella route che fallisce sono fixture locali inerti e inventate — nessun segreto reale è coinvolto. Non utilizzare questo materiale contro sistemi di cui non si è proprietari o gestori.