Кампания megalodon за шесть часов внедрила бэкдоры в более чем пять с половиной тысяч репозиториев GitHub

information security

Восемнадцатого мая 2026 года сообщество разработчиков столкнулось с одной из самых масштабных атак на цепочку поставок открытого кода. Автоматизированная кампания, получившая кодовое название megalodon, за шесть часов протолкнула 5718 вредоносных коммитов в 5561 репозиторий GitHub. Злоумышленники использовали одноразовые учётные записи и поддельные имена авторов (build-bot, auto-ci, ci-bot, pipeline-bot), чтобы внедрить в рабочие процессы GitHub Actions скрипты, похищающие секреты.

Описание

Проблема коснулась сотен проектов разного масштаба: от учебных репозиториев до библиотек с тысячами звёзд, таких как ioLibrary_Driver от WIZnet и нескольких репозиториев Tiledesk. Атака затронула не только сам код, но и среду непрерывной интеграции. Именно в ней злоумышленники спрятали свою полезную нагрузку. Каждый вредоносный коммит добавлял или заменял файл рабочего процесса GitHub Actions, содержащий закодированную в base64 команду bash.

Специалисты компании SafeDep в своём отчёте детально описали механизм атаки. Движок Malysis выявил подозрительный файл в пакете @tiledesk/tiledesk-server. Сравнение чистой версии 2.18.5 с версией 2.18.12 показало, что оригинальный workflow для сборки Docker-образов был заменён на скрипт с именем Optimize-Build. Он активировался только по команде workflow_dispatch, то есть не запускался автоматически при пуше. Это делало бэкдор скрытым: в истории сборок не появлялось лишних запусков. Атакующий мог запустить его удалённо через API GitHub, если получал токен доступа.

В массовом варианте кампании злоумышленники добавляли новый файл .github/workflows/ci.yml с именем SysDiag, который срабатывал на каждый пуш и pull request. Такой подход охватывал максимальное количество репозиториев. В обоих вариантах скрипт запрашивал расширенные разрешения: id-token: write и actions: read. Это позволяло ему получить токен OpenID Connect (OIDC) и выдать себя за доверенную сущность при обращении к облачным провайдерам.

Расшифрованная полезная нагрузка представляла собой bash-скрипт из 111 строк. Он собирал данные в несколько этапов. Сначала скрипт выгружал переменные окружения рабочего процесса, включая GITHUB_TOKEN, секреты Docker Hub и пользовательские ключи. Затем он пытался прочитать конфигурационные файлы популярных инструментов: AWS CLI, GCP CLI, Docker, npm, Kubernetes, Terraform, Vault. Скрипт также обращался к метаданным облачных инстанций (AWS IMDSv2, GCP metadata, Azure IMDS), чтобы похитить временные учётные данные IAM.

Отдельное внимание злоумышленники уделили файлам исходного кода. Они просканировали рабочее пространство по более чем тридцати регулярным выражениям, ища ключи API, строки подключения к базам данных, JWT-токены и приватные ключи PEM. Все найденные секреты отправлялись на сервер управления с адресом 216.126.225[.]129:8443. Для сокрытия следов скрипт подавлял ошибки, использовал временные каталоги и добавлял случайные задержки между запросами.

Наиболее серьёзные последствия атака имела для проекта Tiledesk. Злоумышленники скомпрометировали репозиторий, но не трогали учётную запись npm. Легитимный мейнтейнер опубликовал новые версии пакета (со 2.18.6 по 2.18.12) из отравленного исходного кода. Таким образом, бэкдор попал в реестр пакетов. При установке пакета код не выполнялся на машине пользователя, но угроза исходила от его наличия в рабочем процессе CI. Если кто-то запускал сборку из такого репозитория, вредоносный workflow мог активироваться.

Разработчикам, чьи репозитории получили коммиты от адресов build-system@noreply.dev или ci-bot@automated.dev, необходимо немедленно откатить изменения. Следует проверить папку .github/workflows на наличие файлов SysDiag или Optimize-Build. Если подозрительный workflow был запущен, нужно сменить все секреты, доступные среде GitHub Actions. Особое внимание стоит уделить провайдерам OIDC: облачные метаданные могли быть скомпрометированы. Проверка логов облачных провайдеров на предмет подозрительных токенов, запрошенных от имени GitHub Actions, поможет выявить факт утечки.

Кампания megalodon демонстрирует, насколько уязвимой может быть цепочка поставок, если злоумышленники получают доступ к репозиторию через скомпрометированный токен или ключ развёртывания. Шесть часов и пять с половиной тысяч репозиториев - это не случайность, а хорошо спланированная операция. Разработчикам стоит задуматься о дополнительной проверке любых изменений в конфигурациях CI/CD, даже если они выглядят как рутинные обновления.

Индикаторы компрометации

C2 Server

  • http://216.126.225.129:8443

Campaign ID

  • megalodon

Author Emails

  • build-system@noreply.dev, ci-bot@automated.dev

Author Names

  • build-bot, auto-ci, ci-bot, pipeline-bot

Mass Workflow

  • .github/workflows/ci.yml (SysDiag)

Targeted Workflow

  • Optimize-Build (workflow_dispatch)

Affected npm Versions

  • @tiledesk/tiledesk-server 2.18.6–2.18.12

Malicious Commit

  • acac5a9854650c4ae2883c4740bf87d34120c038

Комментарии: 0