zlib 1.4: 14 уязвимостей закрыто, критическую CVE-2026-4738 сочли переоценённой
Вышла библиотека zlib 1.4: закрыто 14 уязвимостей, включая переполнение буфера в gzwrite() и запись до 8 МБ за пределы буфера в inflateGetDictionary(). Часть изменений ломает совместимость — статически слинкованные сборки придётся пересобрать.
Что случилось
Вышел zlib 1.4 — первое крупное обновление библиотеки сжатия после версии 1.3.2. В выпуске закрыто 14 уязвимостей, а изменения в поведении затрагивают сборку и приложения, которые годами полагались на прежние побочные эффекты.
Детали
Одной из проблем присвоен критический уровень: CVE-2026-4738 — выход за границы при работе с указателями в contrib/infback9. В сопроводительных заметках автор библиотеки Марк Адлер отмечает, что оценка завышена: указатели возвращаются в допустимые границы до использования, ни один известный компилятор не ломает этот код, но на оборудовании с контролем возможностей вроде CHERI срабатывание возможно.
- CVE-2026-85091 — переполнение буфера в gzwrite() при неблокирующем режиме;
- inflateGetDictionary() мог записать до 8 МБ за пределы переданного буфера в 32 КБ; проблема есть в 1.3.1 и 1.3.2;
- inflateSync() до определения размера окна выделял окно в один байт, которое затем переполнялось;
- inflatePrime() мог заставить inflate() читать данные до начала входного буфера;
- повторные вызовы deflatePrime() писали за границу pending-буфера;
- inflateBack() не распознавал слишком далёкие расстояния и копировал в вывод неинициализированную память;
- в minizip закрыты двойное освобождение в block_central_name(), разыменование NULL в zipAlreadyThere(), чтение значений Zip64 вне extra-поля и создание каталогов вне каталога распаковки, а на Windows — запись файлов в произвольное место.
Значительная часть находок помечена идентификаторами TOB-ZLIB — это результаты аудита, который проводила Trail of Bits. Часть проблем нашли сторонние исследователи; ошибку в gzseek(), например, обнаружила модель Claude Opus 5.5. Ошибки в miniunz, связанные с путями, давно известны как класс: распаковка архива из ненадёжного источника и раньше была способом выйти за пределы каталога.
Изменения совместимости: минимальная версия CMake поднята до 3.15, на MSVC библиотеки переименованы в libz, z_off_t снова long, deflateReset() теперь действительно сбрасывает gzip-заголовок, raw deflate на границе выходного буфера возвращает Z_STREAM_END, а gzopen() с флагом x на платформах без O_EXCL завершается ошибкой вместо усечения файла.
Что это значит
zlib лежит в основе gzip, PNG, HTTP-сжатия, почтовых серверов, СУБД и половины системных утилит, поэтому формально локальная уязвимость превращается в сетевую там, где данные из сети распаковываются автоматически. Обновлять стоит не только сам пакет: статически слинкованные сборки нужно пересобрать, иначе внутри них останется старая копия. При обновлении в дистрибутиве имеет смысл прочитать список изменений ABI — часть приложений, собранных под 1.3.2, потребует пересборки из-за возврата z_off_t к long.
Комментарии 0
Комментариев пока нет — будьте первым.
Оставить комментарий
Имя и текст — этого достаточно. Комментарий появится сразу; подозрительные сообщения уходят на проверку.