4,837
GitHub accounts hijacked by wfx-loot attackers to inject the CI secret-stealing payload via malicious pull requests
61,764
repositories probed via malicious pull requests in under 48 hours, making this the largest GitHub Actions supply chain attack on record
1,806
repositories confirmed to have executed the payload and had AWS, Azure, GCP, and AI platform credentials exfiltrated
89.6%
of large organizations worldwide have at least one employee credential captured by infostealer malware, feeding the access economy that powers attacks like wfx-loot

Reach 50,000+ security professionals

Sponsor a newsletter slot and put your brand in front of CISOs, engineers, and IT decision-makers.

Summarize with:

The wfx-loot campaign hijacked 4,837 GitHub accounts between November 10 and 12, 2026, and injected a CI secret-stealing shell script into 61,764 repositories via malicious pull requests, exfiltrating cloud credentials from at least 1,806 pipelines in under 48 hours. The stolen secrets include AWS access keys, Azure service principal credentials, GCP service account keys, SSH keys, and AI platform tokens -- and security researchers at Chainguard have confirmed that the attack creates persistent cloud backdoors in Azure and AWS that survive full token rotation.

The attack exploits a structural weakness in how GitHub Actions handles OIDC-based cloud authentication. When a compromised workflow runs the wfx-loot payload, the script does two things beyond stealing credentials: it creates Azure federated identity credentials on app registrations (naming them with a wfx-ci- prefix) and modifies AWS IAM role trust policies to include wildcard conditions that allow any repository under attacker control to assume the role. Both modifications survive GitHub secret rotation, letting the attacker authenticate to your cloud environment using OIDC-based workflows from any repository they control -- even after you believe the incident is contained.

Every organization with public GitHub repositories using GitHub Actions workflows connected to cloud environments is at risk. The campaign specifically targets workflows with cloud-write permissions: the same configuration most organizations use for production CI/CD deployments, infrastructure as code pipelines, and automated release processes. If your organization has any GitHub Actions workflows that authenticate to AWS, Azure, or GCP, and those workflows ran between November 10 and 13, 2026, you need to audit your cloud IAM configuration before rotating secrets -- token rotation alone is not remediation.

How Does the wfx-loot GitHub Actions Attack Work?

