В Библиотеке сжатия 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 !

Подписаться
Уведомить о
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии