Обнаружено две различные уязвимости в интерпретации PNG изображений в Microsoft Windows. Первая уязвимость связанна с обработкой IDAT заголовка и не представляет большой угрозы. Вторая уязвимость может использоваться для выполнения произвольного кода при просмотре злонамеренного PNG изображения. Из-за сложности этих уязвимостей eEye решил подробно описать только последнюю.

Уязвимость искажения динамической памяти существует в пути, которым функция inflate_fast () в
pngfilt.dll обрабатывает данные во входящем потоке данных «deflate» в PNG изображении. Спецификация сжатия «deflate» использует копии образцов, которые присутствуют в сжатых данных. Это достигается
путем определения пар специальных кодов, которые сообщают подпрограмме декомпрессии информацию о промежуточном коде (distance code) и длине кода (length code). Подпрограмма inflate_fast() не в состоянии правильно обработать недопустимую длину кода (согласно спецификации), в результате, атакующий может переполнить стек и выполнить произвольный код, внедренный в кодированный «deflate» поток данных внутри PNG изображения.

Переполнение кучи, описанное выше происходит в
функции интерпретации сжатого блока,
который использует коды Хаффмана (BTYPE = 1). Длина кода #286 и #287, помеченная как недопустимая в программной спецификации (RFC 1951), не отвергается подпрограммой, и вместо этого обрабатывается как код нулевой длины. Однако из-за неправильной работы программы декомпрессии, счетчик длины уменьшиться до оценки цикла, в результате произойдет целочисленное переполнение буфера. В результате, наш образец циклически пройдет все доступное адресное пространство (4 Gb (0xFFFFFFFF) ), перезапишет на 32 КБ наш выходной буфер и выдаст ошибку доступа к памяти.

Уязвимость обнаружена в Internet Explorer 5.5-6.0 и устранена в патче MS02-066.



Оставить мнение