Хакеры захватили 4837 аккаунтов GitHub и внедрили похититель секретов в тысячи репозиториев

Wait 5 sec.

Атака затронула не менее 1806 проектов, а общее число репозиториев, получивших вредоносные изменения, превысило 8000. Причём некоторые механизмы доступа сохранялись даже после смены паролей и ключей Злоумышленник использовал учётные данные 4837 взломанных аккаунтов GitHub, чтобы внедрить вредоносный скрипт для кражи секретов в репозитории, доступные этим пользователям для записи. По данным компании Aikido Security, скрипт сработал как минимум в 1806 репозиториях. Отдельный анализ SafeDep выявил 8093 репозитория, получивших вредоносные изменения с 12:46 UTC вторника до 04:36 UTC 12 ноября. Эта цифра включает все обнаруженные репозитории с вредоносными коммитами, а не только те, где скрипт успел выполниться. Проверка охватывала лишь основные ветки публичных проектов, поэтому реальный масштаб может быть больше. Атака начиналась с тестового запроса на слияние изменений (pull request) с заголовком «docs: dependency audit notes» из ветки wfx-docs. Так злоумышленник проверял, может ли скомпрометированный аккаунт изменять содержимое репозитория. Такие запросы появились в 61 764 проектах, после чего в части из них добавлялся похититель секретов. SafeDep обнаружила 7309 случаев внедрения скрипта в существующие рабочие процессы GitHub Actions и ещё 771 случай, когда он распространялся через npm postinstall — механизм автоматического выполнения кода при установке пакета. В последнем случае вредоносный код мог запускаться не только в облачной инфраструктуре проекта, но и непосредственно на компьютере разработчика. Обычно после внедрения злоумышленник откатывал изменения через несколько минут, а журналы выполнения скрипта удалялись вместе с самими запусками. Поэтому отсутствие видимых следов атаки ещё не означает, что данные не были похищены. Источник изображения: Grok Imagine // https://x.ai/grok/use-cases/image-generation Скрипт собирал практически все доступные ему учётные данные: секреты GitHub Actions, токены GITHUB_TOKEN, временные токены OIDC и Actions Runtime, ключи ИИ-сервисов, а также данные из файлов конфигурации AWS, Azure, Google Cloud, Kubernetes, npm, PyPI и SSH. Кроме того, он копировал содержимое репозитория, последние 100 коммитов и недавние артефакты рабочих процессов. На собственных серверах компаний (self-hosted runners) скрипт мог получать дополнительные облачные учётные данные из метаданных виртуальных машин, сведения о Docker-контейнерах и конфигурации systemd. Информация отправлялась через HTTP POST на удалённые серверы или в Telegram: при проверке 200 вредоносных коммитов примерно в 20% случаев использовался только Telegram. Особую опасность представляли механизмы закрепления в облачной инфраструктуре. Получив токены GitHub OIDC, злоумышленник мог обменивать их на сеансы доступа AWS, Google Cloud и Azure, создавать постоянные ключи AWS и менять политики доверия облачных ролей. В Azure он мог добавлять федеративные учётные данные с префиксом wfx-ci-, позволяющие рабочим процессам авторизоваться без сохранённого пароля. Такие механизмы могли продолжать работать даже после отзыва первоначальных токенов и смены ключей. Aikido также обнаружила пересечение с атакой GhostAction в октябре: аккаунты, пострадавшие тогда, примерно в 1000 раз чаще становились участниками новой кампании. При этом компания пока не связывает обе атаки с одним злоумышленником, поскольку использовались разные инструменты и инфраструктура.