Attacker Hijacks 4,837 GitHub Accounts to Deploy CI Secret Stealer Across 1,806 Repositories

An attacker leveraged stolen credentials from 4,837 GitHub accounts to insert a sophisticated secret-stealing workflow into at least 1,806 repositories. The campaign began with test pull requests titled "docs: dependency audit notes" from branches named wfx-docs, targeting 61,764 repositories before deploying the stealer in successful cases. Aikido Security and SafeDep researchers documented the use of both workflow modifications and npm postinstall hooks, with the malware exfiltrating GitHub tokens, cloud credentials, and repository data to attacker-controlled servers and Telegram. The stealer also reached several open-source packages, including a malicious Packagist release and two Go modules, though package users were not always impacted. Overlaps with the earlier GhostAction campaign suggest credential reuse across multiple threat actors. Repository owners are advised to revoke tokens, rotate all accessible secrets, and monitor for specific indicators such as wfx- prefixed federated credentials in Azure and AWS.

The Hacker NewsTranslated from English

Read at source

An attacker used stolen credentials for 4,837 GitHub accounts to plant a secret stealer in repositories those accounts could write to, according to Aikido Security. The stealer is built to take the secrets and cloud credentials that a repository's CI workflows can reach. It ran in at least 1,806 repositories, where the attacker has likely collected those credentials.

Each attack started with a pull request titled docs: dependency audit notes, opened from a branch named wfx-docs to test whether the account could write to the repository. These test pull requests were opened in 61,764 repositories, and the stealer followed in some of them. In a separate analysis, researchers at SafeDep counted 8,093 repositories that received malicious commits between 12:46 UTC on Tuesday and 04:36 UTC today.

In 7,309 of those repositories, the stealer was added to an existing workflow. In 771, it came as an npm postinstall hook. After pushing the stealer, the attacker usually reverted the change within minutes. Where the stealer ran, its logs were deleted, usually along with the run itself. In those repositories, every secret and cloud role available to the workflows should be treated as compromised.

Signs a Repository Was Hit include branches named wfx-docs, chore/[a-z0-9]{8}, or ci-check-[0-9]{4}, and commit messages such as ci: refresh build cache or chore: add ci helper. The stealer sends data by HTTP POST to addresses including 194.150.166.244:8080/exfil or to a Telegram chat. On self-hosted runners, it takes cloud credentials from instance metadata as well as Docker container state.

The stealer reached at least one Packagist package and one Go module through automated publishing triggers. Version 3.14.3 of the Packagist package digitalelvis/neuronai-studio is malicious. Two versions of the Go module github.com/onuragtas/docker-env (v1.0.278 and v1.0.280) carry the stealer only in a GitHub Actions workflow file. The stealer also reached 28 WebdriverIO repositories through commits authored as the bot account wdio-bot.

The accounts used this week overlap with those hit in GhostAction's October wave. Aikido said, "we don't attribute November to the same actor at this stage," because the infrastructure, tools, and methods differ.

Meridian digestThe week's most consequential security stories, distilled into one briefing.See the digest

More in Supply Chain & OSS

ConnectWise Investigates Active ScreenConnect Attacks Breaching MSPs and Impacting Dozens of Organizations
Threat Actors Compromise Qubole IAM Credentials to Breach Multiple Customer AWS Environments
Allan Friedman on SBOM Evolution, AI BOMs, VEX and the Future of Software Transparency