В фундаментальной библиотеке сжатия данных zlib обнаружена кривая уязвимость, представляющая серьезную угрозу безопасности. Проблема, получившая идентификатор CVE-2026-22184, позволяет злоумышленнику вызвать отказ в обслуживании (DoS) или потенциально выполнить произвольный код (RCE) с помощью предельно простой атаки. Оценка по шкале CVSS в 9.3 балла подчеркивает высокую степень опасности данного дефекта.
Детали уязвимости
Уязвимость кроется в утилите "untgz", входящей в состав библиотеки. Конкретно, ошибка переполнения глобального буфера возникает в функции "TGZfname()", которая отвечает за обработку имени архива, передаваемого через командную строку. Ключевая проблема заключается в использовании небезопасной операции "strcpy()" без предварительной проверки длины вводимых пользователем данных.
Имя архива, полученное из аргументов командной строки ("argv[]"), копируется в статический глобальный буфер фиксированного размера в 1024 байта. Если злоумышленник передаст аргумент длиннее этого лимита, произойдет запись за пределами выделенной памяти. Это нарушает целостность данных и ведет к неопределенному поведению программы.
Особую опасность представляет тривиальная достижимость уязвимого кода. Функция "TGZfname()" выполняется до какой-либо проверки или распаковки самого архива. Следовательно, для эксплуатации не требуется создавать сложный вредоносный файл. Атака сводится к простому вызову утилиты с чрезмерно длинным именем файла в качестве аргумента, что делает угрозу легко реализуемой.
Коренная причина уязвимости - полное отсутствие проверки границ перед копированием данных. Исходный аргумент напрямую передается в "strcpy()", а буфер является глобальной статической переменной, а не выделяется в стеке. Переполнение происходит сразу при входе в функцию, что минимизирует шансы на смягчение последствий внутри самой программы.
Влияние уязвимости может быть разнообразным и серьезным. Наиболее вероятным исходом является аварийное завершение работы программы, приводящее к отказу в обслуживании. Однако, поскольку переполнение затрагивает глобальную память, последствия могут выходить за рамки одной функции. Повреждение соседних объектов в памяти способно привести к неопределенному поведению, которое сохраняется на протяжении всего выполнения программы.
В зависимости от множества факторов, включая компилятор, архитектуру системы, флаги сборки и расположение данных в памяти, злоумышленник может превратить простое повреждение памяти в возможность для выполнения произвольного кода. Это делает потенциальный вредносный сценарий (RCE) теоретически возможным, хотя и зависящим от конкретных условий окружения.
В качестве доказательства концепции исследователи приводят команду, вызывающую переполнение с помощью строки, состоящей из 4096 символов 'A'. Запуск утилиты, скомпилированной с инструментом AddressSanitizer (ASan), однозначно демонстрирует ошибку "global-buffer-overflow" при попытке записи 2001 байта по адресу, соответствующему глобальному буферу. Трассировка стека четко указывает на вызов "strcpy()" внутри функции "TGZfname()".
Под угрозой находятся все версии библиотеки zlib вплоть до 1.3.1.2 включительно. Учитывая широкое распространение zlib в операционных системах, серверных приложениях и встраиваемых решениях, масштаб потенциального воздействия огромен. Любое программное обеспечение, использующее уязвимую утилиту "untgz", становится мишенью.
В настоящее время постоянное исправление (патч) еще не выпущено. В качестве временных мер защиты системным администраторам и разработчикам настоятельно рекомендуется ограничить или полностью исключить использование утилиты "untgz" в производственных средах. Если ее функционал не является критически важным, лучшим решением будет удаление соответствующего пакета до появления официального обновления от сопровождающих zlib.
Эта ситуация служит очередным напоминанием об опасности использования устаревших, небезопасных функций работы со строками, таких как "strcpy()", в современном коде. Разработчикам следует применять безопасные аналоги, например "strncpy()" с явным указанием размера буфера, или другие механизмы проверки входных данных. Ответственное раскрытие информации и оперативный выпуск исправлений остаются ключевыми элементами в поддержании кибербезопасности экосистемы с открытым исходным кодом.
Ссылки
- https://www.cve.org/CVERecord?id=CVE-2026-22184
- https://nvd.nist.gov/vuln/detail/CVE-2026-22184
- https://github.com/madler/zlib
- https://seclists.org/fulldisclosure/2026/Jan/3
- https://www.vulncheck.com/advisories/zlib-untgz-global-buffer-overflow-in-tgzfname