
CVE-2026-85247 の再現用に実行可能な Spring Boot および Quarkus の再現プログラムであり、camel-knative の TLS trust-all フォールバックを実演し、修正を検証します。
Apache Camel の脆弱性に対する実行可能な概念実証 (PoC) 再現ツールです。この脆弱性では、トラストストアを設定せずに Knative HTTP クライアントで SSL を有効にすると、JVM のデフォルトのトラストアンカーではなく、提示されたすべての証明書を信頼する動作にフォールバックしてしまいます。そのため、TLS を有効にしたもののトラストストアを同時に設定しなかったデプロイでは、ピア認証のない暗号化接続が確立され、ネットワーク経路上に位置する攻撃者がこれを終端して内容を読み取ることが可能になります。この危険な状態は明示的なオプトインではなく、設定の省略によって到達されます。TLS を有効にすることが証明書検証を無効にする原因であってはなりません。
| ランタイム | ディレクトリ | スタック |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-knative 4.22.0 (影響あり、修正版 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-knative (Camel 4.15.0、影響あり、修正対照 CQ 3.40.0 / Camel 4.22.1) |
両モジュールとも、影響を受ける動作および修正後の動作を実演します。
このデプロイでは camel.knative.client.ssl.enabled=true を設定し、トラストストアを一切設定していません。ドライバはまさにこれらの設定から実際の KnativeSslClientOptions を構築し (Knative HTTP プロデューサが使用するのと同じオプションです)、それらを用いて、自己署名証明書 (CN=localhost、どのトラストストアにも存在しない) を提示する同梱サーバに対して HTTPS リクエストを送信します。これは TLS の man-in-the-middle を模したものです。
KnativeSslClientOptions.getTrustOptions() が TrustAllOptions になるため、クライアントは自己署名証明書を受け入れ、リクエストは成功します — 暗号化されているものの認証されていません。SunCertPathBuilderException: unable to find valid certification path で失敗します。# 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
| 項目 | 値 |
|---|---|
| コンポーネント | camel-knative (KnativeSslClientOptions.configureOptions) |
| CWE | CWE-295 (不適切な証明書検証) |
| 深刻度 | MEDIUM |
| 攻撃ベクトル | SSL を有効化したもののトラストストアを設定していない Knative HTTP クライアントに対するネットワーク上の中間者攻撃 |
| 影響 | ピア認証なしの暗号化接続: 任意の証明書が信頼されるため、TLS を傍受して読み取ることが可能 |
| 影響を受けるバージョン | 4.0.0 から 4.18.5 未満、4.19.0 から 4.22.1 未満 |
| 修正済みバージョン | 4.18.5、4.22.1、4.23.0 |
| JIRA | CAMEL-24443 |
| クレジット | Claude Security Scan Tool |
アドバイザリ: https://camel.apache.org/security/CVE-2026-85247.html
同梱の server-keystore.p12 は、この再現用にのみ生成された使い捨ての自己署名鍵ペア (CN=localhost) です。
KnativeSslClientOptions.configureOptions: SSL が有効で、キーストア、トラストストア、トラスト証明書パスのいずれも設定されていない場合、トラストオプションは未設定のままにされるようになり、Vert.x は JVM のデフォルトトラストアンカーにフォールバックします。これは SSLContextParameters や Camel のその他の部分が使用するのと同じフォールバックです。TrustAllOptions に到達するのは、camel.knative.client.ssl.trust.all=true を明示的に設定した場合のみになりました (自己署名証明書を使用するクラスタに対する開発用途では引き続き利用可能です)。アップグレード後、暗黙の trust-all 動作に依存していたデプロイメントは、トラストストアを設定するか、trust.all を意図的に設定する必要があります。
Knative HTTP クライアントで SSL が有効になっている箇所では、トラストストアを明示的に設定してください。
このリポジトリは教育および防御目的で公開されています。Apache Camel ユーザーが脆弱性を理解し、影響を受けているかどうかを確認し、アップグレードによって解決されることを確かめるためのものです。自己署名キーストアは無害なローカル用フィクスチャです。本資料を、所有または運用していないシステムに対して使用しないでください。