enableCORS が認証情報付きの任意オリジンアクセスを許可するApache Camel の脆弱性に対する実行可能な概念実証(PoC)再現ツールです。この脆弱性は、Jetty エンドポイントで enableCORS=true を設定すると、Jetty の CrossOriginFilter がデフォルト設定のままインストールされる問題です。このデフォルト設定はすべてのオリジンを反映し、認証情報を許可します。CORS を要求しただけの運用者は、任意のオリジンのページがエンドポイントに対して認証情報付きのクロスオリジンリクエストを行い、レスポンスを読み取れるポリシーを手に入れてしまいました。反映されたオリジンと Access-Control-Allow-Credentials: true の組み合わせは、まさに Fetch 標準が * で表現することを拒否する認証情報付き任意オリジン設定であり、反映はそのルールを回避する通常の手段です(CWE-942)。
Spring Boot のみ。 この再現ツールには Camel Spring Boot モジュールが 1 つだけ含まれています。欠陥は
camel-jettyにあり、これは Jetty HTTP サーバーを埋め込みます。Camel Quarkus にはcamel-quarkus-jetty拡張機能がありません — Quarkus は Vert.x(platform-http)経由で HTTP を提供します — そのため再現すべき Quarkus の対応物は存在しません。(関連アドバイザリ CVE-2026-85316 はplatform-http-vertxにおける同じ欠陥クラスを扱っています。)Spring Boot モジュールは、影響を受ける動作および修正済みの動作を示します。
| ランタイム | ディレクトリ | スタック |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-jetty 4.22.0(影響あり、修正版 4.22.1)、Jetty 12.1.11 |
1 つのプロセス内で 2 つの Jetty サーバーが実行されます。脆弱なエンドポイント /protected(ポート 8081)は enableCORS=true で宣言され、検証用エンドポイント /exploit/attack(ポート 8080)が攻撃者のブラウザの役割を果たします。呼び出しのたびに、検証側は Origin: https://evil.example — デプロイメントが決して許可しなかったオリジン — を付けてクロスオリジンの GET を /protected に送信し、返ってくる CORS ヘッダーを報告します。
Access-Control-Allow-Origin: https://evil.example を反映し、かつ Access-Control-Allow-Credentials: true を返します — 任意のオリジンが認証情報付きレスポンスを読み取れます。Access-Control-Allow-Credentials は送信されなくなります。cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: ACAO reflected + ACAC: true; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85313-jetty-cors-credentials-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: ACAO reflected, ACAC absent; >>> Not exploited
| 項目 | 値 |
|---|---|
| コンポーネント | camel-jetty (JettyHttpComponent, enableCORS) |
| CWE | CWE-942 (信頼できないドメインを含む寛容なクロスドメインポリシー) |
| 深刻度 | MEDIUM |
| 攻撃ベクトル | 任意のオリジンのページが、enableCORS=true のみで設定されたエンドポイントに対して認証情報付きのクロスオリジンリクエストを発行する |
| 影響 | エンドポイントが攻撃者のオリジンを反映し認証情報を許可するため、攻撃者ページが認証済みレスポンスを読み取れる |
| 影響を受けるバージョン | 4.0.0 から 4.18.5 未満、4.19.0 から 4.22.1 未満 |
| 修正済みバージョン | 4.18.5、4.22.1、4.23.0 |
| JIRA | CAMEL-24450 |
| クレジット | Claude Security Scan Tool |
アドバイザリ: https://camel.apache.org/security/CVE-2026-85313.html
JettyHttpComponent は、enableCORS が設定された際に自身の CORS デフォルト値を適用するようになりました。allowCredentials は、運用者が明示的に設定しない限り false がデフォルトになります。オリジンの反映は変更されていないため、CORS を有効にしても認証情報を伴わないリクエストでは引き続き機能します。認証情報付きのクロスオリジンリクエストが必要な運用者は filterInit.allowCredentials=true を設定し、filterInit.allowedOrigins でオリジンを明示することが求められます(明示しない場合は警告が出ます)。
enableCORS がインストールする内容に依存するのではなく、CrossOriginFilter のパラメータを明示的に設定してください。許可するオリジンを filterInit.allowedOrigins で指定し、オリジンを明示していない限り filterInit.allowCredentials はオフのままにしてください。
このリポジトリは教育および防御目的で公開されています。Apache Camel ユーザーが脆弱性を理解し、影響を受けているかどうかを確認し、アップグレードによって解決されることを検証できるようにするためのものです。「攻撃者」のオリジンは無害なプレースホルダー(https://evil.example)であり、エンドポイントとプローブの両方が再現環境内で実行されます。この資料を、所有または運用していないシステムに対して使用しないでください。