В Wiz обнаружили критическую уязвимость в сервисе AWS CodeBuild.

Исследователи безопасности из компании Wiz обнаружили критическую уязвимость в сервисе AWS CodeBuild, которая позволяла полностью захватить GitHub-репозитории самой Amazon и потенциально скомпрометировать облачные среды клиентов по всему миру.
Уязвимость, получившая название CodeBreach, была раскрыта Amazon в августе прошлого года и исправлена в сентябре — до того, как ею успели воспользоваться злоумышленники. По словам исследователей, это предотвратило атаку на цепочку поставок, которая могла бы превзойти по масштабу печально известный инцидент с SolarWinds.
«Эта уязвимость скомпрометировала ключевую библиотеку, используемую в консоли AWS — центральной нервной системе облака», — рассказал изданию The Register исследователь Wiz Юваль Аврахами. Он подчеркнул, что если атака на SolarWinds дала злоумышленникам доступ к корпоративным сетям, то эта брешь могла предоставить возможность выполнять код прямо в интерфейсе, через который администраторы управляют всей своей инфраструктурой.
Причина уязвимости оказалась до обидного простой: в фильтрах вебхуков отсутствовали два символа. CodeBuild — это управляемый сервис непрерывной интеграции Amazon, который часто подключается к GitHub-репозиториям. Для защиты от недоверенных pull-запросов используются специальные фильтры, и один из них — ACTOR_ID — позволяет создать список одобренных пользователей GitHub, которым разрешено запускать сборку.
Проблема заключалась в том, что регулярное выражение для этого фильтра не было «заякорено» — в нём отсутствовали символы начала и конца строки. Без них система не требовала точного совпадения идентификатора, а искала лишь подстроку. Это означало, что любой пользователь GitHub с идентификатором, содержащим в себе ID одобренного мейнтейнера, мог обойти защиту.
Исследователи Wiz нашли способ зарегистрировать нужный идентификатор через функцию GitHub Apps, автоматизировав создание двухсот запросов на регистрацию приложений. Один из них оказался удачным и позволил получить доверенный ID мейнтейнера репозитория AWS SDK для JavaScript.
Затем они подготовили pull-запрос, который выглядел как обычное исправление реальной проблемы. Внутри, однако, скрывалась полезная нагрузка — зависимость NPM-пакета, предназначенная для извлечения учётных данных GitHub из среды сборки. Через несколько мгновений исследователи получили полный доступ к репозиторию и смогли создать администратора с правами на публикацию кода в основную ветку и одобрение pull-запросов.
Потенциальный масштаб атаки впечатляет: по данным Wiz, JavaScript SDK от Amazon используется в 66% облачных сред, а одним из его пользователей является сама консоль AWS. Злоумышленник мог бы внедрить вредоносный код в SDK прямо перед еженедельным релизом, заразив всех пользователей библиотеки.
По словам Аврахами, для проведения такой атаки не требовалось особых технических навыков — достаточно уровня среднего разработчика. Настоящая сложность заключалась лишь в том, чтобы замаскировать вредоносный код под безобидный.
Amazon заявила, что уязвимость не затронула ни одну клиентскую среду и ни один сервис компании. Облачный гигант исправил проблему в течение 48 часов после первого сообщения, провёл аудит всех публичных сборочных окружений и проверил логи, которые подтвердили, что никто, кроме исследователей Wiz, не воспользовался этой брешью. Компания также опубликовала бюллетень безопасности по этому инциденту.
Впрочем, Аврахами предупреждает, что подобная угроза не уникальна для AWS. Эта уязвимость эксплуатирует слепую зону в безопасности конвейеров CI/CD, и с аналогичным риском сталкиваются все крупные облачные провайдеры и технологические компании, использующие GitHub Actions, Jenkins или другие системы непрерывной интеграции.