Security Lab

Двойное освобождение памяти в zlib

Дата публикации:13.03.2002
Всего просмотров:1513
Опасность:
Наличие исправления:
Количество уязвимостей:1
CVE ID: Нет данных
Вектор эксплуатации:
Воздействие:
CWE ID: Нет данных
Наличие эксплоита: Нет данных
Уязвимые продукты:
Описание: Найдена ошибка в библиотеке сжатия zlib, которая может проявляться как уязвимость в программах, использующих zlib. Уязвимость позволяет нападающему вызывать отказ в обслуживании, собирать информацию, или выполнять произвольный код.

Уязвимость найдена в алгоритме декомпрессии, используемом zlib. Если атакующий сможет передавать специально обработанный блок недопустимых сжатых данных к программе, которая использует zlib, попытка программы декомпрессировать обработанные данные может заставить подпрограммы zlib разрушать внутренние структуры данных, обслуживаемые malloc.

Ошибка связанна с ошибкой программирования, которая позволяет сегментам динамически распределенной памяти освобождаться более одного раза (то есть, " double-freed "). Когда функция inftrees.c:huft_build() принимает обработанные данные, она возвращает неожиданный Z_MEM_ERROR к inftrees.c:inflate_trees_dynamic(). Когда последующий запрос сделан к infblock.c:inflate_blocks(), функция inflate_blocks попытается освободить данные второй раз.

Поскольку эта ошибка нарушает правильное распределение и освобождение динамической памяти, она позволяет нападающим воздействовать на операции программ, которые используют zlib. В большинстве случаях, это воздействие будет ограничено отказом в обслуживании или утечкой информации, но это теоретически возможно вставить произвольный код в выполняемую программу. Этот код был бы выполнен с разрешениями уязвимой программы.

На сегодняшний день нет информации об успешной эксплуатации этой ошибки. Не известно, возможно ли вообще, каким либо образом использовать этот дефект.

Ошибка затрагивает все программы, которые используют библиотеку zlib