
Apache Camel の脆弱性の再現リポジトリです。この脆弱性では、smb コンシューマーがポーリングした各ファイルのリモートパスを、設定されたディレクトリと SMB の共有リストで報告された名前を連結して構築しますが、封じ込めチェックがありません。SmbConsumer はリスト自体を走査し(RemoteFileConsumer を経由せず)、正確に . と .. のエントリのみをスキップするため、他の形式でトラバーサルセグメントを含む名前はチェックなしで連結されていました — その結果、取得時にポーリング対象ディレクトリの外側のパスに解決され、さらに delete/move/preMove/moveFailed/readLock=rename と組み合わせると削除やリネームが発生します。
この再現リポジトリは author-only です — 以下を参照 — また、実行可能な CVE-2026-79983(
camel-ftp)および CVE-2026-79984(camel-mina-sftp)の SMB 版兄弟であり、これらは同一の 根本原因と修正を、埋め込みの悪意あるサーバーに対してエンドツーエンドで実証しています。
アドバイザリ自体が述べているように、SMB 経由でこの問題に到達するには
「単一のパスセグメントではないリスト名を出力するサーバーが必要であり、準拠した SMB2 実装はそのようなことを行わない。この露出は、このスキームに対する実証済みの概念実証によるものではなく、 他のリモートファイルコンシューマーと同じ根拠に基づいて修正された。」
そのような名前を出力する埋め込み可能な悪意ある SMB サーバーは存在しません(FTP では Apache MINA FtpServer の VFS をそのように動作させることができ、SFTP では Apache MINA SSHD の getShortName をオーバーライドできますが、それらとは異なります)。したがって、このリポジトリは影響を受けるコンシューマーの配線そのもの(実際の camel-smb ルート。SmbRoute.java / SmbRoutes.java を参照)を収録し、そのメカニズムと修正を文書化するとともに、実行可能なエンドツーエンドの実証は上記の FTP および SFTP の再現リポジトリに委ねています。
| ランタイム | ディレクトリ | スタック |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-smb 4.22.0(影響あり、修正版 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-smb 3.29.0(Camel 4.15.0、影響あり) |
両モジュールは SMB サーバーなしでクリーンにコンパイルおよび起動します(ルートは autoStartup=false で定義されています)。-Dsmb.enabled=true を smb.host/smb.share/smb.username/smb.password とともに設定すると、影響を受けるルートそのものを自身の SMB サーバーに向けることができます。
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-smb(smb スキーム) |
| CWE | CWE-22(パス名の制限されたディレクトリへの不適切な制限) |
| 深刻度 | HIGH |
| 攻撃ベクトル | 単一のパスセグメントではない共有リスト名(サーバーが提供) |
| 影響 | 読み取り — さらに delete/move/readLock=rename を併用した場合、エンドポイントの認証情報を用いて、ポーリング対象ディレクトリ外のファイルの削除や名前変更が可能 |
| 影響を受けるバージョン | 4.2.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-79985.html
SmbConsumer は、他のリモートファイルコンシューマーと同じ封じ込めチェックを適用するようになりました。解決されたパスが
ポーリング対象ディレクトリの外にある場合は警告とともにスキップされるため、トラバーサルセグメントを含むリスト名が
retrieve/delete/rename のオペランドに到達することはなくなりました。
コンシューマーを filter/antInclude/include で制約し、単一セグメントの名前のみを受け入れるようにしてください。また、
リストが完全に信頼できないサーバーに対しては delete/move/preMove/moveFailed/readLock=rename の使用を避けてください。
可能であれば、サーバーアカウントをポーリング対象ディレクトリに限定してください。
このリポジトリは教育および防御目的で公開されています。Apache Camel ユーザーが脆弱性を理解し、影響を受けているかどうかを確認し、 アップグレードによって解決されることを検証できるようにするためです。所有または運用していないシステムに対してこの資料を使用しないでください。