A Better Zip Bomb

2025/12/20 6:34

A Better Zip Bomb

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

## Summary  
本稿は、単一の DEFLATE カーネル内で多数のファイルを重ね合わせることで 28 百万倍(例:10 MB → 281 TB)以上の圧縮率を実現する非再帰的「zip ボム」を提示しています。構築方法は次の二種類です。

* **Full overlap** – 圧縮率を最大化しますが、非常に寛容な ZIP パーサーでのみ動作します。
* **Quoted‑overlap** – 非圧縮ブロック内でローカルファイルヘッダーを引用し、若干低い比率でも広範囲の互換性を提供します。

著者は最適なカーネルサイズ(≈ zip サイズの ½;例:42 kB のボムは約 250 ファイルを含み、約 129 000 倍の圧縮)に関する式を示し、Zip64 拡張がヘッダーサイズを増加させる(46→58 バイト、30→50 バイト)ことから、最大 46 MB のボムでも約 4.5 PB に達できる(`zbxl.zip`)と論じています。ソースコードは https://www.bamsoftware.com/git/zipbomb.git で入手可能であり、図表は https://www.bamsoftware.com/git/zipbomb-paper.git にあります。

**互換性評価** – 本稿では、Info‑ZIP UnZip、Python zipfile、Go archive/zip、Node yauzl、Nailexamples/zip、Android libziparchive、sunzip など多くの ZIP ライブラリをテストし、DEFLATE、Zip64、bzip2、CRC‑32 処理、短いファイルサイズ、および最大ファイル数への対応状況を評価しています。実際のボムファイル(`zbsm.zip`、`zblg.zip`、`zbxl.zip`)を引用し、LibreOffice(4 GB の一時ファイル)、Mozilla のアドオンサーバー(110 秒抽出制限)、Windows Defender、Explorer、7‑zip、複数の AV エンジン、ブラウザ(Chrome/Safari 自動解凍)、圧縮ファイルシステム(ZFS)への影響を示しています。

**検知と対策** – Mark Adler の CVE‑2019‑13232 パッチは UnZip で重複ファイルを検出します。著者はパターンマッチングだけに頼らず、ZIP パーサーを厳格な時間・メモリ・ディスク制限付きのサンドボックスで実行することを推奨しています。AV 署名とブラウザの Safe Browsing の更新も、新しい変種が登場した際に期待されます。

**影響** – ユーザーはボムを開く際に高い CPU 使用率や大きな一時ファイルを経験する可能性があります。企業はライブラリをパッチし、セキュリティツールを更新し、サンドボックス化を徹底して悪用リスクを軽減すべきです。

本文

デイビッド・フィファイル
david@bamsoftware.com


2019‑07‑02

更新日:2019‑07‑03, 05, 06, 08, 18, 20, 22, 24; 2019‑08‑05, 19, 22; 2019‑10‑14, 18, 30, 11‑28;
2020‑07‑28; 2021‑01‑21, 02; 2021‑05‑03, 07‑29; 2023‑05‑18


概要

この記事では、zip コンテナ内でファイルを重複させることで非常に高い圧縮率を実現する 非再帰的 zip ボム の構築方法について説明します。

  • 「非再帰的」とは、ネストされた zip を再帰的に展開するデコンプレッサーの仕組みに依存せず、1 回の解凍で完全に展開されることを意味します。
  • 出力サイズは入力サイズと二次関数的に増加し、zip 形式の限界では圧縮率が 2800 万倍(10 MB → 281 TB)まで達します。
  • Zip64 拡張機能を使えばさらに大きな展開も可能です。
  • DEFLATE のみを使用しているため、ほとんどの zip パーサーとの互換性が保証されます。

ソースコード

git clone https://www.bamsoftware.com/git/zipbomb.git
# 例示バイナリ:
zipbomb-20210121.zip

# 図表データとソース:
git clone https://www.bamsoftware.com/git/zipbomb-paper.git

プレゼンテーションビデオ – @m1rko によるロシア語字幕、北岸冷若冰霜による中国語字幕。


42 ZIP バリアント

バージョンサイズ (bytes)
古いバージョン42 374
新しいバージョン42 838 (パスワード保護済み)

本記事では古いバージョンのみを対象に比較しています。
ダウンロード:42.zip


圧縮率表

タイプZip サイズUnzip サイズRatioUnzip サイズRatio
Cox quine4404401.0
Ellingsen quine28 80942 5691.5
42.zip (旧)42 374558 43213.24 507 981 343 026 016106 billion
当社手法42 3745 461 307 620129 k5 461 307 620129 k
当社手法9 893 525281 395 456 244 93428 million281 395 456 244 93428 million
Zip64 バリアント45 876 9524 507 981 427 706 45998 million4 507 981 427 706 45998 million

