В GitLab обнаружена критическая уязвимость с удаленным выполнением кода
Для эксплуатации не нужны ни учетная запись, ни действия со стороны жертвы: злоумышленнику достаточно, чтобы сервер отобразил подготовленный файл. После этого атакующий получает выполнение команд от имени учетной записи на GitLab.
21 октября GitLab выпустила исправления и рекомендовала немедленно обновить self‑managed‑инсталляции. Уязвимость в облачных GitLab.com и GitLab Dedicated компания исправила на своей стороне, действий от пользователей не требуется.
Корень проблемы — в движке регулярных выражений Onigmo, который Ruby использует внутри себя, а GitLab поставляет в комплекте.
GitLab умеет отображать в вебе файлы формата Emacs Org‑mode (.org). При рендеринге такого файла одно из его ключевых слов попадает в регулярное выражение без фильтрации. Если выражение содержит слишком много повторов, внутренний счетчик движка переполняется: переполнение начинается после 32 767 повторов — это предел знакового 16‑битного счетчика (CWE‑190). Из‑за переполнения движок начинает писать за границами выделенной области памяти (CWE‑787), и эту порчу памяти удается довести до выполнения произвольного кода.
Полезная нагрузка прячется в строках #+TODO:, #+SEQ_TODO: и #+TYP_TODO: — именно там Org‑mode задает регулярное выражение, в которое можно заложить аномально большое число повторов.
Атака состоит из двух шагов и не требует аутентификации:
- Злоумышленник размещает вредоносный
.org‑файл. Достаточно публичного проекта, вход в систему не нужен. - Злоумышленник инициирует рендеринг этого файла. В итоге запускается уязвимый движок регулярных выражений.
Затронуты self‑managed‑инсталляции GitLab Community Edition (CE) и Enterprise Edition (EE).
В таблице приведены исправленные версии, и уязвимы все версии ниже указанных.
| Ветка | Версия с исправлением |
|---|---|
| До 19.0 |
18.11.13 |
| 19.0.x |
19.0.10 |
| 19.1.x |
19.1.9 |
| 19.2.x |
19.2.9 |
| 19.3.x |
19.3.6 |
| 19.4.x |
19.4.3 |
| 19.5.x |
19.5.1 |
Для версий 18.10 и ниже отдельного исправления нет — нужно идти по штатному пути обновления до 18.11.13 или новее.
- Обновите GitLab до исправленной версии: 19.5.1, 19.4.3, 19.3.6, 19.2.9, 19.1.9, 19.0.10 или 18.11.13.
- Разверните штатные детектирующие правила GitLab для Sigma:
Onigmo native worker crashиOrg mode render error burst. - Добавьте в WAF или IDS правило на аномально длинные, многократно повторяющиеся конструкции в строках
#+TODO:,#+SEQ_TODO:и#+TYP_TODO:внутри.org‑файлов. - Ограничьте сетевой доступ к GitLab через VPN или белый список, если публичная доступность сервиса не нужна.
Пользователям BI.ZONE WAF уже доступны правила, которые предотвращают попытки эксплуатации.