7-Zipにヒープ破壊を引き起こす深刻な脆弱性 急ぎ対処を人気ファイル圧縮・解凍ソフトに穴

GitHub Security Labは、7-Zip 26.00にヒープバッファーオーバーフロー脆弱性「CVE-2026-48095」が存在すると公表した。NTFS処理の不正なシフト演算で1バイト領域へ最大256MBを書き込み、任意コード実行やクラッシュを招く恐れがある。

» 2026年05月28日 07時30分 公開
[@IT]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

 GitHub Security Labは2026年5月22日(米国時間、以下同)、「7-Zip 26.00」にヒープバッファーオーバーフロー脆弱(ぜいじゃく)性「GHSL-2026-140」が存在すると公表した。

 同脆弱性には「CVE-2026-48095」が割り当てられており、細工されたNTFSイメージを開いた場合、任意コード実行やアプリケーションクラッシュに発展する可能性がある。GitHub Security Labは2026年4月24日にこれを報告し、7-Zip側は同年4月27日に修正版となるv26.01を公開した。

7-Zipにヒープバッファーオーバーフロー脆弱性 問題の真因は?

 今回の問題は7-ZipのNTFSアーカイブ処理に存在する。脆弱性は、NTFS圧縮ストリーム用バッファーサイズを計算する「CInStream::GetCuSize()」の処理に起因する。対象コードでは「(UInt32)1 <<(BlockSizeLog + CompressionUnit)」という32bit整数のシフト演算を実行している。攻撃者が細工したNTFSイメージで「ClusterSizeLog >= 28」と「CompressionUnit == 4」を設定した場合、シフト量が32に達する。C++では型幅以上のシフトが未定義動作となるため、x86とx64環境では1バイトの領域しか確保されないケースが確認された。

 その後の処理において、圧縮データを読み込む「ReadStream_FALSE」が最大256MBの攻撃者制御データを書き込む。結果として、極端に小さいヒープ領域に大量のデータが流入し、ヒープバッファーオーバーフローが発生する。GitHub Security Labは、この挙動がvtable hijack(仮想関数テーブル乗っ取り)という攻撃手法につながる可能性を指摘した。デバッガー解析において、ストリームオブジェクトがヒープ上でオーバーフロー対象の近傍に配置されており、最初の書き込みだけでvtableポインターを書き換えられる状況が確認されたという。

 NTFSブートセクタパーサーにおいて、クラスタサイズとして最大2の30乗バイトまで受け入れる仕様になっている。圧縮属性ヘッダ内の「CompressionUnit == 4」も許可されていた。脆弱性を誘発する条件は、この組み合わせで成立する。

 同脆弱性は、32bit版と64bit版の双方が影響を受ける。32bit環境において、入力用バッファーと出力用バッファーの双方が極端に小さいサイズで確保されるため、オーバーフローに直結する。64bit環境において、出力用バッファー確保時に8GBを要求する。メモリ容量が十分なシステムでは割り当てが成功し、その後に同様のオーバーフローが発生する。メモリ不足環境では割り当て失敗によってDoS(Denial of Service)にとどまる可能性がある。

 GitHub Security Labによれば、NTFSハンドラーは標準の「7z.dll」に含まれており、「.ntfs」や「.img」拡張子に対応する。しかし、7-Zipは拡張子判定に失敗した場合、署名ベースの検出にフォールバックする仕様を備える。NTFSハンドラーはオフセット3バイト目の「NTFS 」シグネチャを参照するため、「.7z」「.zip」「.rar」など別形式の拡張子を付与したファイルでもNTFSイメージとして認識される可能性がある。GitHub Security Labは、攻撃対象がNTFS関連拡張子に限定されない点を問題視した。

 脆弱性は、細工されたイメージ内に含まれる圧縮ファイルの展開やテスト時に発動する。ユーザー操作は悪意あるイメージを開く程度で成立すると説明している。CVSS v3.1基本値は「8.8」で、深刻度は「High」と評価された。

 影響範囲についてGitHub Security Labは、NTFS圧縮ストリーム処理が導入された時点以降の全バージョンが対象であり、26.00まで影響を受けると説明した。脆弱性分類では「CWE-787: Out-of-bounds Write」と「CWE-190: Integer Overflow or Wraparound」を挙げている。

 公開資料には、脆弱性検証用PoC(概念実証)生成コードも含まれる。PoCにおいて、クラスタサイズを256MBに設定したNTFSイメージを手作業で構築し、圧縮属性やMFTレコードを細かく調整して問題を再現する。既存NTFSフォーマットツールが64KB超のクラスタサイズに対応していないため、MFT構造やUSN fixup arrays、属性レコードを個別に生成したという。

 検証では「UBSAN」(Undefined Behaviour Sanitiser)を利用し、「shift exponent 32 is too large for 32-bit type」という未定義動作警告を確認した。その後、無効な「vptr」を持つオブジェクトにメンバー呼び出しが発生し、SEGV(Segmentation Violation)に至る流れも観測された。

Copyright © ITmedia, Inc. All Rights Reserved.

アイティメディアからのお知らせ

スポンサーからのお知らせPR

注目のテーマ

その「AIコーディング」は本当に必要か?
Microsoft & Windows最前線2026
4AI by @IT - AIを作り、動かし、守り、生かす
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。