キー概念

  1. 重複ファイル – 単一の圧縮「カーネル」を多くのファイルエントリで再利用し、各ファイルごとのオーバヘッドを削減します。
  2. ローカルファイルヘッダーの引用 – ヘッダー文字列自体を非圧縮 DEFLATE ブロックとして埋め込み、各ファイルに独自ヘッダーを持たせつつカーネルを共有可能にします。
  3. 二次成長 – 追加されるファイルごとに 47 バイトの中央ディレクトリヘッダー(+5 バイトの引用ブロック)だけがコピーされるため、出力サイズはファイル数 (N) の二乗に比例します。

最適化モデル

定義

  • (X):zip ファイルサイズ
  • (N):ファイル数
  • CDH=46 バイト、LFH=30 バイト、Q=5 バイト(引用ブロック)
  • (C \approx 1032) (最大 DEFLATE 比率)

ヘッダーオーバーヘッド:
( H(N)=N(CDH+LFH)+(N-1)Q )

カーネルサイズ:( X-H(N) )

解凍後サイズ:
( S_X(N)=C,N,(X-H(N)) )

最大化すると

[ N_{\text{opt}}=\frac{X+Q}{2(CDH+LFH+Q)} ]

この点でヘッダーオーバーヘッドは約 (X/2) になり、解凍後サイズは (X) に対して二次的に増加します。


実際の例

Zip サイズUnzip サイズRatio
42 kB (zbsm.zip)5.46 GB129 k
10 MB (zblg.zip)281 TB28 million
46 MB (Zip64, zbxl.zip)4.5 PB

ツールで生成する例:

zipbomb --mode=quoted_overlap \
        --num-files=250 \
        --compressed-size=21179   > zbsm.zip

zipbomb --mode=quoted_overlap \
        --num-files=65534 \
        --max-uncompressed-size=4292788525  > zblg.zip

zipbomb --mode=quoted_overlap \
        --num-files=190023 \
        --compressed-size=22982788 \
        --zip64   > zbxl.zip

CRC‑32 の計算

CRC‑32 は 33×33 の二進行列として表現でき、同じバイトを繰り返し適用する際に高速指数演算が可能です。
カーネルのチェックサムはゼロベクトルとマトリクス (M_{\text{kernel}}) を掛け合わせて得られます。
各ファイルの前でローカルヘッダー行列を先頭に追加し、累積的に更新します。


拡張機能

機能効果
Zip64ヘッダーサイズが 46→58 バイト、30→50 バイトへ拡大。実質的なサイズ制限を除去し、圧縮率はゆっくり増加するものの解凍後サイズは 281 TB を超える可能性があります。
bzip2最大比率 ≈ 1.4 百万。非圧縮ブロックがないため重複は不可で、非常に小さいファイルしか有効ではありません。

互換性表(代表的パーサー)

機能Info‑ZIP UnZipPython zipfileGo archive/zipYauzl (Node.js)libzip
DEFLATE
Zip64
bzip2
ファイル名不一致(警告)
CRC‑32 不正(警告)ゼロ時に警告
ファイルサイズ不足
最大 2^32−1 バイト
最大 2^16−1 ファイル数

Quoted‑overlap ボムは中央ディレクトリを先に読むパーサーではすべて正しく解凍できます。ストリーミングパーサー(例:sunzip)は最初のファイルだけを抽出するかエラーになる場合があります。


実務上の注意

  • 検知 – ファイル名の重複はローカルヘッダーと中央ディレクトリの名前を比較して検出できます。
  • サンドボックス化 – 信頼できないアーカイブを解凍する際は、必ず時間・メモリ・ディスク使用量を制限してください。
  • ブラウザ挙動 – Chrome や Safari はダウンロード後自動で unzip します。「ダウンロード後に安全なファイルを開く」設定を無効化することを検討してください。
  • ファイルシステムへの影響 – 圧縮済みや重複排除されたファイルシステムでは実際の膨張量は小さくなる場合がありますが、依然として大きな拡張になります。

クレジット

Mark Adler、Blake Burkhart、Gynvael Coldwind、Russ Cox、Brandon Enright、Joran Dirk Greef、Marek Majkowski、Josh Wolfe、USENIX WOOT 2019 レビューアー、Caolán McNamara(LibreOffice)、@m1rko(ロシア語翻訳)、北岸冷若冰霜(中国語翻訳)に感謝します。

ソースコードと実験データは元論文リポジトリで入手可能です。

同じ日のほかのニュース

一覧に戻る →

2025/12/20 7:13

CSS Grid Lanes

