Suicide
29.03.2022, 00:56
В библиотеке zlib выявлена (https://www.openwall.com/lists/oss-security/2022/03/26/1) уязвимость (https://github.com/madler/zlib/issues/605) (CVE-2018-25032 (https://security-tracker.debian.org/tracker/CVE-2018-25032)), приводящая к переполнению буфера при попытке сжатия специально подготовленной последовательности символов во входящих данных. В текущем виде исследователями продемонстрирована возможность вызова аварийного завершения процесса. Может ли проблема иметь более серьёзные последствия ещё не изучено.
Уязвимость проявляется начиная с версии zlib 1.2.2.2 и затрагивает в том числе актуальный выпуск zlib 1.2.11. Примечательно, что патч с исправлением уязвимости был предложен (https://github.com/madler/zlib/commit/5c44459c3b28a9bd3283aaceab7c615f8020c531) ещё в 2018 году, но разработчики не обратили на него внимания и не выпустили корректирующий выпуск (библиотека zlib последний раз обновлялась в 2017 году). Исправление также пока не включено в состава пакетов, предлагаемых дистрибутивами. Проследить за публикацией исправлений дистрибутивами можно на данных страницах: Debian (https://security-tracker.debian.org/tracker/CVE-2018-25032), RHEL (https://bugzilla.redhat.com/show_bug.cgi?id=2067945), Fedora (https://bugzilla.redhat.com/show_bug.cgi?id=2068066), SUSE (https://bugzilla.suse.com/show_bug.cgi?id=CVE-2018-25032), Ubuntu (https://ubuntu.com/security/CVE-2018-25032), Arch Linux (https://security.archlinux.org/), OpenBSD (https://ftp.openbsd.org/pub/OpenBSD/patches/7.0/common/), FreeBSD (http://www.freebsd.org/security/advisories.html), NetBSD (http://www.netbsd.org/support/security/). Библиотека zlib-ng проблеме не подвержена (https://github.com/zlib-ng/zlib-ng/pull/1208).
Уязвимость проявляется если во входном потоке встречается большое число подлежащих упаковке совпадений, к которым применяется упаковка на основе фиксированных кодов Хаффмана (https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%B4_%D0%A5%D0%B0%D1%84%D1%84%D0%BC% D0%B0%D0%BD%D0%B0). При определённом стечении обстоятельств содержимое промежуточного буфера, в который помещается сжатый результат, может наложиться на память, в которой хранится таблица частотностей символов. В результате наблюдается формирование некорректных сжатых данных и крах из-за записи за границу буфера.
Уязвимость может быть эксплуатирована только при использовании стратегии сжатия на основе фиксированных кодов Хаффмана. Подобная стратегия выбирается при явном включении в коде опции Z_FIXED (пример последовательности (https://www.openwall.com/lists/oss-security/2022/03/26/1/1), приводящей к краху при использовании опции Z_FIXED). Судя по коду (https://github.com/madler/zlib/blob/master/trees.c#L976) стратегия Z_FIXED также может быть выбрана автоматически, если вычисленные для данных оптимальное и статическое деревья имеют одинаковый размер.
Пока не ясно, могут ли быть подобраны условия для эксплуатации уязвимости при использовании стратегии сжатия Z_DEFAULT_STRATEGY, применяемой по умолчанию. Если нет, то уязвимость ограничится отдельными специфичными системами, в которых явно применяется опция Z_FIXED. Если да, то ущерб от уязвимости может быть очень значительным, так как библиотека zlib является стандартом де-факто и применяется (https://en.wikipedia.org/wiki/Zlib#Applications) во многих популярных проектах, включая ядро Linux, OpenSSH, OpenSSL, apache httpd, libpng, FFmpeg, rsync, dpkg, rpm, Git, PostgreSQL, MySQL и т.д.
Дополнение: Подобраны (https://seclists.org/oss-sec/2022/q1/201) параметры, при которых уязвимость проявляется при выборе стратегии сжатия по умолчанию Z_DEFAULT_STRATEGY. В реальных условиях совершение атаки по-прежнему оценивается как маловероятное, так как для эксплуатации с использованием выявленной последовательности требуется выставление параметра memLevel в значение 1, в то время как по умолчанию выбирается 8 уровень. Пример последовательности (https://seclists.org/oss-sec/2022/q1/att-201/repro_7_15_1_DEFAULTSTRATEGY.txt), приводящей к краху при вызове "deflateInit2(&strm, 7, Z_DEFLATED, 15, 1, Z_DEFAULT_STRATEGY)" (level=7, windowBits=15, memLevel=1).
27.03.22
https://www.opennet.ru/opennews/art.shtml?num=56918
Уязвимость проявляется начиная с версии zlib 1.2.2.2 и затрагивает в том числе актуальный выпуск zlib 1.2.11. Примечательно, что патч с исправлением уязвимости был предложен (https://github.com/madler/zlib/commit/5c44459c3b28a9bd3283aaceab7c615f8020c531) ещё в 2018 году, но разработчики не обратили на него внимания и не выпустили корректирующий выпуск (библиотека zlib последний раз обновлялась в 2017 году). Исправление также пока не включено в состава пакетов, предлагаемых дистрибутивами. Проследить за публикацией исправлений дистрибутивами можно на данных страницах: Debian (https://security-tracker.debian.org/tracker/CVE-2018-25032), RHEL (https://bugzilla.redhat.com/show_bug.cgi?id=2067945), Fedora (https://bugzilla.redhat.com/show_bug.cgi?id=2068066), SUSE (https://bugzilla.suse.com/show_bug.cgi?id=CVE-2018-25032), Ubuntu (https://ubuntu.com/security/CVE-2018-25032), Arch Linux (https://security.archlinux.org/), OpenBSD (https://ftp.openbsd.org/pub/OpenBSD/patches/7.0/common/), FreeBSD (http://www.freebsd.org/security/advisories.html), NetBSD (http://www.netbsd.org/support/security/). Библиотека zlib-ng проблеме не подвержена (https://github.com/zlib-ng/zlib-ng/pull/1208).
Уязвимость проявляется если во входном потоке встречается большое число подлежащих упаковке совпадений, к которым применяется упаковка на основе фиксированных кодов Хаффмана (https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%B4_%D0%A5%D0%B0%D1%84%D1%84%D0%BC% D0%B0%D0%BD%D0%B0). При определённом стечении обстоятельств содержимое промежуточного буфера, в который помещается сжатый результат, может наложиться на память, в которой хранится таблица частотностей символов. В результате наблюдается формирование некорректных сжатых данных и крах из-за записи за границу буфера.
Уязвимость может быть эксплуатирована только при использовании стратегии сжатия на основе фиксированных кодов Хаффмана. Подобная стратегия выбирается при явном включении в коде опции Z_FIXED (пример последовательности (https://www.openwall.com/lists/oss-security/2022/03/26/1/1), приводящей к краху при использовании опции Z_FIXED). Судя по коду (https://github.com/madler/zlib/blob/master/trees.c#L976) стратегия Z_FIXED также может быть выбрана автоматически, если вычисленные для данных оптимальное и статическое деревья имеют одинаковый размер.
Пока не ясно, могут ли быть подобраны условия для эксплуатации уязвимости при использовании стратегии сжатия Z_DEFAULT_STRATEGY, применяемой по умолчанию. Если нет, то уязвимость ограничится отдельными специфичными системами, в которых явно применяется опция Z_FIXED. Если да, то ущерб от уязвимости может быть очень значительным, так как библиотека zlib является стандартом де-факто и применяется (https://en.wikipedia.org/wiki/Zlib#Applications) во многих популярных проектах, включая ядро Linux, OpenSSH, OpenSSL, apache httpd, libpng, FFmpeg, rsync, dpkg, rpm, Git, PostgreSQL, MySQL и т.д.
Дополнение: Подобраны (https://seclists.org/oss-sec/2022/q1/201) параметры, при которых уязвимость проявляется при выборе стратегии сжатия по умолчанию Z_DEFAULT_STRATEGY. В реальных условиях совершение атаки по-прежнему оценивается как маловероятное, так как для эксплуатации с использованием выявленной последовательности требуется выставление параметра memLevel в значение 1, в то время как по умолчанию выбирается 8 уровень. Пример последовательности (https://seclists.org/oss-sec/2022/q1/att-201/repro_7_15_1_DEFAULTSTRATEGY.txt), приводящей к краху при вызове "deflateInit2(&strm, 7, Z_DEFLATED, 15, 1, Z_DEFAULT_STRATEGY)" (level=7, windowBits=15, memLevel=1).
27.03.22
https://www.opennet.ru/opennews/art.shtml?num=56918