
CVE-2026-79984(Apache Camel camel-mina-sftp におけるパストラバーサル)の実行可能な概念実証(PoC)再現ツール。悪意ある SFTP サーバーフィクスチャと、影響を受けるビルド/修正済みビルドを備えています。
Apache Camel の脆弱性に対する実行可能な概念実証(PoC)再現プログラムです。この脆弱性では、mina-sftp コンシューマー — 他のリモートファイルコンシューマーと同じ RemoteFileConsumer 基底クラスから派生している — が、ポーリングした各ファイルの絶対リモートパスを、設定されたディレクトリとサーバーのディレクトリ一覧で報告された名前を連結して構築しますが、字句的正規化も封じ込めチェックも行いません。このパスはその後、(常に)取得のオペランドとなり、delete=true、move、preMove、moveFailed、または readLock=rename が設定されている場合は削除やリネームのオペランドともなります。
SFTP のディレクトリエントリ名はサーバーが提供する生のプロトコル文字列であるため、侵害された、悪意のある、またはマルチテナントのサーバーは、単一のパスセグメントではない名前を報告する可能性があります。
これは CVE-2026-79983(
camel-ftp)のmina-sftp版の兄弟です。両者は 同じ根本原因と同じ修正を共有しています。
| ランタイム | ディレクトリ | スタック |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-mina-sftp 4.22.0(影響あり、修正版 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-mina-sftp 3.39.0(Camel 4.22.0、影響あり、修正済みコントロール 3.40.0 / Camel 4.22.1) |
camel-mina-sftpは Camel 4.18.0 で導入されたため、最新番号の Camel Quarkus にバンドルされている Camel 4.15.0 にはこのコンポーネントは存在しません。この再現プログラムは Camel Quarkus 3.39.0(Camel 4.22.0、影響あり)を使用し、 3.40.0(Camel 4.22.1)をパッチ適用済みのコントロールとしています。したがって両方のモジュールが、影響を受ける動作および 修正済みの動作を示します。
このアプリは、意図的に悪意のある SFTP サーバー(Apache MINA SSHD)を組み込んでいます。実際の一時ディレクトリツリーを提供しますが、SSH_FXP_READDIR の応答において、ポーリング対象ディレクトリ /upload 内の 1 つのファイルの名前を、トラバーサル文字列 d/../../outside.txt に書き換えます(getShortName のオーバーライドによる)。この名前はドットで始まらないため、Camel の隠しファイルルールでは捕捉されず、/upload + d/../../outside.txt はポーリング対象ディレクトリの 1 つ上の階層である /outside.txt に解決されます。プレーンな mina-sftp コンシューマーが /upload をポーリングします。
normal.txt と、脱出する /outside.txt の両方を取得します。normal.txt を保持し、脱出するエントリをスキップして、
Skipping file as it resolves outside the starting directory: upload/d/../../outside.txt をログに記録します。cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
影響を受けたビルドで期待される出力:
name=[d/../../outside.txt] <<< FILE FROM OUTSIDE THE POLLED DIRECTORY
content: OUTSIDE-SECRET (/outside.txt, a file the consumer should never reach)
name=[normal.txt] (inside)
| 項目 | 値 |
|---|---|
| コンポーネント | camel-mina-sftp (mina-sftp スキーム) |
| CWE | CWE-22 (パス名の制限されたディレクトリへの不適切な制限) |
| 深刻度 | HIGH |
| 攻撃ベクター | 単一のパスセグメントではない READDIR エントリ名 (サーバーが提供) |
| 影響 | エンドポイントの認証情報を用いて、ポーリング対象ディレクトリ外のファイルを読み取り、さらに delete/move/readLock=rename を併用した場合は削除またはリネームする |
| 影響を受けるバージョン | 4.18.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-79984.html
GenericFileConsumer.isWithinStartingDirectory (RemoteFileConsumer によってオーバーライドされ、mina-sftp コンシューマーはこれから派生する) は、解決されたパスを圧縮し、パスセグメントの境界でポーリング対象ディレクトリ内に留まっていることを検証する。外部に解決されるエントリは警告とともにスキップされ、正当なエントリは引き続き処理される。
サーバーのホスト鍵を検証し、filter/antInclude/include でコンシューマーを制約して単一セグメントの名前のみを受け入れるようにし、リスティングが完全に信頼できないサーバーに対しては delete/move/preMove/moveFailed/readLock=rename を避けること。可能であれば、サーバーアカウントをポーリング対象ディレクトリに限定すること。
このリポジトリは教育および防御目的で公開されている。Apache Camel ユーザーが脆弱性を理解し、影響を受けているかどうかを確認し、アップグレードによって解決されることを確証できるようにするためである。悪意のあるサーバーと「secret」は無害なローカルフィクスチャである。本資料を、所有または運用していないシステムに対して使用しないこと。