CVE-2026-66907
Apache Camel: Camel-Google-Storage: コンシューマーは、結果を制約せずに、設定済みのdownloadFileNameディレクトリへリモートオブジェクト名を追加していました
- 公開済み
- 2026/08/24
- 更新済み
- 2026/08/25
- CNA の割り当て
- apache
- 観察された証拠
- 2026/08/24
プライマリ CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N低 · 今後 30 日間
- パーセンタイル
- 46.1%
- モデルの日付
- 2026/09/21
EPSS は統計的な推定値であり、確実性や影響の尺度ではありません。 CVSS、KEV ステータス、暴露、環境と組み合わせます。
概要
Apache Camel の Google Storage コンポーネントにおける相対パストラバーサルの脆弱性。この問題は Apache Camel に影響します: 4.0.0 以上 4.14.9 未満、4.15.0 以上 4.18.4 未満、4.19.0 以上 4.22.0 未満。camel-google-storage コンシューマは、downloadFileName オプションが設定されている場合、Google Cloud Storage オブジェクトをローカルファイルシステムにダウンロードします。このオプションはフォルダまたはファイル名として文書化されており、その値に式トークンが含まれていない場合、コンシューマはオブジェクト名をそれに追加してローカル保存先を構築します: evaluateFileExpression は Exchange の file-name ヘッダーにリモートオブジェクト名を設定し、downloadFileName + "/${file:name}" を評価します。${file:name} トークンは、FileUtil.stripPath を適用する ${file:onlyname} とは異なり、file-name ヘッダーをそのまま返します。結果の文字列は、字句的正規化や、保存先が設定されたディレクトリ内に留まるかのチェックなしに、new File(result) と blob.downloadTo(file.toPath()) に直接渡されました。オブジェクト名はルートによって制御されるデータではありません: コンシューマはバケットをリストし、返された各 blob を反復処理し、blob.getBlobId().getName() をそのまま使用してオブジェクトごとに 1 つの exchange を作成します。また、それらの名前を制限できる filter オプションは、明示的に設定されていない限りまったく適用されません。Google Cloud Storage のオブジェクト名は、サービスが書き込まれたとおりにそのまま保存およびリストする不透明な UTF-8 キーであり、サーバー側の正規化はなく、スラッシュは擬似ディレクトリの表示上の慣習にすぎません。したがって、親ディレクトリセグメントを含むキーは、ラウンドトリップ後もそのまま残ります。したがって、そのようなセグメントを含むオブジェクト名は、設定された downloadFileName ディレクトリの外側の場所に解決され、消費されるバケット内に存在する名前に影響を与えることができる者は誰でも、Camel プロセスの権限で任意の場所にファイルを作成または上書きさせることができます。プロセスが書き込める対象によっては、ダウンロードディレクトリ外のファイルを上書きすると、そのファイルの整合性の喪失を超えて影響が拡大する可能性があります。downloadFileName オプションは通常のコンシューマパラメータであり、セキュリティマーカーは付いていないため、その値が封じ込め境界として強制されていないことをユーザーに知らせるものは何もありませんでした。この欠陥はコンシューマのみに影響します。プロデューサにはファイルへのダウンロードシンクはありません。Camel の他のファイルダウンロードコンシューマ(camel-file、camel-ftp、camel-smb、camel-mina-sftp、camel-azure-files、および Azure Storage のダウンロードパス)は、パスセグメント境界チェックを使用してローカルダウンロードを設定されたディレクトリ内にすでに制限していました。camel-google-storage は、その作業の対象外だった残りのオブジェクトストアダウンロードシンクでした。ユーザーには、この問題を修正したバージョン 4.22.0 へのアップグレードが推奨されます。4.14.x LTS リリースストリームを使用している場合は、4.14.9 にアップグレードすることをお勧めします。4.18.x リリースストリームを使用している場合は、4.18.4 にアップグレードすることをお勧めします。すぐにアップグレードできない導入環境では、filter オプションを、単純な単一セグメントのオブジェクト名のみを受け入れる正規表現に設定し、exchange が作成される前にパス区切り文字または親ディレクトリセグメントを含む名前が除外されるようにしてください。オプションが未設定の場合はフィルタリングが一切適用されず、式はオブジェクト名全体に対して照合されることに注意してください。あるいは、downloadFileName に、リモートパスをそのまま引き継がない明示的な式、たとえば暗黙の ${file:name} ではなく ${file:onlyname} に基づく式を指定してください。式を含む downloadFileName はルート作成者によって制御されるものとして扱われ、修正で追加された封じ込めチェックの対象外であることに留意してください。多層防御として、外部から書き込み可能なバケット内のオブジェクト名は信頼できない入力として扱い、それらからローカルファイルシステムのパスを導出しないでください。
ソース
1責任ある使用
脆弱性情報は、自分が所有しているシステム、またはテストを許可されているシステムでのみ使用してください。 Kitploit は公開研究メタデータにリンクしており、エクスプロイト コードや悪意のあるペイロードは保存しません。