The wfx-loot attack chains three steps into a supply chain credential theft pipeline. First, attackers compromised 4,837 GitHub accounts through credential stuffing, phishing, or infostealer logs. With these accounts, they opened pull requests against thousands of public repositories, injecting a roughly 1,500-line shell script into existing workflow files, npm install hooks, or new workflows on throwaway branches named wfx-docs or matching the chore/* pattern.

Second, when any user or automated CI system triggered a workflow run on the modified branches -- including automated checks triggered by the pull request itself -- the shell script executed. The script collected every secret available to the workflow runner: GitHub Actions secrets, cloud provider credentials loaded from environment files, SSH keys, session tokens, API keys for AI platforms, and any secret injected via CI environment variables.

Third, the script exfiltrated the collected credentials via HTTPS POST requests to attacker-controlled endpoints and simultaneously created persistence backdoors in every cloud environment it could reach. For AWS, it modified IAM role trust policies to allow any repository under attacker control to assume the role via OIDC. For Azure, it created federated identity credentials on app registrations. For GCP, it generated service account keys. All three persistence mechanisms are independent of the GitHub secrets themselves -- they live in your cloud IAM configuration, not in GitHub.

The TeamPCP and Megalodon GitHub Actions campaigns in May 2026 demonstrated this attack pattern at smaller scale. wfx-loot scaled the same approach to nearly 62,000 repositories in 48 hours using hijacked accounts rather than compromised third-party Actions.

Cloud Credential Persistence: Why Token Rotation Is Not Enough

Most incident response playbooks treat secret rotation as the primary remediation for credential theft. wfx-loot's persistence mechanism makes that instinct dangerous for this campaign specifically.

When the payload script successfully authenticates to Azure using stolen credentials, it calls the Azure AD API to create a new federated identity credential on the organization's app registration. The new credential is named using the wfx-ci- prefix and configured to trust OIDC tokens issued by GitHub Actions from any repository the attacker controls. After creating this credential, the attacker no longer needs the stolen GitHub secret -- they can generate a fresh GitHub OIDC token from any repository they own, present it to Azure, and authenticate as the compromised app registration.

Rotating your GitHub Actions secrets does not remove the federated credential from your Azure app registration. The backdoor lives in Azure AD, not in GitHub. The only remediation is to explicitly list and delete every federated identity credential on your app registrations and verify no wfx-ci- prefixed entries exist.

The AWS persistence mechanism works similarly. The payload modifies IAM role trust policies to add wildcard conditions on the sub claim in GitHub OIDC tokens, allowing any repository to assume the role. After this modification, the attacker can create a repository named to match the trust policy pattern and authenticate without any secret. Remediating this requires reviewing every IAM role trust policy that includes GitHub as an OIDC identity provider and reverting any wildcard conditions that do not match your expected workflow paths.

Chainguard's analysis confirms that absence of wfx-loot artifacts in the runner environment does not prove clean containment -- the cloud backdoors can persist even after the malicious branches are deleted and GitHub secrets rotated.

Free daily briefing

Briefings like this, every morning before 9am.

Threat intel, active CVEs, and campaign alerts, distilled for practitioners. 50,000+ subscribers. No noise.

Who Is Affected by wfx-loot?

The attack targets any organization meeting three conditions: a public GitHub repository, GitHub Actions workflows enabled, and cloud provider credentials available to those workflows. This describes the standard CI/CD configuration for the majority of software organizations using GitHub.

The affected credential types span the full cloud provider stack. AWS access keys and IAM roles configured for OIDC federation with GitHub are the highest-value targets -- they provide direct access to cloud infrastructure, S3 buckets, Secrets Manager, and Lambda functions. Azure service principal credentials and app registrations with federated identity configured for GitHub are equally high risk. GCP service account keys provide access to Cloud Storage, GKE clusters, and Secret Manager. The payload also collects SSH keys, Kubernetes cluster tokens, container registry credentials, NPM tokens, PyPI tokens, and API keys for OpenAI, Anthropic, and other AI platforms.

Technology and financial services organizations face the highest blast radius given their typical CI/CD pipeline density. Healthcare and government organizations running GitHub-based infrastructure pipelines are also directly in scope. Any organization that hosts its own GitHub Enterprise Server instance and allows GitHub Actions is exposed to the same attack class, though the wfx-loot campaign specifically targeted github.com public repositories.

The LiteLLM supply chain attack in mid-2026 demonstrated that CI/CD credential theft at scale translates directly to downstream infrastructure compromise. wfx-loot targets the same attack surface at an order of magnitude larger scope.

wfx-loot Indicators of Compromise

The indicators below represent confirmed artifacts from the wfx-loot campaign. The cloud IAM indicators (Azure federated credentials, AWS CloudTrail session names) are the highest-priority checks -- they confirm active post-compromise persistence regardless of whether the original GitHub branches or secrets still exist.

Subscribe to unlock Indicators of Compromise

Free subscribers unlock full IOC lists, Sigma detection rules, remediation steps, and every daily briefing.

Sigma Detection Rules for wfx-loot

The two rules below target the highest-confidence wfx-loot indicators: AWS CloudTrail session names matching the attacker's OIDC token pattern and Azure AD federated identity credential creation with the wfx-ci- prefix. Both carry experimental status; validate against your cloud audit log format before enabling automatic blocking.

Subscribe to unlock Sigma Detection Rules

Free subscribers unlock full IOC lists, Sigma detection rules, remediation steps, and every daily briefing.

Subscribe to unlock Sigma Hunt Queries

Free subscribers unlock full IOC lists, Sigma detection rules, remediation steps, and every daily briefing.

Subscribe to unlock WAF Detection Rules

Free subscribers unlock full IOC lists, Sigma detection rules, remediation steps, and every daily briefing.

How to Verify and Close This Gap

The remediation steps below prioritize cloud IAM audit before secret rotation specifically because wfx-loot's persistence mechanism makes rotation incomplete without the IAM cleanup. Work through these in order: steps 1 through 4 close active backdoors; steps 5 through 7 reduce future exposure.

Subscribe to unlock Remediation & Mitigation steps

Free subscribers unlock full IOC lists, Sigma detection rules, remediation steps, and every daily briefing.

Why GitHub Actions Security Gaps Are a Tier-1 Cloud Threat

GitHub Actions is now one of the highest-value attack surfaces in enterprise cloud security. The pipeline represents a privileged bridge between developer workstations, source code, and production cloud infrastructure -- and unlike most enterprise systems, its permissions are managed at the repository level by developers who may not have security training.

The wfx-loot campaign's scale -- 61,764 repositories probed in 48 hours using hijacked accounts -- reflects an attacker discovery that GitHub credential theft via supply chain injection is cheaper and more scalable than direct cloud credential targeting. A single compromised GitHub account with write access to 20 repositories is worth more than 20 individually phished cloud passwords because each pipeline secret includes cloud credentials with production deployment permissions.

The persistence mechanism makes this worse than a standard credential theft incident. Standard playbooks treat the attack as a data exfiltration event resolved by rotation. wfx-loot turns each compromised pipeline into an ongoing identity federation backdoor, shifting the attack from credential theft to persistent cloud identity compromise. The window between initial compromise and cloud IAM modification may be seconds -- the shell script creates Azure federated credentials immediately after authenticating.

Organizations that run more than 10 GitHub repositories with cloud-connected Actions workflows should treat GitHub Actions permission hygiene as an equivalent priority to cloud IAM hygiene. The two are now the same attack surface.

The bottom line

The wfx-loot campaign confirms that GitHub Actions supply chain attacks now reach cloud infrastructure directly, with persistent backdoors that survive token rotation. Treat every GitHub organization running cloud-connected Actions workflows as a potential victim: list Azure app registration federated credentials today and delete any named wfx-ci-*, check AWS CloudTrail for AssumeRoleWithWebIdentity sessions prefixed wfx-, and treat every secret available to any workflow that received a probe pull request in the last 72 hours as compromised. The IAM audit must precede secret rotation -- rotating secrets without removing the cloud backdoors closes the door but leaves the attacker's key in the lock.

This analysis is generic. create a free account to score threats like this against your own stack.

Frequently asked questions

What is the wfx-loot GitHub Actions attack?

wfx-loot is a November 2026 GitHub Actions supply chain attack in which threat actors compromised 4,837 GitHub accounts and used them to open malicious pull requests against 61,764 public repositories. The pull requests injected a CI secret-stealing shell script into existing workflow files. When workflows ran on the modified branches, the script exfiltrated AWS, Azure, GCP, and AI platform credentials and created persistent cloud backdoors via Azure federated identity credentials and AWS IAM role trust policy modifications. Aikido Security first documented the campaign on November 12, 2026.

How do I check if my organization's repositories were targeted?

Check your GitHub repository for open or recently closed pull requests from accounts you do not recognize that modified files in the .github/workflows/ directory. Search for the wfx-docs and chore/* branch names in your repository list. For each repository that may have executed a modified workflow, check your cloud provider audit logs: AWS CloudTrail for AssumeRoleWithWebIdentity events with session names starting with wfx-, and Azure AD Audit Logs for federated identity credential creation events with names containing wfx-ci-. Any match confirms the payload executed in your pipeline.

Why doesn't rotating my GitHub secrets fix the problem?

The wfx-loot payload creates cloud backdoors that are independent of GitHub secrets. For Azure, it creates federated identity credentials on your app registrations, allowing the attacker to generate fresh GitHub OIDC tokens from any repository they control and authenticate as your app without any GitHub secret. For AWS, it modifies IAM role trust policies to allow any repository to assume the role via OIDC. Both backdoors live in your cloud provider's IAM configuration and survive GitHub secret rotation completely. You must audit and clean up Azure federated credentials and AWS IAM trust policies before or alongside secret rotation.

What is a GitHub Actions CI secret?

A GitHub Actions CI secret is an encrypted value stored in a GitHub repository or organization that is exposed as an environment variable during workflow runs. Organizations use them to store cloud provider credentials, API keys, deploy tokens, SSH keys, and other sensitive values that workflows need to authenticate to external services. They are not visible in workflow logs and can only be used during workflow execution. The wfx-loot payload accessed these secrets by executing within the workflow itself, where the GitHub runner decrypts and exposes them as environment variables.

How do I remove an Azure federated identity credential created by wfx-loot?

Use the Azure CLI to list federated credentials on your app registrations: run `az ad app list --query '[].{appId:appId,displayName:displayName}' -o table` to get your app IDs, then `az ad app federated-credential list --id <appId> --query '[].{id:id,name:name}'` for each app. Delete any credential with a name starting with wfx-ci- using `az ad app federated-credential delete --id <appId> --federated-credential-id <credentialId>`. Repeat for every app registration your GitHub workflows can authenticate to. This eliminates the Azure-side backdoor that persists through GitHub secret rotation.

How do I check my AWS IAM role trust policies for wfx-loot modifications?

List IAM roles configured to trust GitHub OIDC by running `aws iam list-roles` and filtering for roles whose trust policy references token.actions.githubusercontent.com. For each such role, run `aws iam get-role --role-name <roleName> --query 'Role.AssumeRolePolicyDocument'` and examine the condition on the sub claim. A trust policy that uses a wildcard in the sub condition, or references a repository you do not own, was likely modified by wfx-loot. Revert the trust policy to its expected value and run `aws iam list-access-keys --user-name <user>` to identify any access keys created during the compromise window.

How do I audit my GitHub Actions history for the wfx-loot payload?

In your repository, navigate to the Actions tab and filter by the branch names wfx-docs and chore/*. Review any workflow run triggered in the past 72 hours from an unrecognized pull request author. In the workflow run logs, look for base64-encoded payloads in environment variable setup, curl or wget commands posting to unknown endpoints, or commands generating credentials using aws sts assume-role-with-web-identity or az login --federated-token. If you have self-hosted runners, examine runner process logs for the shell script execution pattern described in Chainguard's advisory.

How do I protect my CI/CD pipelines from GitHub supply chain attacks going forward?

Pin all third-party GitHub Actions to full commit SHAs instead of version tags -- tags are mutable and can be silently repointed to malicious code. Apply the principle of least privilege to workflow permissions: set permissions: read-all at the workflow level and add write-only where specific steps require it. Use GitHub's OIDC integration with time-bound, narrow-scoped IAM conditions on the sub claim rather than wildcard trust policies. Enable GitHub Advanced Security secret scanning with push protection. For cloud-critical workflows, require pull request approval from a code owner before any workflow modification takes effect.

Sources & references

  1. wfx-loot: Stolen GitHub Tokens Pushed a CI Secret Stealer into 60,000+ Repositories -- Chainguard
  2. wfx-loot 2026: 4,800 GitHub Accounts Hijacked to Steal Cloud Credentials -- Aviatrix
  3. Hijacked GitHub Accounts Push 'wfx' CI Secret Stealer to Thousands of Repositories -- Endor Labs
  4. Check Your GitHub Repos: A Secret Stealer Hit Tens of Thousands of Them -- Help Net Security
  5. Security Hardening for GitHub Actions -- GitHub Docs
Summarize with:

Free resources

25
Free download

Critical CVE Reference Card 2025–2026

25 actively exploited vulnerabilities with CVSS scores, exploit status, and patch availability. Print it, pin it, share it with your SOC team.

No spam. Unsubscribe anytime.

Free download

Ransomware Incident Response Playbook

Step-by-step 24-hour IR checklist covering detection, containment, eradication, and recovery. Built for SOC teams, IR leads, and CISOs.

No spam. Unsubscribe anytime.

Follow Decryption Digest

Daily briefings + Google Top Stories in one step.

Enter your email and we'll subscribe you to the daily briefing and add Decryption Digest to your Google Search feed at the same time.

Free. Unsubscribe anytime. Google popup confirms the Top Stories add.

Eric Bang
Author

Founder & Cybersecurity Evangelist, Decryption Digest

Cybersecurity professional with expertise in threat intelligence, vulnerability research, and enterprise security. Covers zero-days, ransomware, and nation-state operations for 50,000+ security professionals every morning.

Daily Briefing

Get briefings like this every morning

Actionable threat intelligence for working practitioners. Free. No spam. Trusted by 50,000+ SOC analysts, CISOs, and security engineers.

Unsubscribe anytime.

Mythos Brief

Anthropic's AI finds zero-days your scanners miss.