
7-Zip は高圧縮率のファイルアーカイバです。バージョン 26.00 およびそれ以前には、NTFS 圧縮ストリームバッファ(GetCuSize shift UB)の過小割り当てに起因するヒープバッファオーバーフローの脆弱性が存在し、攻撃者が任意のコード実行やアプリケーションクラッシュを引き起こす可能性があります。
NTFS ハンドラの CInStream::GetCuSize() は、圧縮ユニットバッファサイズを (UInt32)1 << (BlockSizeLog + CompressionUnit) として計算します。ClusterSizeLog >= 28 かつ CompressionUnit == 4 の細工されたイメージでは、指数が 32 になり、これは未定義動作であり、x86/x64 では崩壊するため、_inBuf は 1 バイトとして割り当てられます。その後、ReadStream_FALSE は 64KB の反復で最大 256 MB の攻撃者制御データをその 1 バイトバッファに書き込みます。CInStream オブジェクトは _inBuf のわずか 304 バイト後に位置するため、その vtable ポインタが上書きされ、次のディスパッチ呼び出しで vtable ハイジャックが達成されます。32 ビットビルドではオーバーフローは無条件に到達します。64 ビットでは、並行する 8 GB の _outBuf 割り当てが成功する必要があり、失敗した場合はサービス拒否に陥ります。
NTFS ハンドラは標準の 7z.dll でデフォルトで有効になっており、署名ベースのフォールバックによりオフセット 3 の "NTFS " に一致するため、抽出またはテスト中にファイル拡張子に関係なく細工されたイメージが開かれます。バージョン 26.01 で問題は修正されました。
このプロジェクトは、以下のような安全で許可された環境でのみ使用してください。
セットアップ例:
git clone <repository-url>
cd <repository-name>
使用例:
# Install dependencies
# Run the project
python cve-2026-48095.py
# Specify output file name
python cve-2026-48095.py poc_ntfs_sparse.zip
管理された環境でサイバーセキュリティの概念を学習、テスト、研究するためのリポジトリです。
このリポジトリは教育および許可されたセキュリティ研究のみを目的としています。
以下の点を学ぶために設計されています。
以下のような許可を得た環境でのみこのリポジトリを使用してください。
許可されていない、または違法な使用は固く禁じられています。
作者および貢献者は、このプロジェクトによって引き起こされたいかなる損害、誤用、法的問題、損失についても責任を負いません。
このリポジトリを使用することにより、以下のことに同意したものとみなされます。
このプロジェクトは以下を目的としています。
責任ある開示の慣行に従い、該当するすべての法律を遵守してください。
責任ある開示やコラボレーションについては、GitHub を通じてリポジトリメンテナーにお問い合わせください。