אַטאַק אויף PyTorch ינפראַסטראַקטשער, קאַמפּראַמייזינג די ריפּאַזאַטאָרי און ריליסיז

Раскрыты детали атаки на инфраструктуру, используемую при разработке фреймворка машинного обучения PyTorch, позволившую извлечь ключи доступа, достаточные для размещения произвольных данных в репозитории с релизами проекта в GitHub и AWS, а также для подстановки кода в основную ветку репозитория и добавления бэкдора через зависимости. Подмена релизов PyTorch могла использоваться для осуществления атаки на крупные компании, такие как Google, Meta, Boeing и Lockheed Martin, использующие PyTorch в своих проектах. В рамках программы Bug Bounty компания Meta выплатила исследователям $16250 за информацию о проблеме.

Суть атаки в возможности выполнения своего кода на серверах непрерывной интеграции, выполняющих пересборку и выполнение заданий для тестирования новых изменений, отправляемых в репозиторий. Проблема затрагивает проекты, которые используют собственные внешние обработчики «Self-Hosted Runner» с GitHub Actions. В отличие от традиционных GitHub Actions обработчики Self-Hosted выполняются не в инфраструктуре GitHub, а на своих серверах или в виртуальных машинах, поддерживаемых разработчиками.

Выполнение сборочных заданий на своих серверах позволяет организовать запуск кода, который может осуществить сканирование внутренней сети предприятия, поиск в локальной ФС ключей шифрования и токенов доступа, анализ переменных окружения с параметрами обращения к внешним хранилищам или облачным сервисам. При отсутствии должной изоляции сборочного окружения найденные конфиденциальные данные могут быть отправлены атакующим вовне, например, через обращение к внешним API. Для определения применения проектами «Self-Hosted Runner» может использоваться инструментарий Gato, анализирующий общедоступные workflow-файлы и логи запуска CI-заданий.

В PyTorch и многих других проектах, использующих «Self-Hosted Runner», запуск сборочных заданий разрешён только разработчикам, изменения которых ранее проходили рецензирование и включались в кодовую базу проекта. Наличие статуса «contributor» при использовании в репозитории настроек по умолчанию даёт возможность запускать обработчики GitHub Actions при передаче pull-запросов и, соответственно, выполнять свой код в любом окружении GitHub Actions Runner, привязанном к репозиторию или курирующей проект организации.

Привязку к статусу «contributor» оказалось легко обойти — достаточно предварительно отправить незначительное изменение и дождаться его принятия в кодовую базу, после чего разработчик автоматически получал статус активного участника, pull-запросы которого разрешено тестировать в CI-инфраструктуре без отдельной проверки. Для получения статуса активного разработчика в ходе эксперимента использовались незначительные косметические изменения, связанные с устранением опечаток в документации. Для получения доступа к репозиторию и хранилищу релизов PyTorch в ходе атаки при выполнении кода в «Self-Hosted Runner» был осуществлён перехват токена GitHub, применявшегося для доступа к репозиторию из сборочных процессов, а также ключей AWS, задействованных для сохранения результатов сборки.

Проблема не специфична для PyTorch и затрагивает многие другие крупные проекты, которые используют настройки по умолчанию для «Self-Hosted Runner» в GitHub Actions. Например, упомянуто осуществление похожих атак для подстановки бэкдора в некоторые крупные кошельки криптовалют и блокчейн-проекты с миллиардной капитализацией, внесения изменений в релизы Microsoft Deepspeed и TensorFlow, компрометации одного из приложений компании CloudFlare, а также выполнения кода на компьютере в сети Microsoft. Детали по данным инцидентам пока не раскрываются. В рамках действующих программ Bug Bounty исследователи отправили более 20 заявок для получения вознаграждений на сумму несколько сотен тысяч долларов.

מקור: opennet.ru

לייגן אַ באַמערקונג