Простая уязвимость в CodeBuild поставила под удар всю инфраструктуру AWS и позволила взломать «центральную нервную систему облака»

aws codebuild,уязвимость,github,wiz,ci/cd,безопасность

Критическая уязвимость в AWS CodeBuild, обнаруженная Wiz, позволяла захватить репозитории AWS на GitHub, что грозило глобальным сбоем. Исследователи отмечают, что ошибка в фильтрах веб-перехватчиков не уникальна для AWS.

Критическая ошибка в конфигурации сервиса CodeBuild от AWS позволила полностью захватить собственные репозитории облачного провайдера на GitHub и поставила под угрозу каждую среду AWS в мире, как утверждают исследователи безопасности из компании Wiz.

Специалисты Wiz уведомили AWS об этой проблеме в цепочке поставок еще в августе, и облачный гигант устранил уязвимость в сентябре, прежде чем киберпреступник или агент, спонсируемый государством, обнаружил бы эту ошибку конфигурации и использовал ее для развязывания глобального коллапса.

Как нам стало известно, это предотвратило атаку на цепочку поставок, более масштабную, чем SolarWinds — так что не забудьте поблагодарить своих дружелюбных исследователей безопасности перед сном сегодня вечером. 

“Эта уязвимость скомпрометировала основную библиотеку, используемую в самой консоли AWS — центральной нервной системе облака”, — сообщил The Register исследователь уязвимостей из Wiz Юваль Авраами. “SolarWinds дала злоумышленникам доступ к корпоративным сетям. Эта уязвимость могла предоставить им возможность выполнения кода в том самом интерфейсе, который администраторы используют для управления всей своей инфраструктурой”.

Стоит отметить, что в марте прошлого года Google объявила о намерении приобрести Wiz за 32 миллиарда долларов и интегрировать ее предложения по облачной безопасности в платформу Google Cloud, которая является прямым конкурентом AWS. Сделка была одобрена регуляторами США, но ожидает одобрения в ЕС и других юрисдикциях.

Взлом кода (build)

В анализе, предоставленном The Register до публикации, Авраами и его соавторы подробно описали уязвимость в цепочке поставок, которую они назвали CodeBreach. 

Она существует в CodeBuild — управляемом сервисе AWS для непрерывной интеграции (CI), который обычно подключается к репозиториям GitHub. Причиной стали два недостающих символа в фильтрах веб-перехватчиков (webhook filters) — правилах, которым должно соответствовать событие для запуска сборки, — которые призваны защищать от недоверенных pull-запросов.

Авраами добавил, что угроза безопасности может распространяться далеко за пределы AWS.

“Эта уязвимость эксплуатирует слепое пятно в безопасности CI/CD [непрерывной интеграции/непрерывной поставки], а не изъян, присущий исключительно AWS”, — сказал он нам. “Этот конкретный риск — предоставление избыточных привилегий внешним контрибьюторам через автоматизированные сборки CI/CD — является универсальной проблемой. Независимо от того, используются ли GitHub Actions, Jenkins или облачные CI-сервисы вроде AWS CodeBuild, каждый крупный облачный провайдер и технологическая компания сталкивается с этим риском в своих цепочках поставок с открытым исходным кодом”.

Эта уязвимость эксплуатирует слепое пятно в безопасности CI/CD, а не изъян, присущий исключительно AWS

В заявлении, опубликованном в отчете Wiz, представитель AWS сообщил, что облачный провайдер расследовал и устранил проблемы, и пришел к выводу, что ошибка конфигурации, выявленная исследователями, “не оказала никакого влияния” ни на одну среду клиента или сервис AWS.

“AWS предприняла ряд шагов для устранения всех проблем, обнаруженных Wiz, а также дополнительные меры и смягчающие факторы для защиты от аналогичных возможных будущих проблем”, — говорится в заявлении. “Основная проблема обхода идентификатора субъекта (actor ID bypass) из-за незакрепленных регулярных выражений (regexes) для выявленных репозиториев была устранена в течение 48 часов после первого уведомления”, — продолжил спикер, добавив, что AWS также ввела “дополнительную защиту всех сборочных процессов, содержащих токены GitHub или любые другие учетные данные в памяти”.

Но это еще не все: AWS также заявила, что провела аудит всех остальных публичных сборочных сред, чтобы убедиться, что в их проектах с открытым исходным кодом нет аналогичных уязвимостей. Кроме того, они проверили журналы всех общедоступных сборочных репозиториев и соответствующие журналы CloudTrail, которые “показали, что ни один другой субъект не воспользовался проблемой незакрепленного регулярного выражения, продемонстрированной исследовательской группой Wiz”.

Проникновение в CI-конвейер

Команда Wiz начала изучать конвейер CI Amazon после попытки атаки на цепочку поставок на расширение Amazon Q VS Code, вызванной аналогичной проблемой в CodeBuild.

