
Apache Camelの脆弱性に対する実行可能なPoC再現プログラムです。この脆弱性では、VertxPlatformHttpServerSupport. createCorsHandler() が Access-Control-Allow-Credentials: true をOriginチェックの外側で設定していました。そのため、Origin ヘッダーを含むリクエストへのすべてのレスポンスでこのヘッダーが送信され、ハンドラーがまさに許可しないと判断した直後のOriginへのレスポンスも含まれていました。camel.server.cors.origins が未設定の場合、ハンドラーはすべてのOriginを許可されたものとして扱い、呼び出し元自身の Origin をそのまま Access-Control-Allow-Origin として返します。これらが組み合わさることで、fetch仕様ではリテラルのワイルドカードとして表現することが拒否される認証情報付きの任意Origin構成が生まれます。まさにこれが、Originを反射させることがそのルールを回避する通常の手段である理由です。したがって、任意のOrigin上のページが、Camelエンドポイントに対して認証情報付きのクロスオリジンリクエストを行い、レスポンスを読み取ることができます。
| ランタイム | ディレクトリ | スタック |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-platform-http-vertx 4.22.0(影響あり、修正版 4.22.1) |
Camel Quarkus: 該当しません。脆弱なハンドラーはCamel独自のスタンドアロンVert.x platform-httpサーバー(
camel-platform-http-vertx)にあります。Camel Quarkusでは、platform-httpはQuarkus HTTPサーバーによって提供され、CORSはcreateCorsHandler()ではなくQuarkus(quarkus.http.cors.*)によって処理されるため、この特定の欠陥には到達できません。(またcamel-platform-http-vertx-starterも存在しません。Spring Bootモジュールはプレーンなcamel-platform-http-vertxアーティファクトを使用しており、これはSpring Boot Webサーバーとは独立して独自のVert.xサーバーを実行します。)
このアプリは、CORSを有効にし、Originを設定せずに、CamelのVert.x platform-httpサーバーをポート8081で起動し、ルート platform-http:/api を設定します。攻撃者は Origin: https://evil.example(決して許可リストに登録されていないOrigin)を付けて GET /api を送信し、レスポンスを検査します。
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
docker compose down
影響を受けたビルドで期待される出力:
Response CORS headers:
Access-Control-Allow-Origin = https://evil.example
Access-Control-Allow-Credentials = true
>>> PROVEN: the endpoint echoes the attacker's Origin ... and sends Access-Control-Allow-Credentials: true ...
| プロパティ | 値 |
|---|---|
| コンポーネント | camel-platform-http-vertx |
| CWE | CWE-942 (信頼できないドメインによる寛容なクロスドメインポリシー) |
| 重大度 | MEDIUM |
| 攻撃ベクトル | CORS が有効でオリジンが設定されていない platform-http-vertx エンドポイントに対し、Origin ヘッダーを伴うクロスオリジン(認証情報付き)リクエストを送信する |
| 影響 | 任意のオリジンが認証情報付きのクロスオリジンリクエストを送信し、レスポンスを読み取ることができる |
| 影響を受けるバージョン | 4.0.0 から 4.18.5 より前、4.19.0 から 4.22.1 より前 |
| 修正済みバージョン | 4.18.5、4.22.1、4.23.0 |
| JIRA | CAMEL-24436 |
| クレジット | Claude Security Scan Tool |
アドバイザリ: https://camel.apache.org/security/CVE-2026-84176.html
Access-Control-Allow-Credentials: true は、すべてのオリジンに対して無条件に送出されなくなりました。明示的に許可されていないオリジンには認証情報が付与されないため、オリジンの反射と認証情報を組み合わせた状態(「認証情報付き任意オリジン」)はもはや発生しません。
明示的な camel.server.cors.origins 許可リストを設定し、任意のオリジンからの認証情報付きクロスオリジンアクセスに依存しないようにしてください。エンドポイントを、正しい CORS ポリシーを適用するプロキシの背後に配置してください。
このリポジトリは教育および防御目的で公開されています。Apache Camel ユーザーがこの脆弱性を理解し、影響を受けているかどうかを確認し、アップグレードによって解決されることを検証できるようにするためのものです。所有または運用していないシステムに対してこの資料を使用しないでください。