Apache Camel の脆弱性に対する実行可能な概念実証(PoC)再現ツールです。CXF SOAP コンシューマーの背後にあるルートが、サービスコントラクトで宣言されていない例外で失敗した場合、その例外の内容がフォールト内で SOAP クライアントにそのまま返されていました。CXF はメッセージを SOAP の faultstring にコピーし(設定によりスタックトレースをフォールトの詳細に含めることも可能)、外部の呼び出し元が障害を引き起こすことで、デプロイメントに関する内部情報(クラス名やパッケージ名、例外メッセージに含まれる内容など)を読み取ることができました。宣言済みのフォールト(@WebFault で注釈されたもの)は別の扱いです。これらはクライアントが準拠して実装する公開コントラクトの一部であるため、引き続き完全な形で報告されます。
| ランタイム | ディレクトリ | スタック |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-cxf-soap 4.22.0(影響あり、修正版 4.22.1)、Tomcat 上の CXFServlet |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-cxf-soap(Camel 4.15.0、影響あり、修正版コントロール CQ 3.40.0 / Camel 4.22.1) |
両モジュールとも、影響を受ける動作および修正後の動作を示します。
CXF SOAP コンシューマーがルートを支えており、そのプロセッサーが宣言されていない IllegalStateException をスローします。この例外には、シミュレートされた内部情報(マーカートークンと偽の内部 JDBC URL)が含まれています。ドライバーは SOAP クライアントとして動作し、サービスを呼び出して返された SOAP フォールトを読み取ります。
Exchange processing failed)となり、ルート例外のクラス、メッセージ、スタックトレースを含みません(新しい muteException コンシューマーオプションはデフォルトで true)。コントラクトが宣言するフォールト(@WebFault)は引き続き完全な形で返されます。# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: fault leaks internal detail; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85257-cxf-fault-info-disclosure-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: generic fault; >>> 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): fault leaks internal detail
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: generic fault
| プロパティ | 値 |
|---|---|
| コンポーネント | camel-cxf (CxfConsumer、SOAP フォールトの構築) |
| CWE | CWE-209 (機密情報を含むエラーメッセージの生成) |
| 重大度 | MEDIUM |
| 攻撃ベクトル | SOAP 呼び出し元が宣言されていないルート障害を引き起こし、フォールトから例外の詳細を読み取る |
| 影響 | 情報漏えい: 例外クラス/メッセージ (内部ホスト名、接続文字列、ルートの構成) が外部の SOAP 呼び出し元に到達する |
| 影響を受けるバージョン | 4.0.0 から 4.18.5 より前、4.19.0 から 4.22.1 より前 |
| 修正済みバージョン | 4.18.5、4.22.1、4.23.0 |
| JIRA | CAMEL-24477 |
| クレジット | Claude Security Scan Tool |
アドバイザリ: https://camel.apache.org/security/CVE-2026-85257.html
Spring Boot モジュールは CXFServlet を組み込み Tomcat にマウントします (スタンドアロンの CXF Jetty トランスポートは Spring Boot が管理する Jetty バージョンと競合します)。そのため、SOAP エンドポイントはポート 8080 の
/services/helloで提供されます。
CxfConsumer は muteException コンシューマーオプションを追加します (デフォルトは true)。
宣言されていないルート障害の場合、ルートの例外ではなく、空のスタックトレースを持つ代用の Exception("Exchange processing failed")
からフォールトを構築するようになりました。これにより、クラス名、メッセージ、スタックトレースが呼び出し元に到達しません。
コントラクトが宣言する例外 (@WebFault) は検出され、完全に報告されます。これを抑制するとサービスが壊れるためです。
以前の出力に戻すには muteException=false を設定してください。
サービスが報告を許可される例外を宣言し、それ以外のすべての障害を onException ハンドラーでそれらのいずれかにマッピングして、
宣言されていない例外がフォールトに到達しないようにしてください。
このリポジトリは教育および防御目的で公開されています。Apache Camel ユーザーが脆弱性を理解し、影響を受けているかどうかを確認し、 アップグレードによって解決されることを確かめるためのものです。失敗するルート内のマーカートークンと JDBC URL は、 無害な架空のローカルフィクスチャです。この資料を、所有または運用していないシステムに対して使用しないでください。