Атака на GitHub: взломаны 1 900 аккаунтов и 30 000 репозиториев через украденные токены
Злоумышленники использовали украденные персональные токены доступа (PAT), чтобы внедрять вредоносные workflow в репозитории GitHub. Под видом проверок безопасности они сканировали историю Git и похищали ключи AWS, токены GitHub и GitLab, а также API-токены ИИ-провайдеров. Пострадали 1 900 аккаунтов и 30 000 репозиториев.

Первоисточник: selectel.ru
Что произошло
По данным StepSecurity, в 2026 году скомпрометированы 1 900 аккаунтов и 30 000 репозиториев GitHub. Уязвимости в GitHub Actions не эксплуатировались: злоумышленники использовали украденные персональные токены доступа (PAT) разработчиков для изменения workflow.
Как получили доступ
Источником, по предположению StepSecurity, стали утекшие PAT; точный вектор атаки не подтверждён. Получив доступ к репозиториям, хакеры изменяли файлы workflow, маскируя задачи под стандартные проверки безопасности.
Маскировка под проверки безопасности
Вредоносные файлы назывались security-audit.yml или github_actions_security.yml. Они ссылались на секреты, уже используемые в легитимных сборках, поэтому вредоносные процессы собирали учётные данные во время работы и отправляли их на подконтрольный сервер.
Сканирование истории Git
В октябрьской версии атаки хакеры задействовали actions/checkout@v4 с параметром fetch-depth: 0 для полного сканирования рабочего дерева и истории коммитов. Это позволило искать учётные данные, удалённые из текущего кода, но оставшиеся в истории Git.
Какие данные искали
- Ключи AWS; поздние версии скрипта захватывали соседние строки кода, чтобы сопоставить ID ключей с секретными ключами доступа
- Токены PAT от GitHub и GitLab
- Ключи сервисов Google и Firebase
- API-токены ИИ-провайдеров: Anthropic, OpenAI, OpenRouter
Куда уходили данные
Собранные учётные данные отправлялись по HTTP на IP-адрес 193.32.204.199. Утекали и ключи, давно удалённые из текущей кодовой базы, но оставшиеся в истории Git.
Хронология и масштаб
| Этап | Детали |
|---|---|
| Первоначальная доставка | Вредоносный код доставлен 160 известным жертвам |
| Массовое внедрение | Спустя 20 минут началось массовое внедрение в 28 000 новых репозиториев |
| Предыдущие атаки (август–сентябрь) | Вредоносные процессы найдены в 772 публичных репозиториях; из 3 669 запусков успешно завершились 336, что привело к краже 26 секретов из 13 репозиториев |
| Очистка репозиториев | К 5 октября очистить репозитории от вредоносного кода успели 16% пострадавших (124 из 772) |
Почему опасны ключи, удалённые из кода
Секрет, удалённый из текущей кодовой базы, может оставаться в истории Git. Сканируя историю коммитов, злоумышленники получают доступ к таким ключам. Если ключи не отозваны, они остаются действительными.
Что делать
- Проверьте журналы аудита GitHub и активность PAT: какие аккаунты изменяли файлы в .github/workflows/
- Изучите историю запусков Actions, чтобы понять, какие секреты могли попасть к хакерам
- Немедленно отзовите учётные данные всех скомпрометированных аккаунтов с правом записи, даже если вредоносный процесс уже удалён
- Перевыпустите облачные ключи, учётные данные для развертывания, токены реестров и API-ключи ИИ-провайдеров
- Смените пароли и ключи, удалённые из кода месяцы назад: они могли остаться валидными и утечь после сканирования истории Git
Отзыв и перевыпуск учётных данных
После отзыва скомпрометированных PAT перевыпустите все ключи и токены, которые могли быть скомпрометированы: облачные ключи AWS, токены GitHub и GitLab, ключи Google и Firebase, API-токены Anthropic, OpenAI и OpenRouter. Новые учётные данные не должны храниться в открытом виде в репозиториях.
Как защитить CI/CD на будущее
- Используйте минимально необходимые привилегии для PAT и других токенов
- Регулярно проводите аудит журналов GitHub Actions и активности PAT
- Настройте обязательное одобрение для запуска workflow из форков и внешних PR
- Применяйте инструменты сканирования секретов (например, GitGuardian) для обнаружения утечек в реальном времени
- Храните секреты в защищённых хранилищах (GitHub Secrets, HashiCorp Vault) и не допускайте их попадания в историю Git
- Периодически проверяйте историю коммитов на наличие секретов и при обнаружении немедленно отзывайте их
Какие учётные данные искали злоумышленники?
Ключи AWS, токены PAT от GitHub и GitLab, ключи Google и Firebase, а также API-токены ИИ-провайдеров, включая Anthropic, OpenAI и OpenRouter.
Куда отправлялись украденные данные?
Все собранные учётные данные отправлялись по протоколу HTTP на IP-адрес 193.32.204.199.
Почему опасны ключи, удалённые из кода?
Они могут оставаться в истории Git и быть извлечены злоумышленниками при сканировании. Если ключи не отозваны, они остаются действительными.
Что делать, если репозиторий мог быть скомпрометирован?
Проверьте журналы аудита и активность PAT, отзовите все скомпрометированные учётные данные, перевыпустите ключи и токены, даже если они были удалены из кода ранее.