GitHub Security Labは、7-Zip 26.00にヒープバッファーオーバーフロー脆弱性「CVE-2026-48095」が存在すると公表した。NTFS処理の不正なシフト演算で1バイト領域へ最大256MBを書き込み、任意コード実行やクラッシュを招く恐れがある。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
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の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)に至る流れも観測された。
イラン vs. 米国・イスラエル 現実味を増す“サイバー報復”の連鎖【動画あり】
「EDR無効化」「暗号化はしない」 2026年のランサムウェアに起きた変化
5週間で340超の企業が被害に Microsoft 365のアクセスを奪う新型フィッシングに注意
GitHubを“VS Codeの人気拡張機能”が侵害 約3800件の内部リポジトリ流出
ITコストが爆増する“低品質キッティング”の特徴 あるべき姿を考えるCopyright © ITmedia, Inc. All Rights Reserved.