Сначала исследователи решили поискать репозитории GitHub, связанные с публичными проектами CodeBuild

“Когда проекты CodeBuild настроены как публичные, они раскрывают свои настройки через общедоступную панель мониторинга и автоматически ссылаются на нее в статусе любого коммита, который инициирует сборку. С этой панели любой может просмотреть журналы сборок и конфигурации проекта — включая используемые фильтры веб-перехватчиков”, — говорится в отчете.

Они обнаружили четыре активных проекта, настроенных на запуск сборок по pull-запросам:

  • AWS SDK для JavaScript (aws/aws-sdk-js-v3)
  • AWS Libcrypto (aws/aws-lc)
  • Amazon Corretto Crypto Provider (corretto/amazon-corretto-crypto-provider)
  • Реестр открытых данных AWS (awslabs/open-data-registry)

Все четыре проекта использовали фильтр веб-перехватчика ACTOR_ID — функцию безопасности, которая предоставляет список разрешенных идентификаторов пользователей GitHub. Запускать сборку могли только эти доверенные пользователи.

Фильтр представлял собой шаблон регулярного выражения (regex), но он не был “закреплен”. “Без якорей начала ^ и конца $ для обеспечения точного совпадения, движок регулярных выражений ищет не строку, которая идеально соответствует шаблону, а ту, которая его просто содержит”, — написали исследователи. “Это означало, что любой идентификатор пользователя GitHub, который является суперострокой разрешенного ID, мог обойти фильтр”.

Создание администратора репозитория из воздуха

Далее специалисты по безопасности выяснили, как зарегистрировать новый идентификатор пользователя GitHub, который содержал бы ID существующего мейнтейнера. Для этого они использовали GitHub Apps, что позволяет пользователям создавать приложение — это генерирует соответствующего бота-пользователя, который может взаимодействовать с pull-запросами, и уникальную URL-ссылку для подтверждения, — и имеет функцию, позволяющую пользователям автоматизировать запросы на создание приложений. 

Wiz автоматизировали 200 таких запросов на создание приложений через GitHub Apps в надежде, что один из них захватит идентификатор пользователя, который сможет обойти фильтр ACTOR_ID. Это сработало, и теперь у Wiz был доверенный ID мейнтейнера для репозитория AWS SDK для JavaScript.

Затем исследователи подготовили pull-запрос, который выглядел как рутинный вклад для исправления реальной проблемы. Внутри, однако, они спрятали полезную нагрузку: зависимость от пакета NPM, предназначенную для выполнения в среде сборки и извлечения учетных данных GitHub. 

“Через мгновение мы успешно получили учетные данные GitHub проекта CodeBuild aws-sdk-js-v3”, — написали они.

Они повысили привилегии и создали администратора репозитория, который мог отправлять код в основную ветку, одобрять pull-запросы и эксфильтровать секреты репозитория, обеспечивая “четкий путь для атак на цепочку поставок”.

Его мог выполнить любой промежуточный разработчик. Настоящая проблема — скрытность: создание полезной нагрузки, которая выглядит достаточно безобидно на случай, если кто-то будет изучать код библиотеки

Злоумышленник мог внедрить вредоносный код в JavaScript SDK непосредственно перед публикацией его последнего релиза (это происходит еженедельно), тем самым заразив всех нижестоящих пользователей. И, по данным Wiz, масштабы такой атаки “поразительны”. Специалисты по облачной безопасности утверждают, что 66 процентов облачных сред используют JavaScript SDK, и один из таких пользователей — консоль AWS.

Исследователи также использовали этот же метод для получения полных привилегий администратора в “ряде” других репозиториев, включая тот, который, по их словам, выглядел как приватные зеркала JavaScript SDK от AWS.

На этом этапе, осознав “потенциальное воздействие” захвата, Wiz передала свое исследование в AWS.

По словам Авраами, этот тип атаки требовал “удивительно низкого” уровня технических знаний.

“Эта атака основана на стандартных рабочих процессах разработчиков — форке репозитория и отправке pull-запроса, — а не на сложных эксплойтах”, — сказал он The Register. “Его мог выполнить любой промежуточный разработчик. Настоящая проблема — скрытность: создание полезной нагрузки, которая выглядит достаточно безобидно на случай, если кто-то будет изучать код библиотеки”.

Кроме того, это вектор атаки, привлекательный как для “государственных структур, стремящихся к шпионажу, так и для синдикатов киберпреступников, стремящихся к масштабу”, — добавил Авраами. “Получив контроль над репозиториями, они могли бы внедрить бэкдоры в SDK для сбора учетных данных из миллионов приложений, эксфильтрации конфиденциальных данных или атаки на саму консоль AWS для незаметного манипулирования облачной инфраструктурой”. ®

Всегда имейте в виду, что редакции могут придерживаться предвзятых взглядов в освещении новостей.