
CVE-2026-48095
7-Zip — это файловый архиватор с высокой степенью сжатия. Версии 26.00 и более ранние содержат уязвимость переполнения буфера в куче, вызванную недостаточным выделением памяти в буфере сжатого потока NTFS (неопределённое поведение сдвига в GetCuSize), что потенциально позволяет злоумышленникам выполнить произвольный код или вызвать сбой приложения. CInStream::GetCuSize() в обработчике NTFS вычисляет размер буфера единицы сжатия как (UInt32)1 << (BlockSizeLog + CompressionUnit), и специально сформированный образ с ClusterSizeLog >= 28 и CompressionUnit == 4 доводит показатель степени до 32, что является неопределённым поведением и на x86/x64 схлопывается, поэтому _inBuf выделяется размером в 1 байт. Затем ReadStream_FALSE записывает до 256 МБ управляемых злоумышленником данных в этот 1-байтовый буфер итерациями по 64 КБ, и поскольку объект CInStream находится всего в 304 байтах после _inBuf, его указатель на vtable перезаписывается, и при следующем диспетчеризуемом вызове происходит перехват vtable. В 32-битных сборках переполнение достигается безусловно; в 64-битных для этого необходимо, чтобы параллельное выделение 8 ГБ под _outBuf завершилось успешно, в противном случае происходит безопасный отказ, сводящийся к отказу в обслуживании. Обработчик NTFS включён по умолчанию в штатной 7z.dll и благодаря сигнатурному резервному сопоставлению "NTFS " по смещению 3 откроет специально сформированный образ независимо от расширения файла при извлечении или тестировании. Версия 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.