Уязвимости в GNU coreutils: ошибка чтения в uniq и переполнение буфера в unexpand

GNU InetUtils

В популярном наборе базовых утилит GNU coreutils обнаружены две уязвимости, затрагивающие команды uniq и unexpand. Первая из них (CVE-2026-56391) связана с некорректной обработкой многобайтового текста и может привести к чтению за пределами выделенной памяти. Вторая (CVE-2026-56392) вызвана целочисленным переполнением при расчёте размера буфера и позволяет осуществить запись за его границы. Разработчики уже выпустили исправления в виде коммитов в репозиторий проекта, пользователям рекомендуется обновить пакет coreutils до версии, содержащей патчи.

Детали уязвимостей

Утилита uniq предназначена для удаления повторяющихся строк в отсортированном тексте. Уязвимость CVE-2026-56391 возникает при использовании ключа "-w" (или "--check-chars"), который ограничивает сравнение строк определённым числом символов. Как сообщается в бюллетене CVE, функция "find_field()" неправильно вычисляет длину многобайтового символа: она обрабатывает фиксированный указатель вместо того, чтобы последовательно сдвигать его по входным данным. В результате значение длины оказывается завышенным и затем используется в операции "memcmp", что приводит к чтению данных за пределами предназначенного буфера. При запуске uniq с переданными злоумышленником аргументами это поведение вызывает аварийное завершение программы (крах) и может привести к раскрытию соседних областей кучи. Уязвимости присвоен средний уровень опасности (CVSS 4.0: 4.6 MEDIUM). Она затрагивает версии coreutils с 9.5 по 9.11 включительно.

Вторая уязвимость (CVE-2026-56392) обнаружена в утилите unexpand, которая заменяет пробелы символами табуляции. Проблема связана с обработкой опции "-t", задающей позиции табуляции. При передаче большого числового значения происходит целочисленное переполнение при умножении, используемом для вычисления размера буфера. Результат умножения "заворачивается", и выделяется буфер меньшего, чем необходимо, размера. При последующей записи символов данные выходят за пределы выделенной памяти, что приводит к записи за границами кучи (heap-based buffer overflow). В зависимости от расположения памяти этот дефект может позволить злоумышленнику не только вызвать крах, но и получить возможность записи в произвольные области памяти (heap write primitive). Уязвимость оценена как низкая по шкале CVSS 4.0 (1.8 LOW) - из-за необходимости локального доступа и взаимодействия с пользователем, а также высоких требований к точности атаки. Она присутствует во всех версиях coreutils, начиная с самой первой до версии 9.11 включительно.

Обе проблемы были закрыты разработчиками GNU: для CVE-2026-56391 исправление внесено в коммит d64e35a8a4c0e4608321433e0d84d917e4e36371, для CVE-2026-56392 - в коммит b60a159fdc5bfcf9988d3a4cb6f53abe8ad5d35d. На момент публикации (24 июля 2026 года) патчи уже включены в основную ветку разработки coreutils.

Хотя обе уязвимости требуют взаимодействия с пользователем (UI:A в векторе CVSS) и локального запуска утилит с вредоносными аргументами, они представляют интерес для исследователей безопасности и системных администраторов, работающих с многобайтовыми кодировками (например, UTF-8) или автоматизированными конвейерами обработки текста. Вредоносный ввод может быть передан через скрипты или при обработке файлов из ненадёжных источников. Особенно критичной может оказаться уязвимость в unexpand для систем, где эта утилита используется в сценариях с пользовательскими настройками табуляции.

Рекомендуется установить обновлённую версию coreutils (выпуск после указанных коммитов) из официального репозитория или пакетного менеджера дистрибутива. В отсутствие патча временной мерой может быть ограничение использования опций "-w" и "-t" с многобайтовыми данными или проверка входных данных на стороне скрипта.

Эти уязвимости в очередной раз привлекают внимание к важности управления версиями системных утилит, особенно в средах, где возможен ввод данных от сторонних пользователей. Своевременное обновление даже низкорисковых компонентов снижает общую поверхность атаки.

Ссылки

Комментарии: 0