
Lauffähige Spring Boot- und Quarkus-Reproducer für CVE-2026-84180, die das Durchsickern von Ausnahmen im camel-knative HTTP-Consumer demonstrieren und den muteException-Fix verifizieren.
Lauffähiger Proof-of-Concept-Reproducer für die Apache-Camel-Schwachstelle, bei der der Knative-HTTP-Consumer, wenn ein
Exchange auf der Consumer-Seite fehlschlug, die resultierende Exception als HTTP-Response-Body an den entfernten Aufrufer zurückschrieb
— einschließlich Klassenname, Nachricht und vollständigem Stacktrace. Ein externer Absender konnte daher einen Fehler provozieren
und interne Details über die Deployment-Umgebung auslesen: Klassen- und Paketnamen, im Exception-Text enthaltene Dateisystem- oder Hostnamen,
die Struktur der Route und — sofern eine Exception-Nachricht einen Connection-String oder eine Konfiguration einbettet — diese
Daten direkt. camel-knative war der verbleibende Consumer aus der HTTP-Familie, der noch nicht an das muteException-
Verhalten angeglichen worden war, das durch CAMEL-23651 für die anderen HTTP-Consumer etabliert wurde.
| Laufzeitumgebung | Verzeichnis | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-knative 4.22.0 (betroffen; behoben in 4.22.1), Consumer auf dem platform-http-Server von Camel auf Basis von Vert.x |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-knative (Camel 4.15.0, betroffen; behobene Kontrolle CQ 3.40.0 / Camel 4.22.1), Consumer auf Quarkus HTTP |
Beide Module demonstrieren das betroffene und das behobene Verhalten.
Eine Knative-HTTP-Source-Route (Consumer) empfängt ein CloudEvent und schlägt dann bei dessen Verarbeitung fehl — stellvertretend für
jede Route, die auf einen internen Fehler stößt (ein fehlgeschlagener Datasource-Lookup, ein Downstream-Timeout, ein Bug). Die Route wirft eine
IllegalStateException, deren Nachricht simulierte interne Details trägt: einen fiktiven internen Hostnamen
(internal-db.prod.svc.cluster.local), eine fiktive JDBC-URL und ein Markierungs-Token INTERNAL-DETAIL-MARKER-7F3A2B. Der Angreifer
ist schlicht ein entfernter Aufrufer: Er sendet per POST ein wohlgeformtes CloudEvent an den Consumer und liest die Response, die der Consumer
zurücksendet.
at com.example... / Framework-Stackframes.muteException (Standard
true), sodass der Fehlerstatus zurückgegeben wird, aber keine Exception-Details den Aufrufer erreichen.# 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
| Eigenschaft | Wert |
|---|---|
| Komponente | camel-knative (Knative-HTTP-Consumer, KnativeHttpConsumer.computeResponseBody) |
| CWE | CWE-209 (Erzeugung einer Fehlermeldung, die sensible Informationen enthält) |
| Schweregrad | MITTEL |
| Angriffsvektor | Ein entfernter Aufrufer löst einen Routenfehler auf der Consumer-Seite aus und liest die Ausnahmedetails aus dem Antwortkörper |
| Auswirkung | Offenlegung von Informationen: Ausnahmeklasse/-meldung/Stacktrace (interne Hostnamen, Paketnamen, Routenstruktur, eingebettete Verbindungszeichenfolgen) gelangen an einen externen Absender |
| Betroffene Versionen | Ab 4.0.0 vor 4.18.5, ab 4.19.0 vor 4.22.1 |
| Behobene Versionen | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24428 |
| Danksagung | Claude Security Scan Tool |
Advisory: https://camel.apache.org/security/CVE-2026-84180.html
KnativeHttpConsumer.computeResponseBody prüft nun eine neue
Option muteException (Consumer, Standardwert true). Wenn stummgeschaltet, liefert ein fehlgeschlagener Exchange einen leeren Antwortkörper
(new byte[0]) anstelle des Stacktraces — der leere Körper ist beabsichtigt, damit der Fehlerstatus erhalten bleibt (ein
null-Körper würde den Aufrufer dazu veranlassen, 204 No Content zu senden). Setzen Sie muteException=false, um die vorherige Ausgabe wiederherzustellen.
Dies bringt camel-knative mit den anderen Consumern der HTTP-Familie in Einklang (CAMEL-23651).
Fügen Sie der Consumer-Route einen onException-Handler hinzu, der den Antwortkörper explizit setzt (zum Beispiel auf einen leeren
Körper oder eine generische Meldung), damit das Framework die Ausnahme niemals an den Aufrufer zurückschreibt.
Dieses Repository wird zu Bildungs- und Verteidigungszwecken veröffentlicht: um Apache-Camel-Benutzern zu helfen, die Schwachstelle zu verstehen, zu prüfen, ob sie betroffen sind, und zu bestätigen, dass ein Upgrade sie behebt. Der „interne" Hostname, die JDBC-URL und das Marker-Token in der fehlschlagenden Route sind inerte, erfundene lokale Fixtures — es ist kein echtes Geheimnis beteiligt. Verwenden Sie dieses Material nicht gegen Systeme, die Ihnen nicht gehören oder die Sie nicht betreiben.