SecurityThreats & vulnerabilitiesNote
Aikido’s count of the wfx-loot campaign of 10 and 11 November: how a stolen GitHub login became stolen CI secrets and cloud keys, what to check, and the settings that shut the door.
From 12:45 UTC on 10 November (6:15pm IST), 4,837 hijacked GitHub accounts opened pull requests in 61,764 repositories they could write to, each titled “docs: dependency audit notes”. The pull request was only a test of access. In at least 1,806 of those repositories a credential stealer then ran inside GitHub Actions, the service that runs a project’s build and deployment jobs, and the attacker reverted the change within a minute and deleted the run and its log, according to Aikido Security, which tracks the campaign as wfx-loot.1 Of the probe pull requests, 92% were still open when Aikido published on 12 November, which it reads as a sign that most owners had not noticed. About 50 of the hijacked accounts can publish packages to npm, PyPI, Go, crates or Packagist.1
4,837
hijacked GitHub accounts opened probe pull requests
Aikido
61,764
repositories probed, 10,431 of them through collaborator or organisation access
Aikido
1,806+
repositories where the stealer ran
Aikido
92%
of the probe pull requests still open on 12 November
Aikido
The theft does not come through the pull request. A stolen token that can write to a repository can also add or change the workflow files that GitHub Actions runs, and GitHub’s own guidance says “any user with write access to your repository has read access to all secrets configured in your repository.”3 Aikido saw three ways in: about 1,500 lines added to an existing workflow, a new workflow file on a throwaway branch, or an npm “postinstall” hook that runs a script on any install.1
A stolen token with write access was enough to run the stealer and erase the evidence
The four steps of the wfx-loot campaign in each repository, from 10 November 2026
Probe
wfx-docs branch confirms write access.Push
Run
Erase
Source: Aikido Security, write-up of 12 November 2026 · as of 13 November 2026
The script collects Actions secrets, the workflow’s own GitHub token, cloud credentials, AI service keys and key files. It then uses GitHub’s sign-in tokens for clouds (OIDC) to open cloud sessions, and tries to stay in: it posts fake “passed” results under the names of a repository’s required checks, rewrites an AWS role to trust any account, and adds a federated credential to Azure applications that outlives every rotated secret.1 Aikido found the payload carried into two published packages through automated release jobs, but reads the aim as CI secrets, not spreading through packages.1
Aikido does not say how the accounts’ credentials were stolen. Accounts hit by an October campaign were “significantly more likely than baseline” to be hit again, though it assesses the two as distinct campaigns.1 BleepingComputer reported that some of the hijacked accounts belonged to Fortune 100 companies, the US General Services Administration, the French government, Nextcloud and WebdriverIO; it did not say what was taken from them.2
Look for a wfx-docs branch, the probe pull request and gaps in workflow run numbers after 10 November. If the payload ran, Aikido’s advice is to treat every secret and cloud role available to that repository’s workflows as compromised.1 GitHub’s documentation offers four controls that each break one step:
environment:prod or refs/heads/main, so a token minted on a throwaway branch does not match.5Sources
Disclosure. TechBag is a software reseller: it earns when companies buy through it, including from vendors named here. The analysis is TechBag’s own; no vendor paid for or saw this piece before publication. Facts are labelled reported, TechBag count or our view.