脆弱性・CVE速報深刻度: 緊急

Rust の zip クレートで、アーカイブの「見え方」と実際の展開結果がずれる不具合(Zip Cloaking、CVE-2026-115905): 9.0.5 で修正、ただし有効化の設定が必要

目次(5)

CVE-2026-115905

Rust の zip ライブラリ(クレート名 zip)で、ZIP ファイルの 2 か所に書かれたファイル名が食い違っていても検知されず、読み取り方によって別のファイルに見える不具合(CVE-2026-115905、GHSA-m665-v7pm-7grj、通称 Zip Cloaking)が公開されました。GitHub の深刻度は Critical で、修正版は 9.0.5(crates.io に 10/17 UTC 公開)、勧告の公開は 10/28 です。CISA の KEV には、確認した範囲では載っていません。

何が起きるか

  • ZIP は、各ファイルの名前を「ローカルヘッダー(本体の直前)」と「セントラルディレクトリ(末尾の一覧)」の 2 か所に持ちます。
  • ZipArchive(一覧を見てから読む方式)は末尾の一覧の名前を正とし、ZipStreamReader(先頭から順に読んで展開する方式)はローカルヘッダーの名前で書き出します。
  • そのため、一覧では doc_report.pdf に見えるのに、ストリーム展開では cron_worker.sh として書き出される、といった細工ができます。
  • 勧告が想定する流れは、「受け付け側のスキャンや拡張子の許可リストは一覧(ZipArchive)を検査して通し、後段の処理がストリーム展開で別の名前・内容を書き出す」構成です。展開先に同名の既存ファイルがあれば上書きされ、勧告は上書きからコード実行まで届く場合があると説明しています(勧告の記載で、当サイトでは再現していません)。

影響を受ける版と条件

項目内容
対象zip クレート 9.0.4 以下(勧告の範囲 <= 9.0.4)
修正版9.0.5
弱点CWE-20(入力検証の不備)、CWE-436(解釈の食い違い)
評価GitHub 提供の CVSS v4.0 は 10.0。NVD 自身の評価は未実施
前提検査と展開を別の部品・別の読み方で行い、利用者が送った ZIP を展開する構成
  • 検査も展開も同じ読み方(同じ部品)で行っている構成では、この食い違いは成立しにくいと考えられます(本記事の推定)。
  • 勧告の深刻度は、検査を通ったアーカイブを後段が展開する連携を前提に付けられています。単体のライブラリ利用では、実際の影響は構成で大きく変わります。

修正の中身(注意: 既定では有効になりません)

修正コミット 8068ab4(10/16 UTC)は、ローカルヘッダーと末尾の一覧の内容(名前、圧縮方式、暗号化の有無、時刻、CRC、サイズなど)が一致するかを確かめる検証を足します。食い違いがあると、展開を中止して InvalidArchive を返します。リリースタグ v9.0.5 にこのコミットが含まれることは確認しました。

ただし、ZipStreamReader::new の既定は後方互換のため検証なしで、検証を使うには enforce_header_consistency(true) を明示的に呼ぶ必要があると、コードの説明文に書かれています。つまり、9.0.5 に更新するだけでは保護されず、利用側のコードで設定を有効にする必要があります。ZipArchive 側の既定の挙動は、差分から断定できなかったため未確認です。

対応

  1. zip クレートを 9.0.5 以上に更新します。Cargo.lock で版を確かめられます。
  2. ZipStreamReader で利用者由来の ZIP を展開している箇所では、enforce_header_consistency(true) を付けます。
  3. 検査と展開で読み方が異なる構成は、同じ部品・同じ読み方に揃えるか、展開前に両方の名前を突き合わせることを検討します(本記事の推定で、勧告が示す回避策ではありません)。
  4. 展開先は、既存のファイルを上書きできない専用の空ディレクトリにし、展開する処理に付ける権限を最小にします。

未確認の点

  • NVD の状態は Awaiting Analysis(10/26 公開、同日更新)で、NVD 自身の評価はまだありません。CVSS v4.0 の 10.0 は GitHub の評価です。
  • EPSS は 0.32%(10/31 時点、百分位 0.25)で、悪用の報告は見つかっておらず、KEV 掲載もなしです。
  • 修正(10/16〜17)から勧告の公開(10/28)まで約 11 日あります。この間の経緯は未確認です。
  • 9.0.5 のリリースノートには、この修正が書かれていません。修正が 9.0.5 に入っていることはタグの比較で確認しました。
  • 実際の環境での再現は確認していません。記載は勧告、NVD、修正コミットに基づきます。

この記事について

出典

この記事を共有