
Lauffähiger Spring Boot- und Quarkus-Reproducer für CVE-2026-85247, der den TLS-Trust-all-Fallback von camel-knative demonstriert und die Fehlerbehebung verifiziert.
Lauffähiger Proof-of-Concept-Reproduzierer für die Apache-Camel-Schwachstelle, bei der das Aktivieren von SSL im Knative-HTTP-Client ohne Konfiguration eines Truststores dazu führte, dass jedem vorgelegten Zertifikat vertraut wurde, anstatt den Standard-Vertrauensankern der JVM. Ein Deployment, das TLS aktivierte, ohne zugleich einen Truststore zu konfigurieren, erhielt daher eine verschlüsselte Verbindung ohne Peer-Authentifizierung, die ein Angreifer, der sich im Netzwerkpfad befindet, beenden und mitlesen kann. Der gefährliche Zustand wird durch Unterlassen erreicht, nicht durch ein ausdrückliches Opt-in — das Aktivieren von TLS sollte nicht das sein, was die Zertifikatsvalidierung deaktiviert.
| 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) |
| 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) |
Beide Module demonstrieren sowohl das betroffene als auch das behobene Verhalten.
Das Deployment setzt camel.knative.client.ssl.enabled=true und konfiguriert keinen Truststore. Der Treiber erstellt die echten KnativeSslClientOptions aus genau diesen Einstellungen — dieselben Optionen, die der Knative-HTTP-Producer verwendet — und stellt mit ihnen eine HTTPS-Anfrage an einen mitgelieferten Server, der ein selbstsigniertes Zertifikat präsentiert (CN=localhost, in keinem Truststore), als Stellvertreter für einen TLS-Man-in-the-Middle.
KnativeSslClientOptions.getTrustOptions() ist TrustAllOptions, sodass der Client das selbstsignierte Zertifikat akzeptiert und die Anfrage erfolgreich ist — verschlüsselt, aber nicht authentifiziert.SunCertPathBuilderException: unable to find valid certification path fehlschlägt.# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: trusts the self-signed cert; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85247-knative-cert-validation-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: handshake fails; >>> 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): trusts the self-signed cert
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: handshake fails
| Eigenschaft | Wert |
|---|---|
| Komponente | camel-knative (KnativeSslClientOptions.configureOptions) |
| CWE | CWE-295 (Unzureichende Zertifikatsvalidierung) |
| Schweregrad | MITTEL |
| Angriffsvektor | Netzwerk-Man-in-the-Middle gegen einen Knative-HTTP-Client, der SSL aktiviert, aber keinen Truststore konfiguriert hat |
| Auswirkung | Verschlüsselte Verbindung ohne Peer-Authentifizierung: Jedes Zertifikat wird vertraut, sodass TLS abgefangen und gelesen werden kann |
| 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-24443 |
| Danksagung | Claude Security Scan Tool |
Sicherheitshinweis: https://camel.apache.org/security/CVE-2026-85247.html
Der mitgelieferte server-keystore.p12 ist ein Wegwerf-Schlüsselpaar mit selbstsigniertem Zertifikat (CN=localhost), das ausschließlich für diesen
Reproduzierer erzeugt wurde.
KnativeSslClientOptions.configureOptions: Wenn SSL ohne
Keystore, Truststore oder Trust-Cert-Pfad aktiviert ist, bleiben die Trust-Optionen nun unset, sodass Vert.x auf die
Standard-Trust-Anchors der JVM zurückfällt – derselbe Fallback, den SSLContextParameters und der Rest von Camel verwenden. TrustAllOptions wird nun
nur noch erreicht, wenn camel.knative.client.ssl.trust.all=true explizit gesetzt wird (was weiterhin für die Entwicklung
gegen einen Cluster mit einem selbstsignierten Zertifikat verfügbar bleibt). Nach dem Upgrade muss eine Bereitstellung, die sich auf das implizite
Trust-All-Verhalten verlassen hat, entweder einen Truststore konfigurieren oder trust.all bewusst setzen.
Konfigurieren Sie überall dort explizit einen Truststore, wo SSL im Knative-HTTP-Client aktiviert ist.
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 selbstsignierte Keystore ist ein inertes lokales Fixture. Verwenden Sie dieses Material nicht gegen Systeme, die Ihnen nicht gehören oder die Sie nicht betreiben.