Безопасность · 2 ноября 2026 г.
Критические уязвимости GitLab вызваны ошибками в движке регулярных выражений Ruby
Команда Ruby выпустила обновления версий 4.0.9, 3.4.12 и 3.3.13 для устранения трех ошибок в движке регулярных выражений Onigmo. Эти недостатки могут позволить злоумышленникам выполнять вредоносный код на затронутых серверах.
Наиболее заметным случаем стали уязвимости в GitLab, который базируется на Ruby. Проблема затрагивает любое приложение на Ruby, которое создает регулярные выражения на основе внешних данных. Ошибки возникают на этапе компиляции шаблона в внутреннюю программу, а не во время сопоставления с текстом. Пользователи, использующие только собственные шаблоны, не подвержены риску.
В GitLab были обнаружены четыре уязвимости, о которых сообщил исследователь Йохан Карлссон через программу вознаграждения за ошибки. Две из них, CVE-2026-89078 и CVE-2026-93577, имеют оценку CVSS 9,9, а CVE-2026-97229 и CVE-2026-110264 получили максимальный балл 10,0. Последние две могут быть использованы без авторизации. GitLab устранил эти проблемы в период с 23 сентября по 21 октября, применив исправления к встроенной версии Ruby. Обновление затронуло все версии GitLab, начиная с 7.0, выпущенной в 2014 году.
Команда Ruby связала четыре идентификатора CVE с тремя конкретными ошибками. CVE-2026-89078 вызвана двойным освобождением памяти при чтении шаблона. CVE-2026-93577 и CVE-2026-97229 связаны с переполнением целого числа при расчете размера скомпилированной программы. CVE-2026-110264 вызвана переполнением внутренних счетчиков в шаблонах с большим количеством повторений.
Исправления не являются новыми. Ошибка с памятью была исправлена в ветке разработки в мае 2025 года и включена в Ruby 4.0.0. Исправление счетчиков вышло в апреле 2026 года, а исправление размера программы в сентябре 2026 года. В стабильные версии они попали недавно: Ruby 4.0.8 от 22 октября содержала исправление размера программы, а версия 4.0.9, вышедшая днем позже, добавила последний недостающий патч. Ветви 3.4 и 3.3 получили все три исправления одновременно. Для Ruby 3.2 и более старых версий обновления не предусмотрены.
В худшем случае атакующий может выполнить код с правами процесса Ruby, получив доступ к базе данных, секретам окружения и файловой системе. Однако более вероятным исходом является сбой процесса, что может привести к отказу в обслуживании без необходимости авторизации. На данный момент ни GitLab, ни команда Ruby не сообщали об активных атаках.
Разработчики предупреждают, что использование функции Regexp.timeout не помогает, так как она прерывает только длительное сопоставление, а ошибки происходят раньше, при компиляции. Ограничение длины шаблона также не является надежным методом защиты. Рекомендуется обновить версию языка или прекратить компиляцию шаблонов из внешних данных.