
CVE-2026-79986 の再現プログラムと分析。Apache Camel の camel-azure-files におけるパストラバーサルであり、共有リストの名前がポーリング対象ディレクトリの外に脱出する問題です。
Apache Camel の脆弱性の再現リポジトリです。azure-files コンシューマーは、他のリモートファイルコンシューマーと同じ RemoteFileConsumer 基底クラスから派生し、単純な連結ヘルパーを通じてリモートパスを構成しますが、ポーリングした各ファイルのリモートパスを、設定されたディレクトリと Azure File の共有リスティングで報告された名前を連結して構築し、封じ込めチェックを行いません。したがって、単一のパスセグメントではないリスティング名は、取得時にポーリング対象ディレクトリの外側に解決され、さらに delete/move/preMove/moveFailed/readLock=rename と組み合わせると、削除やリネームが発生しました。
この再現リポジトリは author-only です — 以下を参照 — そして、実行可能な CVE-2026-79983 (
camel-ftp) および CVE-2026-79984 (camel-mina-sftp) の Azure-Files 版の兄弟であり、これらは同一の 根本原因と修正を、組み込みの悪意あるサーバーに対してエンドツーエンドで実証しています。
したがって、このリポジトリには影響を受けるコンシューマーの配線そのもの(実際の camel-azure-files ルート、AzureFilesRoute.java / AzureFilesRoutes.java を参照)が含まれ、メカニズムと修正を文書化し、実行可能なエンドツーエンドの実証は上記の FTP および SFTP の再現リポジトリに委ねています。
| ランタイム | ディレクトリ | スタック |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-azure-files 4.22.0(影響あり、修正版 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-azure-files 3.29.0(Camel 4.15.0、影響あり) |
両モジュールは Azure の認証情報なしでクリーンにコンパイルおよび起動します(ルートは autoStartup=false で定義されています)。-Daz.enabled=true を az.account/az.share/az.sharedKey とともに設定すると、影響を受けるルートそのものを自身の Azure File 共有に向けることができます。
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # prints the explanation + links to the runnable PoCs
docker compose down
| プロパティ | 値 |
|---|---|
| コンポーネント | camel-azure-files (azure-files スキーム) |
| CWE | CWE-22 (パス名の制限ディレクトリへの不適切な制限) |
| 重大度 | HIGH |
| 攻撃ベクトル | 単一のパスセグメントではない共有リスト名 (サーバー提供) |
| 影響 | 読み取り — さらに delete/move/readLock=rename を併用すると、エンドポイントの認証情報を用いてポーリング対象ディレクトリ外のファイルを削除またはリネーム |
| 影響を受けるバージョン | 4.0.0 から 4.18.5 未満、4.19.0 から 4.22.1 未満 |
| 修正済みバージョン | 4.18.5、4.22.1、4.23.0 |
| JIRA | CAMEL-24487 |
| クレジット | Dilrevx from NSSL, SJTU |
アドバイザリ: https://camel.apache.org/security/CVE-2026-79986.html
azure-files コンシューマーは、他のリモートファイルコンシューマーと同じ封じ込めチェックを適用するようになりました。解決されたパスがポーリング対象ディレクトリの外にある場合は警告とともにスキップされるため、トラバーサルセグメントを含むリスト名が retrieve/delete/rename のオペランドに到達することはなくなりました。
filter/antInclude/include を用いてコンシューマーを制約し、単一セグメントの名前のみを受け入れるようにしてください。また、リストが完全に信頼できない共有に対しては delete/move/preMove/moveFailed/readLock=rename の使用を避けてください。
このリポジトリは教育および防御目的で公開されています。Apache Camel ユーザーが脆弱性を理解し、影響を受けているかどうかを確認し、アップグレードによって解決されることを確証できるようにするためのものです。所有または運用していないシステムに対してこの資料を使用しないでください。