Skip to content

zipWriter の自己防衛を足す(一時ファイルの symlink 追従・エントリ名の無検証) #103

Description

@kochizufan

軽量版セキュリティレビュー(2026-08-26、Critical 0 / Major 0 / Minor 2 / Info 6)で挙がった 2 件。いずれも非ブロッキングと判定済みだが、zipWriter を他の経路へ広げる前に塞いでおきたい。

MIN-1: 一時 zip の createWriteStream が symlink を追従する

electron/utils/zipWriter.ts:196${outDir}.zip を既定 flags 'w' で開く。Linux の共有 /tmp(AppImage)では staging 中(分単位)に別のローカルユーザーが symlink を先置きすると、任意ファイルを上書きできる余地がある。

macOS / Windows は per-user temp のため対象外。adm-zip 実装も同性質であり非退行である。

是正は flags: 'wx' の 1 箇所。

MIN-2: writeZipStreaming がエントリ名を無検証で埋め込む

実測(Node 24 + strip-types で直接呼び出し): ../../../../etc/evil.txt / 絶対パス / C:\Windows\... / NUL 混入名がすべて通過し、unzip が展開時に警告を出す zip が生成できた。

ただし現行の唯一の呼び出し元は listTileFiles の実在 dirent 名由来で、../ は構造上混入できない ∴ 悪用経路は無い

export された汎用関数であるため、将来の呼び出し元のためにガードを入れる

関連

読み取り側の同系統の問題(extract-zip CVE-2026-56876)は #99 に分離した。**中身は同じ「zip のパストラバーサル」**である。

出どころ

サイクル 2026-08-25-mapedit-export-zip-failure の carried_backlog(B7 / B8)。セキュリティレビュー記録: docs/superpowers/reviews/2026-08-25-mapedit-export-zip-failure-security-review.md

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugcarried-backlog那由多サイクル finalize の申し送り由来train:next次の月次トレインで出す(既定)。policy §4.3

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions