Уязвимости в GNU Bison позволяют выполнить произвольный код и перезаписать файлы при обработке вредоносной грамматики

GNU InetUtils

В генераторе синтаксических анализаторов GNU Bison обнаружены две уязвимости, связанные с некорректной обработкой конфигурационных переменных, задаваемых в файлах грамматики. Первая из них, CVE-2026-56389, позволяет выполнить произвольную программу при генерации HTML-отчёта, вторая, CVE-2026-56390, - перезаписать существующие файлы через управление путями вывода. Обе проблемы подтверждены в версии 3.8.2, патчи выпущены в кодовой базе проекта, однако разработчики не указали полный диапазон уязвимых версий.

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

Уязвимость CVE-2026-56389 получила оценку 6.8 по шкале CVSS 4.0 (уровень MEDIUM) и классифицируется как внедрение команд в ОС (CWE-78). Суть проблемы в том, что файл грамматики может переопределить исполняемый файл, используемый на этапе трансформации XML в HTML, с помощью директивы "%define tool.xsltproc". Это значение принимается без какой-либо проверки и передаётся напрямую в системный вызов "execvp()". Если пользователь запускает "bison --html" на грамматике, предоставленной злоумышленником, утилита выполнит произвольную программу с привилегиями процесса Bison. Таким образом, атакующий может подложить вредоносную грамматику в проект или CI-окружение (например, в публичный репозиторий или пакет), и при её разборе с флагом "--html" произойдёт выполнение стороннего кода. Вектор атаки требует локального доступа и взаимодействия пользователя (UI:A), но не требует привилегий (PR:N). Потенциальная атака может привести к подмене инструментов сборки, эксфильтрации данных или боковому перемещению в инфраструктуре, если процесс Bison запускается от имени сервиса с широкими правами.

Вторая уязвимость, CVE-2026-56390, оценена в 4.6 балла (MEDIUM) и описывается как внешний контроль имени файла или пути (CWE-73). Директивы "%output" и "%header" в грамматике позволяют задать произвольные пути для генерируемых файлов, переопределяя опции вывода, указанные пользователем в командной строке. При обработке вредоносной грамматики эти пути не фильтруются, что позволяет направить результирующие файлы в любые доступные для записи места в файловой системе. В частности, злоумышленник может перезаписать существующие файлы, принадлежащие пользователю, от имени которого запущен Bison. Хотя в CVSS указано низкое влияние на целостность (VI:L) и отсутствие влияния на конфиденциальность и доступность, на практике такая перезапись может нарушить работу других компонентов системы - например, испортить библиотеки, конфигурационные файлы или скрипты сборки. Особенно опасно это в средах автоматической сборки, где грамматика может быть загружена из ненадёжного источника.

Исследователи, обнаружившие обе уязвимости, уведомили сопровождающих проекта GNU Bison, и те внесли исправления в коммитах 3169c1e7a2c6acc4c59dfcf8b089896d6881925b (для CVE-2026-56389) и 8d101c19d4d9aaedf83a448c925513742d4efcf0 (для CVE-2026-56390). Однако разработчики не предоставили информацию о том, какие именно версии затронуты, кроме подтверждения уязвимости версии 3.8.2. Не исключено, что проблема существует и в более старых выпусках. Пользователям, использующим Bison в проектах, где возможен разбор сторонних грамматик - особенно с опцией генерации HTML-отчётов или с автоматическим указанием путей вывода, - рекомендуется обновить утилиту до последней версии из репозитория или применить соответствующие патчи. В качестве временной меры защиты можно избегать запуска "bison --html" на непроверенных файлах и не использовать внешние грамматики в доверенных средах без предварительной проверки.

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

Ссылки

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