Нова кампания GhostAction е компрометирала 346 GitHub репозитория, след като атакуващи са използвали два отвлечени акаунта на поддържащи ги потребители (maintainers), за да добавят фалшив работен процес (workflow) за „одит на сигурността“, предназначен да краде CI/CD тайни, облачни ключове, API токени и идентификационни данни, съхранявани в историята на изходния код.

Фирмата за сигурност Socket съобщи, че активността от 8 октомври е засегнала репозитория, свързани с GitHub акаунтите henrywoo и kitao. Сред целите са репозиторият uber/athenadriver на Uber и популярният проект kitao/pyxel, който има над 18 000 звезди в GitHub.

Зловредният файл .github/workflows/security-audit.yml е бил добавен чрез комити с имена „Add security audit workflow“ и „Update security audit workflow“.

Кампанията показва как откраднат акаунт на поддържащ GitHub проект може да изложи на риск много повече от едно лично репозиторий. След като атакуващите получат достъп за запис, те могат да добавят GitHub Actions workflow към всяко репозиторий, което акаунтът има права да променя.

GhostAction Attack

След това работният процес се изпълнява автоматично, когато разработчиците изпращат код (push), поставяйки чувствителните CI/CD данни за достъп в обсега на атакуващия. Според разследването на Socket относно GhostAction, злонамереният работен процес изпраща откраднатите данни чрез HTTP POST заявка към 193.32.204[.]199.

Той събира GitHub Actions тайни, реферирани от съществуващите работни процеси на проекта, включително PyPI пароли, crates.io токени, лични токени за достъп до GitHub и данни за публикуване на пакети.

Зловреден GitHub Actions работен процес
Зловреден GitHub Actions работен процес (Източник на изображението: Socket)

По-новата версия на GhostAction също така търси твърдо кодирани (hardcoded) тайни в активните файлове на репозиторието и в пълната Git история. Това е съществена промяна, тъй като разработчиците могат да премахнат даден ключ от текущия файл, но да го оставят открит в по-стари комити, клонове (branches) или тагове. Работният процес използва fetch-depth: 0, което изтегля пълната история на репозиторието преди извършване на търсенето в нея.

Изследователите са установили, за зловредният код търси AWS access key ID, AWS тайни ключове, временни токени за сесия, токени за достъп до GitHub и GitLab, Google API ключове, Slack токени, SendGrid данни за достъп и API ключове за OpenAI, Anthropic и OpenRouter.

Той също така прихваща заобикалящите ги редове около AWS key ID, което може да помогне на атакуващите да локализират съответстващия таен ключ, необходим за използване на AWS акаунт.

Активността изглежда силно автоматизирана. Socket наблюдава 318 засегнати репозитория под пространството от имена henrywoo, включително 279 разклонения (forks), както и 27 репозитория под kitao и athenadriver на Uber.

Комитите са били изпратени за кратки времеви прозорци, включително в неактивни репозитория, в които не е имало промени от години. Този модел подсказва, че извършителят е използвал автоматизирано откриване на репозитория, вместо да избира проекти един по един.

Предупреждение за зловреден работен процес в AthenaDriver
Предупреждение за зловреден работен процес в AthenaDriver (Източник на изображението: Socket)

Инцидентът следва по-ранни операции GhostAction, документирани от GitGuardian. През септември 2025 г. GitGuardian установи, че кампанията е компрометирала 817 репозитория и е откраднала най-малко 3 325 тайни.

По-късна вълна, продължила от края на август до септември 2026 г., засяга още 772 публични репозитория и е насочена към 2 577 тайни.

По-старият зловреден код е бил фокусиран върху GitHub Actions тайни, докато тази най-нова версия търси и идентификационни данни, вградени в изходния код и историята на комитите.

Въздействието може да надхвърли пределите на засегнатите репозитория. Откраднати credentials за PyPI, npm, Docker Hub или crates.io могат да позволят на атакуващ да публикува компрометирано обновяване на пакет от доверен проект.

Този риск е особено сериозен за популярните библиотеки с отворен код, тъй като злонамерен релийз може да достигне до разработчиците надолу по веригата и до производствени системи (production systems).

Cyber Security News по-рано отрази как компрометиран GitHub Action извлича credentials от работни процеси, показвайки, че CI/CD средите остават ценна цел за операторите на атаки срещу веригата за доставки (supply chain).

Към 9 октомври от Socket заявяват, че не са идентифицирали злонамерени пакети, публикувани в PyPI или crates.io от тази последна активност. Въпреки това, поддържащите проекти трябва да третират всяко успешно изпълнение на работния процес като потенциално изтичане на идентификационни данни. Самото премахване на работния процес не е достатъчно.

Засегнатите екипи трябва да отменят GitHub сесии, лични токени за достъп, OAuth права, SSH ключове и всички тайни, посочени в злонамерения работен процес. Те трябва също да сканират цялата Git история, да прегледат записите за изпълнение на GitHub Actions, да инспектират историята на публикуване на пакети и да търсят в мрежовите логове за трафик към 193.32.204[.]199.

GitHub сканирането за тайни със защита при изпращане (push protection), строгите правила за клонове при промени в .github/workflows/ и разрешенията с най-малко привилегии могат да намалят бъдещия риск.

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

IOC типИндикаторОписание
Път до файла на работния процес.github/workflows/security-audit.ymlПът до злонамерен файл на работния процес
Път до файла на работния процес.github/workflows/github_actions_security.ymlАлтернативен път до злонамерен файл на работния процес
Съобщение при комитAdd security audit workflowСъобщение при комит, свързано с инжектиране на работния процес
Съобщение при комитUpdate security audit workflowСъобщение при комит, свързано с инжектиране на работния процес
Съобщение при комитAdd Github Actions Security workflowАлтернативно съобщение при комит, свързано с инжектиране на работния процес
Маркер в тялото на заявкатаREPO=Идентификационен маркер за репозиторий в тялото на изходящата заявка
Маркер в тялото на заявкатаAKIA_CTX_STARTНачален маркер за събран контекст на AWS идентификационни данни
Маркер в тялото на заявкатаAKIA_CTX_ENDКраен маркер за събран контекст на AWS идентификационни данни
C2 IP адрес193.32.204[.]199Дестинация, използвана за получаване на откраднати данни за достъп