downloadBlobToFile パストラバーサル同じ Apache Camel 脆弱性の実行可能な Proof-of-Concept 再現コードです。ランタイムごとに 1 つ用意しています:
両方とも影響を受けるバージョンです(この問題は 4.14.9 / 4.18.4 / 4.22.0 で修正済み)。また、両方とも同一の欠陥を実証しています。すなわち、camel-azure-storage-blob コンシューマーは、fileDir オプションで指定されたディレクトリ内のローカルファイルシステムにコンテナのブロブをダウンロードし、ローカルターゲットを new File(fileDir, client.getBlobName()) として構築します。このとき、リモートブロブ名は Azure SDK が報告したものをそのまま使用し、正規化は行われず、解決された場所が fileDir 内に留まるというチェックもありません。ブロブ名はルートによって制御されません。コンシューマーはコンテナをリストし(BlobConsumer.createBatchExchangesFromContainer)、すべてのブロブをダウンロードします。したがって、名前に ../ セグメントを含むブロブは fileDir の外部に書き込まれます(CWE-22、パストラバーサル → 任意のファイル書き込み)。
各サブディレクトリは自己完結型です(それぞれ独自の Dockerfile、Azurite エミュレーターを起動する docker-compose.yml、README を含みます)。手順はどちらも同じで、次のとおりです:
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
影響を受けるビルドでの期待される出力(両バリアント共通):
Files inside the intended download directory /app/downloads:
- report.txt
File written OUTSIDE it, at /tmp/pwned-66906.txt: true
content: PWNED via path traversal — CVE-2026-66906
>>> PROVEN: the blob name's ../ segments escaped the configured fileDir directory ... : true
アドバイザリ: https://camel.apache.org/security/CVE-2026-66906.html
コンシューマーは、ダウンロード先を設定された fileDir ディレクトリ内に解決・制限するようになり(AzureFileNameHelper.resolveWithinDirectory 経由)、そこから脱出するブロブ名を拒否します。同じ修正は、兄弟コンポーネントである camel-azure-storage-datalake(CVE-2026-60093)にも適用されています。
このリポジトリは、教育および防御目的で公開されています。Apache Camel ユーザーが本脆弱性を理解し、自分たちが影響を受けるかどうかを検証し、アップグレードによって解決されることを確認できるようにするためです。書き込まれるファイルは /tmp 配下の無害なマーカーです。所有または運用していないシステムに対してこの資料を使用しないでください。
| ランタイム | ディレクトリ | スタック |
|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-azure-storage-blob 4.18.2 |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.36.0 + Camel Quarkus 3.36.0 (Camel 4.20.0 を同梱) |
| プロパティ | 値 |
|---|
| コンポーネント | camel-azure-storage-blob (Spring Boot: camel-azure-storage-blob-starter; Quarkus: camel-quarkus-azure-storage-blob) |
| CWE | CWE-22 (Improper Limitation of a Pathname to a Restricted Directory — Path Traversal) |
| 攻撃ベクトル | fileDir が設定された状態でコンシューマーがダウンロードする、名前に ../ セグメントを含むコンテナブロブ |
| 影響 | 設定された fileDir ディレクトリ外への任意のファイル書き込み |
| 影響を受けるバージョン | 4.0.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-23942 |
| クレジット | n0mi1k; Hiep Nguyen |