同じ Apache Camel 脆弱性の実行可能な概念実証(PoC)再現プログラムです。ランタイムごとに1つ用意されています:
両方とも影響を受けるバージョンです(この問題は 4.14.9 / 4.18.4 / 4.22.0 で修正されています)。また、両方とも同一の欠陥を示します: camel-knative コンシューマーは CloudEvent を2つのコンテンツモードで受け入れます。バイナリモードでは、属性は HTTP ヘッダーとして到着し、HeaderFilterStrategy を介してマッピングされるため、Camel* ヘッダーは破棄されます。構造化モード(Content-Type: application/cloudevents+json)では、イベント全体が JSON ボディであり、影響を受けるビルドはその JSON のすべての拡張フィールドを setHeader(key.toLowerCase(Locale.US), value) でメッセージヘッダーにマッピングし、HeaderFilterStrategy は一切使用しません。拡張名は送信者が選択するため、攻撃者は Camel 内部の制御ヘッダーを設定できます。ここでは、注入された拡張 camelsqlquery が CamelSqlQuery ヘッダーになります(Camel ヘッダーは大文字と小文字を区別しません)— これは camel-sql プロデューサーが実行するステートメントです(ヘッダーインジェクション → CWE-74)。
Spring Boot バリアントに関する注記。 knative HTTP トランスポートは Vert.x ベースで、camel-main / Camel Quarkus デプロイメントで使用されます。Spring Boot サーブレットアプリケーションはそのトランスポートをホストしないため、Spring Boot 再現プログラムは脆弱なデコードそのもの(
CloudEventProcessors.fromSpecVersion("1.0").consumer(...))を直接駆動します — これは、インバウンドのapplication/cloudevents+jsonリクエストが knative コンシューマー内で駆動するのと同じコードパスです。Camel Quarkus バリアントは完全な HTTP 駆動の再現プログラムです(ライブソースに CloudEvent を POST します)。
cd camel-spring-boot # or: cd camel-quarkus
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
影響を受けるビルドでの期待される出力(両バリアント共通):
1) Benign structured CloudEvent (no extension):
CamelSqlQuery ... = [null]
2) Malicious structured CloudEvent (injected extension 'camelsqlquery'):
CamelSqlQuery ... = [SELECT * FROM secrets WHERE 1=1 -- injected-by-attacker]
>>> PROVEN: ... a camel-sql producer downstream would execute this attacker-supplied statement: true
セキュリティアドバイザリ: https://camel.apache.org/security/CVE-2026-63621.html
構造化モードの拡張マッピングは、バイナリコンテンツモードのパスと一貫して、各フィールドを設定する前に HeaderFilterStrategy(DefaultHeaderFilterStrategy)に通すようになりました。これにより、信頼できないボディ由来の Camel* 拡張名は破棄されます:
// fixed (AbstractCloudEventProcessor.mapExtensionAsHeader)
final String headerName = key.toLowerCase(Locale.US);
if (!headerFilterStrategy.applyFilterToExternalHeaders(headerName, value, exchange)) {
message.setHeader(headerName, value);
}
このリポジトリは教育および防御目的で公開されています。Apache Camel ユーザーがこの脆弱性を理解し、影響を受けるかどうかを確認し、アップグレードによって解決されることを確認できるようにするためです。注入される値は無害なマーカーです(ここでは決して実行されない不活性な SQL 文字列)。所有または運用していないシステムに対してこの資料を使用しないでください。
| ランタイム | ディレクトリ | スタック | スタイル |
|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-knative 4.18.2 | 直接デコード(注記参照) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.36.0 + Camel Quarkus 3.36.0(Camel 4.20.0 をバンドル) | 完全な HTTP 駆動の knative ソース |
| プロパティ | 値 |
|---|
| コンポーネント | camel-knative(Spring Boot: camel-knative; Quarkus: camel-quarkus-knative) |
| CWE | CWE-20(不適切な入力検証)→ CWE-74(インジェクション) |
| 攻撃ベクトル | 攻撃者が選択した拡張フィールドを持つ構造化モードの CloudEvent(application/cloudevents+json) |
| 影響 | Exchange への Camel 内部制御ヘッダーのインジェクション(ここでは CamelSqlQuery) |
| 影響を受けるバージョン | 3.15.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-24084 |
| クレジット | Andrea Cosentino(Apache Software Foundation) |