---
title: "Rust の zip クレートで、アーカイブの「見え方」と実際の展開結果がずれる不具合（Zip Cloaking、CVE-2026-115905）: 9.0.5 で修正、ただし有効化の設定が必要"
url: https://n-t-p.io/worldsecurity/articles/zip-crate-zip-cloaking-header-mismatch-9-0-5-2026-115905
lang: ja
kind: 速報
category: 脆弱性・CVE
author: World Security 編集部
published: 2026年10月31日
updated: 2026年10月31日
severity: 緊急
cve: CVE-2026-115905
---

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

> **TL;DR:** Rust の zip クレート 9.0.4 以下で、ZIP の 2 か所のファイル名の食い違いが検知されず、一覧を検査する部品と先頭から展開する部品で別のファイルに見える不具合（CVE-2026-115905、GitHub は Critical、CWE-20・436）。検査を通した ZIP を後段が展開する構成では、別名での書き出し・上書きに届くと勧告は説明。修正版は 9.0.5 だが、検証は既定で無効で明示的な設定が必要。KEV 掲載なし、EPSS は 0.32%。

**要点**
- ZIP はファイル名を本体直前のヘッダーと末尾の一覧の 2 か所に持ち、ZipArchive は一覧、ZipStreamReader は本体直前のヘッダーを使うため、同じ ZIP が別のファイル名に見える
- 受け付け側が一覧を検査して通し、後段がストリーム展開する構成が典型。既存ファイルの上書きからコード実行まで届くと勧告は説明（当サイトでは未再現）
- 修正版は 9.0.5（crates.io 10/17 UTC）。修正コミット 8068ab4 は両ヘッダーの一致を検証する。リリースノートには記載なし
- ZipStreamReader::new の既定は検証なし。enforce_header_consistency(true) を呼ばないと保護されない。ZipArchive 側の既定は未確認
- NVD は Awaiting Analysis（自身の評価なし）、GitHub の CVSS v4.0 は 10.0、EPSS 0.32%（10/31）、KEV 掲載なし。勧告の公開は 10/28

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、修正コミットに基づきます。


## 出典
- [GitHub Advisory GHSA-m665-v7pm-7grj](https://github.com/advisories/GHSA-m665-v7pm-7grj) — GitHub
- [zip 9.0.5 リリース](https://github.com/zip-rs/zip2/releases/tag/v9.0.5) — GitHub
- [修正コミット 8068ab4](https://github.com/zip-rs/zip2/commit/8068ab480ccf8daa7411424e365fcdbe6d09443e) — GitHub
- [crates.io zip 9.0.5](https://crates.io/crates/zip/9.0.5) — crates.io
- [NVD CVE-2026-115905](https://nvd.nist.gov/vuln/detail/CVE-2026-115905) — NIST NVD
- [FIRST EPSS API](https://api.first.org/data/v1/epss?cve=CVE-2026-115905) — FIRST
- [CISA Known Exploited Vulnerabilities Catalog（JSON）](https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json) — CISA

---
出典: World Security（株式会社NTP） https://n-t-p.io/worldsecurity/articles/zip-crate-zip-cloaking-header-mismatch-9-0-5-2026-115905