## Japanese Translation: > **Safari Technology Preview 234 は CSS Grid Lanes を導入しました**。これは、開発者が JavaScript なしで CSS 内で直接モザイク風グリッドを構築できる新しいレイアウトモードです。 > > 開発者は `display: grid-lanes;` と標準の Grid 構文(`grid-template-columns`、`repeat(auto-fill, …)` など)を組み合わせて柔軟なレーンを作成します。アイテムは自動的に最も近い上部レーンに配置され、無限スクロールとタブフレンドリーなナビゲーションが可能になります。 > > **高度な機能** には、レーンサイズの変更(`minmax(8rem, 1fr) minmax(16rem, 2fr)`)、アイテムの跨ぎ(`grid-column: span N`)、明示的配置(`grid-column: -3 / -1`)および新しい `item-tolerance` プロパティ(デフォルトは `1em`)が含まれます。これは、サイズ差に基づいてアイテムがレーンをどれだけ積極的にシフトするかを制御します。レーンは列方向(「ウォーターフォール」)または行方向(「レンガレイアウト」)で向きを設定でき、デフォルトの流れは通常です。 > > 実装は 2022 年中頃に開始され、Safari TP 234 で利用可能です。ライブデモは <https://webkit.org/demos/grid3>(写真ギャラリー、ニュースレイアウト、博物館サイト、メガメニューフッター)でホストされています。CSS Working Group はまだプロパティ名と向きの構文(`grid-lanes-direction` か `grid-auto-flow` の再利用)を最終化中です。その決定が下り次第、この機能は本番環境で使用できるようになります。 > > 開発者にとって、これは追加の JavaScript を必要とせず、より高速でパフォーマンスの高いレスポンシブレイアウトを実現することを意味し、ブラウザベンダーは同様の機能を採用する可能性があり、将来のウェブデザイン標準に影響を与えるでしょう。

2025/12/19 0:01

Mistral OCR 3

## Japanese Translation: Mistral OCR 3 は、従来のエンタープライズツールと AI ネイティブ競合他社の両方を上回る高精度な OCR モデルです。フォーム、スキャン文書、複雑な表、および手書き文字に対して Mistral OCR 2 と比較し、全体で 74 % の勝率を達成します。このモデルは、1,000 ページあたり $2(50 % Batch‑API 割引適用で 1,000 ページあたり $1)と価格設定されており、シンプルな API または Mistral AI Studio のドラッグ&ドロップ Document AI Playground を通じてアクセスできます。 主な強みは次のとおりです: * **手書き文字サポート** – 連続体文字、混合内容、および印刷フォーム上の手書き文字。 * **フォーム処理** – 請求書、領収書、コンプライアンスフォーム、政府文書におけるボックス、ラベル、手書き入力、および密集レイアウトの検出を改善。 * **頑健性** – 圧縮アーティファクト、傾斜、歪み、低 DPI、背景ノイズ、複雑なレイアウトに対処。 * **表再構築** – ヘッダー、結合セル、多行ブロック、および列階層を完全にサポートし、colspan/rowspan を含む HTML テーブルタグ付きの拡張マークダウンを出力。 初期採用者はすでに Mistral OCR 3 を高ボリュームのエンタープライズパイプラインに統合しています:請求書を構造化フィールドへ変換、会社アーカイブのデジタル化、技術レポートからクリーンテキストを抽出、および企業検索の強化。精度、コスト効果、柔軟な展開の組み合わせにより、大規模文書処理を業界横断で変革できる競争力ある代替手段として位置づけられています。

2025/12/20 8:59

PBS News Hour West to go dark after ASU discontinues contract

## Japanese Translation: ## Summary アリゾナ州立大学(ASU)のウォルター・クロンスキー報道学部は、PBS NewsHour Westとのパートナーシップを更新しないことを決定し、2019 年から ASU のダウンタウンフェニックスキャンパスで運営されていた事務所を実質的に閉鎖しました。この動きは「ASUの優先事項の変更」に起因すると、News Hour Productions の GM 兼 WETA EVP/CCO のマイケル・ランチリオが述べました。PBS およびアリゾナ PBS は追加説明を行わず、ASU に感謝し、地域ニュースへの継続的な取り組みを約束しました。 閉鎖により、西海岸で 20 % 以上の視聴者に到達することを支援していた西部本部としての事務所の役割が終了します。また、ASU のジャーナリズム学生(例:AJ Ceglia 学長)に実地報道経験と就職機会を提供していたインターンシッププログラムも消滅します。現在のインターンは学術クレジットを受け取りますが、卒業要件を満たすために代替配置を探す必要があります。 PBS NewsHour West の最終全国放送は 12 月 19 日に行われます。クロンスキー建物は、事務所閉鎖前に学校のサポートを称える形で夜間放送に登場しました。この報道は *The State Press* のジュニアレポーター、エマ・ブラッドフォード(連絡先:elbradfo@asu.edu; X @emmalbradford)によって取り上げられました。彼女も ASU のジャーナリズム/メディアコミュニケーション学部の学生です。 この決定は、西米国における地域ニュースの報道を減少させ、PBS の視聴者エンゲージメントを低下させ、新進気鋭のジャーナリストのプロフェッショナルパスウェイを制限する可能性があります