GhostAction спрятала стилер в шрифте в 94 репозиториях GitHub

Операторы GhostAction внедрили второй этап атаки в 94 скомпрометированных репозиториях GitHub: стилер замаскирован под файл шрифта public/fonts/fa-solid-400.woff2, а запуск обеспечивается конфигурацией VS Code. OpenSourceMalware связывает эти репозитории с 66 владельцами; 15 проектов позднее были удалены, переименованы или переведены в приватный режим.
Фишинг и доступ к репозиториям
Кампания развивает схему, в которой злоумышленники внедряли вредоносные GitHub Actions workflow в скомпрометированные проекты. Для захвата учётных записей они зарегистрировали домен my-github[.]com, направленный на IP-адрес 193.32.204[.]199, уже использовавшийся для приёма данных из вредоносного workflow.
В день регистрации домена разработчику открытого ПО отправили письмо от noreply@my-github[.]com, имитирующее предупреждение GitHub о входе в аккаунт из Москвы. Фальшивая страница работала как обратный прокси: она перехватывала пароль и код двухфакторной аутентификации.
Страница также автоматически одобряла OAuth device flow через авторизованную сессию жертвы. Получив токен с правами repo, workflow и read:org, атакующие могли читать и изменять репозитории, редактировать файлы GitHub Actions и получать сведения об организациях. Токен отправлялся на сервер атакующих по TCP-порту 8443.
Закрепление на машине разработчика
Во втором этапе в репозиторий добавляют три компонента. Файл tasks.json для Visual Studio Code содержит триггер runOn: folderOpen, поэтому запускается при открытии папки проекта в редакторе. Он активирует стилер, спрятанный в файле шрифта.
Вредоносная программа ищет ключи AWS, токены PyPI и npm, логины Git, учётные данные кластеров Kubernetes, приватные SSH-ключи, а также учётные данные для Anthropic Claude и Google Gemini. После сбора она создаёт cron-задачу, запускающую код атакующих каждые пять минут, и отправляет результаты по незашифрованному HTTP на порт 8080.
Третий компонент — дополнительный workflow GitHub Actions. Он повторяет исходный механизм, но ищет больше форматов учётных данных и при неудачной отправке может выгрузить найденное в секретный GitHub gist. Среди использованных имён файлов исследователи перечисляют lint.yml, ci-check.yml, build-check.yml, repo-health.yml, audit.yml, code-review.yml, test-suite.yml и cache-cleanup.yml.
Почему одного удаления workflow недостаточно
GitHub начал предотвращать запуск исходного вредоносного workflow 9 октября: волны атак 10 и 12 октября не извлекли секреты. По оценке OpenSourceMalware, второй этап появился через шесть дней и переносит исполнение с CI-раннера на машину разработчика, где контроль GitHub не действует.
Из 79 остававшихся доступными репозиториев 65 не получали коммитов больше года, а один не обновлялся свыше девяти лет. Это делает особенно важной проверку старых зависимостей и форков, которые могут открываться локально в VS Code.
При подозрении на компрометацию разработчикам следует с чистого устройства отозвать доступ GitHub и токены, сменить пароль, проверить репозитории и заменить все секреты, к которым могли обратиться workflow. Организациям также нужно уведомить пользователей, клонировавших затронутые проекты, и отдельно проверить tasks.json, неизвестные workflow и файлы шрифтов в рабочем дереве.

