30.06.2022

Уязвимость в zlib, проявляющаяся при сжатии специально оформленных данных

В библиотеке zlib выявлена уязвимость (CVE-2018-25032), приводящая к переполнению буфера при попытке сжатия специально подготовленной последовательности символов во входящих данных. В текущем виде исследователями продемонстрирована возможность вызова аварийного завершения процесса. Может ли проблема иметь более серьёзные последствия ещё не изучено.

Уязвимость проявляется начиная с версии zlib 1.2.2.2 и затрагивает в том числе актуальный выпуск zlib 1.2.11. Примечательно, что патч с исправлением уязвимости был предложен ещё в 2018 году, но разработчики не обратили на него внимания и не выпустили корректирующий выпуск (библиотека zlib последний раз обновлялась в 2017 году). Исправление также пока не включено в состава пакетов, предлагаемых дистрибутивами. Проследить за публикацией исправлений дистрибутивами можно на данных страницах: Debian, RHEL, Fedora, SUSE, Ubuntu, Arch Linux, OpenBSD, FreeBSD, NetBSD. Библиотека zlib-ng проблеме не подвержена.

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

Уязвимость может быть эксплуатирована только при использовании стратегии сжатия на основе фиксированных кодов Хаффмана. Подобная стратегия выбирается при явном включении в коде опции Z_FIXED (пример последовательности, приводящей к краху при использовании опции Z_FIXED). Судя по коду стратегия Z_FIXED также может быть выбрана автоматически, если вычисленные для данных оптимальное и статическое деревья имеют одинаковый размер.

Пока не ясно, могут ли быть подобраны условия для эксплуатации уязвимости при использовании стратегии сжатия Z_DEFAULT_STRATEGY, применяемой по умолчанию. Если нет, то уязвимость ограничится отдельными специфичными системами, в которых явно применяется опция Z_FIXED. Если да, то ущерб от уязвимости может быть очень значительным, так как библиотека zlib является стандартом де-факто и применяется во многих популярных проектах, включая ядро Linux, OpenSSH, OpenSSL, apache httpd, libpng, FFmpeg, rsync, dpkg, rpm, Git, PostgreSQL, MySQL и т.д.

Источник.