Alpine Linux пересобрала свой GitLab после попытки эксплуатации критической уязвимости
Команда Alpine Linux опубликовала отчёт об инциденте с собственным сервером GitLab. 20 и 21 октября злоумышленник пытался эксплуатировать уязвимость CVE-2026-97229, причём спустя неделю после выхода исправления. По словам разработчиков, атака была близка к успеху. Доказательств взлома не нашли, но исключить его тоже нельзя. Поэтому инстанс сочли скомпрометированным и пересобрали с нуля. Репозиторий aports, пакеты и релизы от 21 октября, как показала проверка, не изменялись.
Уязвимость, которую не закрыло обновление
CVE-2026-97229 — критическая уязвимость с оценкой CVSS 10.0. Она связана с тем, как GitLab обрабатывает регулярные выражения в конфигурации CI. Сама ошибка находится в Onigmo, встроенном в Ruby движке регулярных выражений. GitLab выпустил исправленные версии 12 октября, но фактически исправление представляет собой набор патчей к Ruby. Эти патчи попадают только в официальные пакеты и контейнерные образы GitLab. В основной ветке Ruby исправление появилось лишь 23 октября, в версиях 3.3.13, 3.4.12 и 4.0.9.
13 октября команда Alpine по ошибке обновилась до GitLab 19.3.4 вместо 19.3.5, где исправление уже было. Через неделю только что зарегистрированный аккаунт начал отправлять специально подготовленные CI-конфигурации. Рабочие процессы GitLab падали восемь раз, и в четырёх случаях атакующий частично проходил эксплойт, но срывался на следующем шаге. Он также скачал контейнерный образ GitLab от Alpine — судя по всему, чтобы подогнать эксплойт под конкретную сборку.
22 октября сервер обновили до 19.3.6, но это не помогло: образ Alpine использовал стандартный Ruby без патча. Уязвимость обнаружили 26 октября. К тому моменту атакующего уже заблокировали, а его попытки вернуться 25–26 октября провалились. 27 октября GitLab закрыли для всех, кроме разработчиков и сборочных серверов. 28 октября пересборка завершилась, все пароли сбросили, секретные ключи GitLab заменили.
Что известно и чего нельзя исключить
Стабильные релизы 3.21.9, 3.22.7, 3.23.7 и 3.24.3, включая ISO-образы и архивы minirootfs, из которых собираются официальные Docker-образы alpine, а также все пакеты, собранные с 20 по 24 октября, сверили с записями вне GitLab: с клоном репозитория одного из разработчиков и со всеми 45 сборщиками. Ключи подписи пакетов на сервере GitLab никогда не хранились. Признаков выполнения постороннего кода и утечки данных через веб-запросы и API не найдено.
Полной уверенности при этом нет. Успешный эксплойт не оставил бы ни падения, ни записи в веб-логах. Часть логов за день атаки утрачена, а исходящие сетевые соединения не журналировались — ни самой командой, ни хостинг-провайдером. В худшем случае могли утечь адреса электронной почты, имена и IP-адреса пользователей, хеши паролей, секреты 2FA, переменные CI/CD, токены раннеров, учётные данные вебхуков и интеграций, а также приватные репозитории и конфиденциальные задачи.
Что делать пользователям
После открытия GitLab пароль придётся задать заново через «Forgot your password?». Тем, кто использовал тот же пароль на других сайтах, советуют сменить его и там: на GitLab Alpine уже фиксировали автоматические попытки входа с паролями из чужих утечек. Тем, кто разворачивает GitLab с собственным Ruby, мало обновить сам GitLab — нужен и исправленный Ruby. Образ alpinelinux/gitlab:19.3.6 следует скачать заново: исправлен только образ от 27 октября. Пакеты Ruby в Alpine 3.21–3.24 и edge уже содержат исправление и обновляются командой apk upgrade.
Впредь команда обещает устанавливать критические обновления GitLab в течение суток и проверять, нет ли в них патчей к компонентам. Кроме того, она расширит журналирование, будет хранить логи дольше 14 дней и начнёт подписывать теги релизов, чтобы их можно было проверять независимо от GitLab.
Источник: Lobsters
Комментарии
Войдите, чтобы комментировать.