
Lauffähiger Spring-Boot-Reproduzierer für CVE-2026-85246, der die Offenlegung von Ausnahmen im camel-mina-Consumer über den Socket demonstriert und den muteException-Fix verifiziert.
Lauffähiger Proof-of-Concept-Reproducer für die Apache-Camel-Schwachstelle, bei der der Mina-Consumer exchange.getException() direkt über den Socket an den entfernten Peer zurückschrieb, wenn die Verarbeitung eines Exchange fehlschlug.
Über einen Textline-Codec erhält der Peer den Klassennamen und die Nachricht der Exception; über den Object-Codec erhält er die serialisierte Exception, einschließlich der Cause-Kette. Ein entfernter Peer, der einen Fehler provozieren konnte, konnte interne Details über die Deployment-Umgebung auslesen — Klassen- und Paketnamen sowie alles, was eine Nachricht oder eine verschachtelte Cause mit sich führt, was in der Praxis Pfade, Hostnamen und Verbindungsdetails umfasst. Der Consumer hatte keine Möglichkeit, dies zu unterdrücken, anders als die HTTP-Familie von Consumern, die durch CAMEL-23651 angeglichen wurden.
Nur Spring Boot. Es gibt keine
camel-quarkus-mina-Erweiterung, daher liefert dieser Reproducer ein einzelnes Camel-Spring-Boot-Modul aus. (Der Fehler liegt imMinaConsumerder Komponente, der laufzeitunabhängig ist.)
| Laufzeit | Verzeichnis | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-mina 4.22.0 (betroffen; behoben in 4.22.1) |
Ein Mina-TCP-Consumer (sync=true, textline=true) verarbeitet jede eingehende Zeile und schlägt fehl — als Stellvertreter für jede Route, die auf einen internen Fehler stößt. Die Route wirft eine IllegalStateException, deren Nachricht simulierte interne Details enthält (einen fiktiven Konfigurationspfad /etc/camel/secret.properties, einen fiktiven Host und ein Marker-Token). Der Exploit-Treiber ist ein einfacher entfernter TCP-Peer: Er öffnet einen Socket, sendet eine Zeile und liest die Antwort, die der Consumer zurückschreibt.
java.lang.IllegalStateException: INTERNAL-DETAIL-MARKER-7F3A2B config=/etc/camel/secret.properties db=internal-db.prod.svc.java.lang.Exception: Exchange processing failed — ohne Klasse, Nachricht oder Stacktrace der Exception der Route — während weiterhin geantwortet wird, sodass ein synchroner Peer nicht in einen Timeout läuft.cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: exception leaks over the socket; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85246-mina-info-disclosure-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: generic reply; >>> Not exploited
| Eigenschaft | Wert |
|---|---|
| Komponente | camel-mina (MinaConsumer.messageReceived) |
| CWE | CWE-209 (Erzeugung einer Fehlermeldung mit sensiblen Informationen) |
| Schweregrad | MITTEL |
| Angriffsvektor | Ein entfernter TCP/UDP-Peer löst einen Routing-Fehler aus und liest die Ausnahme aus der Antwort, die über den Socket zurückgeschrieben wird |
| Auswirkung | Offenlegung von Informationen: Ausnahmeklasse/-meldung über den Textline-Codec oder die serialisierte Ausnahme + Ursachenkette über den Object-Codec (interne Hostnamen, Pfade, Verbindungsdetails) |
| 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-24476 |
| Danksagung | Claude Security Scan Tool |
Advisory: https://camel.apache.org/security/CVE-2026-85246.html
MinaConsumer fügt eine Consumer-Option muteException hinzu (Standard true).
Wenn diese aktiviert ist, schreibt ein fehlgeschlagener Exchange nicht mehr exchange.getException() zurück; stattdessen wird ein
Platzhalter Exception("Exchange processing failed") mit leerem Stack-Trace geschrieben — weiterhin eine Exception (sodass ein Peer mit Object-Codec
weiterhin eine erhält), aber ohne Klasse, Meldung oder Frames der Ausnahme der Route. Eine Antwort wird weiterhin geschrieben, damit ein
synchroner Peer nicht in einen Timeout läuft. Setzen Sie muteException=false, um das vorherige Verhalten wiederherzustellen.
Fügen Sie einen onException-Handler hinzu, der den Antwort-Body explizit setzt, sodass das Framework die Ausnahme nie an
den Peer zurückschreibt.
Dieses Repository wird zu Bildungs- und Verteidigungszwecken veröffentlicht: um Apache-Camel-Nutzern zu helfen, die Schwachstelle zu verstehen, zu prüfen, ob sie betroffen sind, und zu bestätigen, dass ein Upgrade sie behebt. Der Konfigurationspfad, der Host und das Marker-Token in der fehlschlagenden Route sind inerte, fiktive lokale Fixtures. Verwenden Sie dieses Material nicht gegen Systeme, die Ihnen nicht gehören oder die Sie nicht betreiben.