New 7-Zip Vulnerabilities Let Attackers Execute Arbitrary Code and Compromise Systems
2026/05/26 CyberSecurityNews — 7-Zip version 26.00 に存在する深刻なヒープバッファ・オーバーフロー脆弱性が開示された。この脆弱性は、NTFS アーカイブ・ハンドラの欠陥に起因し、vtable ハイジャックを引き起こし、任意コード実行を可能にする。この脆弱性 CVE-2026-48095 (GHSL-2026-140) は、NtfsHandler.cpp 内の CInStream::GetCuSize() 関数に存在する。この関数は、NTFS 圧縮ユニットのバッファサイズを 32 ビットシフト演算で計算するものである:(UInt32)1 << (BlockSizeLog + CompressionUnit)

細工された NTFS イメージにおいて ClusterSizeLog >= 28 が設定され、圧縮データ属性に CompressionUnit == 4 が含まれる場合には、シフト指数は 32 に達し、C++ における未定義動作 (UB:Undefined Behavior) が発生する。x86 アーキテクチャでは、この UB によりシフトカウントがマスクされ、_inBuf として確保されるのは、わずか 1 バイトになってしまう。
直後の ReadStream_FALSE 呼び出しで使用される、この過小な 1 バイト・バッファに、最大で 256MB の攻撃者制御データが書き込まれる恐れがある。
ヒープ上のストリーム・オブジェクト CInStream は、 _inBuf の 304 バイト後方に配置されるため、最初の 64KB 読み込み処理でオブジェクトの vtable ポインタが上書きされる。
2 回目の処理では、破損した vtable を経由してディスパッチが行われる。これは、典型的な vtable ハイジャックの手法であり、攻撃者は細工された NTFS クラスタ内容を通じてポインタを完全に制御できる。
この脆弱性は 32-bit/64-bit ビルドの双方に影響を及ぼす。64-bit 環境で 16GB 以上のメモリがある場合には、_outBuf.Alloc(8 GB) が成功し、そのままオーバーフローに到達する。低メモリ環境では、この割り当てが失敗するため、影響は DoS に限定される。
この脆弱性が危険な点は、拡張子非依存の攻撃面にある。NTFS ハンドラは拡張子ではなくシグネチャベースで判定を行い、オフセット 3 の “NTFS ” シグネチャに一致するとフォールバック処理を実行する。
そのため、細工された NTFS イメージが .7z/.zip/.rar や、拡張子なしのファイルとして偽装されていても、拡張子ベースのハンドラが拒否した後に NTFS ハンドラが処理を実行するため、この脆弱性 CVE-2026-48095 がトリガーされる。攻撃の前提としてのユーザー操作は、当該ファイルを開くことのみとなる。
この脆弱性の CVSS 3.1 スコアは 8.8 (High) であり、ベクターは “AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H” であり、CWE-787 (Out-of-Bounds Write)/CWE-190 (Integer Overflow または Wraparound) に分類される。この脆弱性は、NTFS 圧縮ストリーム対応が導入された当初から存在しており、7-Zip バージョン 26.00 以下が影響を受ける。
この脆弱性は GitHub Security Lab の Jaroslav Lobačevski (@JarLob) により発見され、責任ある開示が行われた。Linux x64 環境において Clang の UBSan (UndefinedBehaviorSanitizer) により検証され、NtfsHandler.cpp:687 におけるシフトの未定義動作と、それに続く vtable の不正参照による SIGSEGV が確認されている。
ユーザーにとって必要なことは、パッチ適用済みバージョン 26.01 への速やかな更新である。また、修正が適用されるまでの間は、信頼できないアーカイブ・ファイルやディスク・イメージを開かないことが推奨される。
訳者後書:7-Zip の脆弱性 CVE-2026-48095 は、 NTFS アーカイブを処理する際のシフト演算の不備に起因するものです。 圧縮ユニットのバッファサイズを計算するプログラムの処理において、特定の条件下で 32 ビットのシフト数が上限を超えてしまうミスがありました。これにより、確保されるバッファがわずか 1 バイトという過小なサイズになり、そこへ大量のデータが読み込まれることでヒープバッファ・オーバーフローが発生します。その結果、メモリ上の重要なポインタが書き換えられ、任意のコード実行を招く恐れがあります。ご利用のチームは、ご注意ください。よろしければ、7-Zip での検索結果も、ご参照ください。
You must be logged in to post a comment.