websocket.* インジェクション)Apache Camel の脆弱性に対する実行可能な PoC 再現コードです。UndertowEndpoint はデフォルトで headerFilterStrategy を基底の HttpHeaderFilterStrategy に設定し、そのインスタンスを自身が作成する UndertowHttpBinding に渡すため、DefaultUndertowHttpBinding がインストールする UndertowHeaderFilterStrategy を上書きします。デプロイメントがカスタムバインディングや明示的な headerFilterStrategy を指定しない限り、undertow 固有のフィルタリングは実行されません。戦略オブジェクトは構築された直後、参照される前に置き換えられてしまうのです。
| ランタイム | ディレクトリ | スタック |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-undertow 4.18.2 |
Camel Quarkus:
camel-quarkus-undertowエクステンションは存在しません(Quarkus は独自の Vert.x HTTP スタックを使用します)。したがって、このコンポーネントは Camel Quarkus では実行できません。再現コードは Spring Boot のみ対応です。
その結果、レガシーな websocket. Exchange ヘッダープレフィックスは、undertow トランスポート境界で双方向ともフィルタリングされません。したがって undertow HTTP コンシューマーは、その形式のインバウンドワイヤーヘッダー(websocket.connectionKey, websocket.connectionKey.list, websocket.sendToAll, …)を Exchange にマッピングし、undertow WebSocket プロデューサーはそれらをディスパッチ指示として読み取って、ルートが意図した相手以外のピアに配信させることができます。これは atmosphere-websocket の CVE-2026-71300 と同じディスパッチハイジャックのクラスです。
この再現コードは、websocket.* ディスパッチヘッダーと Camel* 制御ヘッダーを含む HTTP リクエストを送信し、実際に Exchange に到達した内容を示します。websocket.* ヘッダーは境界を(フィルタリングされずに)通過する一方、Camel* は除去されます。これにより、適用されていたのが(undertow 用ではなく)基底のフィルターであることが証明されます。
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
影響を受けるビルドでの期待出力:
What actually reached the Exchange, as echoed by the undertow route:
websocket.connectionKey.list on Exchange = [attacker-connection-key]
websocket.sendToAll on Exchange = [true]
CamelFoo on Exchange (control) = []
>>> PROVEN: the undertow endpoint applied the base HttpHeaderFilterStrategy (Camel* filtered) instead of the
>>> UndertowHeaderFilterStrategy, so the legacy websocket.* dispatch headers passed onto the Exchange ...
アドバイザリ: https://camel.apache.org/security/CVE-2026-78329.html
undertow エンドポイントは、バインディングの UndertowHeaderFilterStrategy を上書きしなくなりました。この戦略は websocket. プレフィックス(CAMEL-23588 で追加)を双方向でフィルタリングするため、ディスパッチヘッダーはトランスポート境界で除去され、外部送信者はもはや注入できません。
このリポジトリは教育および防御目的で公開されています。Apache Camel ユーザーが脆弱性を理解し、自身が影響を受けるかどうかを検証し、アップグレードで解決されることを確認できるようにするためです。所有または運用していないシステムに対してこの資料を使用しないでください。
| プロパティ | 値 |
|---|
| コンポーネント | camel-undertow (camel-undertow-starter) |
| CWE | CWE-20 (不適切な入力検証) → CWE-74 (インジェクション) |
| 攻撃ベクトル | undertow HTTP コンシューマーへのインバウンド websocket.* ヘッダーが、undertow WebSocket プロデューサーによってディスパッチ指示として読み取られる |
| 影響 | WebSocket プロデューサーのディスパッチ判断を乗っ取り、任意の WebSocket ピアへの配信/配信拒否を可能にする |
| 影響を受けるバージョン | 4.11.0 以上 4.14.9 未満、4.15.0 以上 4.18.4 未満、4.19.0 以上 4.22.0 未満 |
| 修正済みバージョン | 4.14.9, 4.18.4, 4.22.0 |
| JIRA | CAMEL-24360 |
| クレジット | Andrea Cosentino (Apache Software Foundation); Barak Srour (Apiiro) |