В Библиотеке сжатия cabinet.dll и в утилите makecab.exe обнаружена уязвимость.
Во время сжатия файла с любым именем и содержимым
nmake run (одна строка без энтеров в конце, файл размером ровно в 9 байтов)
с использованием метода сжатия LZX, происходит исключение и завершение приложения, попытка чтения памяти которой нет в образе процесса.
Падает на инструкции cmp, там в цикле сканируется память по байтам,
ищут байт 0xE8, причём никак не проверяют границы памяти, байт не находят и вылезают за конец доступной страницы памяти, следующая страница не доступна и происходит попытка читать из неё.
Пример использования:
makecab /F script.txt
в той же директории лежат файлы script.txt и run.bat.
-----------------
script.txt такой:
.Set CompressionType=LZX
run.bat
-----------------
run.bat такой:
nmake run
-----------------
(9 байтов, без энтеров)
Результат:
Microsoft (R) Cabinet Maker - Version 5.1.2600.0
Copyright (c) Microsoft Corporation. All rights reserved..
Parsing directives
Parsing directives (script.txt: 1 lines)
9 bytes in 1 files
Executing directives
0.00% - run.bat (1 of 1)
100.00% - run.bat (1 of 1)
Архив не создаётся и тут сразу вылезает страшное окно с текстом:
Microsoft Cabinet Maker has encountered a problem and needs to close. We are sorry for the inconvenience.
...
Ошибка так же может быть вызвана программно с использованием функций из cabinet.dll !