Недавно вышла новость об уязвимости в библиотеке zlib уже внесен в каталог под CVE-2018-25032, который вызывает переполнение буфера при попытке сжатия специально подготовленной последовательности символов во входящих данных.
В нынешнем виде, исследователи продемонстрировали возможность вызова аномального окончания процесса, поэтому еще не изучено, может ли проблема иметь более серьезные последствия.
Отмечается, что уязвимость он проявляется начиная с zlib 1.2.2.2 и влияет на текущую версию zlib 1.2.11. Примечательно, что патч, исправляющий уязвимость, был предложен еще в 2018 году, но разработчики не обратили на него внимания и не выпустили исправляющую версию (последнее обновление библиотеки zlib произошло в 2017 году).
Об этой ошибке сообщил Данило Рамос из Eideticom, Inc. он был на охоте в течение 13 лет, прежде чем его нашли! Ошибка была введена в zlib 1.2.2.2 с добавлением опции Z_FIXED. Опция заставляет использовать фиксированные коды Хаффмана. Для редких записей с
много далеких совпадений, ожидающий буфер в котором сжатые данные могут быть перезаписаны. Это приводит к повреждению вывода из-за недопустимые расстояния, что может привести к доступу за границу, сбой приложения.
Уязвимость проявляется, если входной поток содержит большое количество совпадений упаковать, к чему упаковка применяется на основе кодов Хаффмана фиксированный. При определенных обстоятельствах содержимое промежуточного буфера, в который помещается сжатый результат, может перекрываться с памятью, в которой хранится таблица символьных частот. В результате наблюдается формирование некорректных сжатых данных и сбой из-за записи за границу буфера.
Уязвимость его можно использовать только с помощью стратегии сжатия, основанной на фиксированных кодах Хаффмана. Аналогичная стратегия выбирается, когда опция Z_FIXED явно включена в код (пример последовательности, вызывающей сбой при использовании опции Z_FIXED). Судя по коду, стратегия Z_FIXED также может быть выбрана автоматически, если оптимальное и статическое деревья, рассчитанные для данных, имеют одинаковый размер.
Решение здесь объединяет буфер расстояния и литерал/длину буферов в один буфер символов. Теперь три байта dбуферное пространство открывается для каждого литерала или длины/расстояния потребляемая пара, вместо двух предыдущих байтов это обеспечивает
что ожидающий буфер не может перезаписать таблицу символов, поскольку максимальная длина/расстояние сжатого фиксированного кода составляет 31 бит, и так как на каждые три байта приходится четыре байта свободного места пространства символов.
Пока неясно, могут ли условия эксплуатации уязвимости соответствовать стратегии сжатия Z_DEFAULT_STRATEGY, которая применяется по умолчанию.
В противном случае уязвимость будет ограничена определенными конкретными системами, где опция Z_FIXED явно применяется. Если это так, то ущерб от уязвимости может быть очень значительным, так как библиотека zlib является стандартом де-факто и используется во многих популярных проектах, включая ядро Linux, OpenSSH, OpenSSL, apache httpd, libpng, FFmpeg, rsync, dpkg. , rpm, Git, PostgreSQL, MySQL и т. д.
Также упоминается, что выбранные параметры, при которых проявляется уязвимость при выборе стратегии сжатия по умолчанию Z_DEFAULT_STRATEGY. В реальных условиях, атака по-прежнему считается маловероятной, так как эксплуатация с использованием обнаруженной последовательности требует установки параметра memLevel в 1, а уровень 8 выбран по умолчанию.
Пример последовательности блокировки при вызове "deflateInit2(&strm, 7, Z_DEFLATED, 15, 1, Z_DEFAULT_STRATEGY)" (level=7, windowBits=15, memLevel=1).
В конце концов следует отметить, что решение также не включено все еще в пакетах, предлагаемых дистрибутивами, поэтому вы можете отслеживать выпуск исправлений дистрибутивами на этих страницах: Debian, RHEL, Fedora, SUSE, Ubuntu, Arch Linux, OpenBSD FreeBSD, NetBSD, плюс проблема не затрагивает библиотеку zlib-ng.
Если вам интересно узнать об этом больше, вы можете ознакомиться с подробностями По следующей ссылке.
Будьте первым, чтобы комментировать