28.02.2024

Атака на инфраструктуру 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 в ходе атаки был выполнен перехват токена GitHub, применявшегося для доступа к репозиторию из сборочных процессов, а также к ключам AWS, задействованным для сохранения результатов сборки.

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

Источник: https://www.opennet.ru/opennews/art.shtml?num=60424 Источник.