Суть атаки в возможности выполнения своего кода на серверах непрерывной интеграции, выполняющих пересборку и выполнение заданий для тестирования новых изменений, отправляемых в репозиторий. Проблема затрагивает проекты, которые используют собственные внешние обработчики
«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 заявок для получения вознаграждений на сумму несколько сотен тысяч долларов.
Источник: http://www.opennet.ru/opennews/art.shtml?num=60424