TeamPCP compromises the tools developers and pipelines trust, then uses the tokens those tools can reach to publish poisoned releases of other projects, turning each victim's credentials into the next victim's malware. This profile uses MITRE ATT&CK (G1056), the FBI FLASH on TeamPCP of 2 July 2026, Aqua Security's Trivy advisory, Palo Alto Networks Unit 42 and Trend Micro research. It covers who the group is, the credential types it hunts, the 2026 cascade of compromises, and the controls and detections that stop the chain. It is for platform, DevSecOps, cloud and security operations teams; attribution follows each source's wording, and several links are the group's own claims.
Key takeaways
- The product is credentials. The FBI says TeamPCP aims to extract cloud access tokens, SSH keys and Kubernetes secrets, and that stolen data may be weaponised long after the initial compromise.
- Each compromise funds the next. Unit 42 traces PyPI tokens taken in the Trivy compromise to the LiteLLM releases, and npm tokens to 47 more packages infected in under 60 seconds. Rotation speed decides the blast radius.
- Mutable references are the entry point. 76 of 77 trivy-action tags were force-pushed to malicious commits; workflows that referenced a tag ran the stealer, while pins to a safe commit SHA did not.
- Incomplete rotation kept the door open. Aqua's advisory says rotation after the 1 March disclosure was not atomic, so the attacker may have used a still-valid token to steal the new secrets.
- Monetisation is extortion. MITRE and Unit 42 report partnerships with the Vect and CipherForce ransomware groups and leak-site publication, so a pipeline leak can become a ransomware incident weeks later.
Who they are (names and aliases)
MITRE ATT&CK added TeamPCP as G1056 in 2026 and describes a financially motivated, cloud-native group active since at least September 2025. It began with ransomware and cryptocurrency theft and shifted in early 2026 to worm-driven credential theft and supply chain attacks on CI/CD workflows. The group names itself, posts on Telegram and X, and its payloads label themselves "TeamPCP Cloud stealer", so some links rest on self-identification; Socket noted that could be a false flag.
| Name | Source | Notes |
|---|---|---|
| TeamPCP (G1056) | MITRE ATT&CK; FBI | Primary name |
| PCPcat, ShellForce, DeadCatx3 | MITRE; Unit 42 | Earlier or alternative self-used names |
| UNC6780 | MITRE (Google Threat Intelligence naming) | Uncategorised cluster designation |
| SHADOW-WATER-058 | Trend Micro | Medium-high confidence for the campaign cluster, low confidence for identity, origin and any state affiliation |
Malware associated by MITRE: TeamPCP Cloud Stealer (S9041), a filesystem stealer covering more than 50 sensitive paths; CanisterWorm (S9042), a self-propagating npm worm with a wiper and command and control through an Internet Computer Protocol canister; and Mini Shai-Hulud (S9043), derived from Shai-Hulud, which can use stolen npm and GitHub OIDC tokens to spread to other packages of a compromised maintainer. The FBI adds SANDCLOCK and a Mini Shai-Hulud variant called Miasma. See the Threat Actor Naming Conventions Guide.
Targeting and motivation
- Developer and security tooling: the FBI says the group targets widely used developer and security tools because they offer supply chain entry points. Security scanners are prized: they run in privileged pipelines with broad secret access.
- Cloud-exposed services: Unit 42 reports earlier mass exploitation of React2Shell (CVE-2025-55182, in the CISA KEV catalogue since 5 December 2025) and scanning for exposed Docker APIs on port 2375, plus cryptocurrency mining.
- AI tooling: LiteLLM, xinference and the Mistral SDK were affected, and Unit 42 lists LLM API keys such as OPENAI_API_KEY and ANTHROPIC_API_KEY among targets.
- Motivation: financial. MITRE records extortion, partnerships with ransomware actors, cryptocurrency theft and, in May 2026, a claim of co-ownership of the BreachForums criminal forum. Trend Micro reports the Vect group publishing victims with data attributed to TeamPCP-stolen credentials from 15 April 2026.
Tactics and techniques (MITRE ATT&CK)
All IDs are in MITRE's G1056 list (ATT&CK v20) and were checked against the official dataset.
| Tactic | Technique | What sources describe | Primary defence |
|---|---|---|---|
| Initial access | T1195.001 Compromise Software Dependencies and Development Tools | Coordinated attacks on npm, VS Code, Docker and PyPI ecosystems | Pin by SHA or digest; minimum package age |
| Initial access | T1078.004 Cloud Accounts | Stolen GitHub and registry credentials, including privileged service accounts such as aqua-bot | Short-lived, scoped publishing credentials |
| Initial access | T1190 Exploit Public-Facing Application | GitHub Actions misconfigurations; CVE-2025-55182 | Workflow hardening; patch KEV entries |
| Stealth | T1684.001 Impersonation; T1036.005 | Imposter commits cloning maintainer names, emails and timestamps | Require signed commits and review on release branches |
| Execution | T1677 Poisoned Pipeline Execution | Stealers injected into legitimate workflows and packages, including Trivy and KICS | Least-privilege workflow tokens; egress control on runners |
| Persistence | T1546.016 Installer Packages; T1176.002 IDE Extensions; T1543.002 Systemd Service | Preinstall scripts, poisoned VS Code and Open VSX extensions, systemd user services | Disable install scripts where possible; extension allowlists |
| Credential access | T1528; T1552.004; T1555.006 | Access tokens, SSH and GPG keys, and AWS, GCP and Azure secrets harvested | Vault-issued short-lived credentials; secret scanning |
| Lateral movement | T1550.001 Application Access Token | Stolen tokens used to inject code into other CI/CD workflows | Token scoping per repository; fast revocation |
| Execution | T1059.013 Container CLI/API; T1610 Deploy Container | Kubernetes API queried for service account tokens; privileged DaemonSets deployed | Restrict service account automount and DaemonSet creation |
| Defense impairment | T1553.002 Code Signing | Release workflows compromised so malicious packages carried legitimate signatures | Treat provenance as necessary, not sufficient |
| Stealth | T1027.003 Steganography | Payloads hidden in WAV files (telnyx) | Behavioural monitoring of package imports |
| Impact | T1485; T1486; T1657 | Wiper DaemonSets and recursive deletion; ransomware partnerships; extortion | Immutable backups of repositories and artefacts |
How they abuse identities and credentials
This is a non-human identity campaign end to end. Almost every step uses a machine credential: a bot account's personal access token, a registry publishing token, an OIDC token minted in a workflow, a Kubernetes service account token or a cloud access key.
- Bot and service accounts: Unit 42 reports the aqua-bot service account was compromised for the Trivy release. Long-lived PATs on bot accounts with write access to release tags are the highest-value target in this playbook. See the GitHub Personal Access Tokens Security Guide.
- Runner memory: the Trivy advisory says the injected action dumped runner process memory to extract secrets, and Unit 42 notes this bypassed GitHub's log masking. Any secret exposed to a job is exposed to code running in it.
- Publishing tokens: npm and PyPI tokens let the worm publish to every package a maintainer controls. Trusted publishing narrows this but, as MITRE notes for Mini Shai-Hulud, an OIDC token obtained inside a compromised workflow can still publish. See the npm Tokens Security Guide and the PyPI API Tokens and Trusted Publishing Security Guide.
- Account recovery: the FBI says the group exploited stale or expired recovery email domains on npm maintainer accounts to take over publishing credentials.
- Cloud and cluster credentials: Unit 42 lists instance metadata (IMDS) access, Kubernetes configs and service account tokens; Trend Micro advises reviewing CloudTrail for secretsmanager:ListSecrets, secretsmanager:GetSecretValue and ssm:DescribeParameters calls from CI roles. See the Kubernetes Service Account Token Guide.
- Fallback exfiltration through the victim: if exfiltration failed and a GitHub PAT was available, the Trivy payload created a public tpcp-docs repository on the victim's account. The FBI lists tpcp-docs and docs-tpcp as repository names to search for.
Notable incidents
| Date (2026) | Incident | Attribution as published |
|---|---|---|
| 19 to 22 March | Trivy Supply Chain Attack 2026: malicious v0.69.4, 76 of 77 trivy-action tags and all setup-trivy tags replaced; malicious Docker Hub images on 22 March. CVE-2026-33634, added to CISA KEV on 26 March | Self-identified as TeamPCP; MITRE and Unit 42 attribute |
| March to July | Checkmarx KICS Supply Chain Attack 2026: all 35 kics-github-action tags force-pushed in March (Unit 42); Docker images and VS Code extensions poisoned on 22 April using cached credentials | TeamPCP claimed it; Socket found overlaps but did not confirm |
| 23 to 24 March | LiteLLM PyPI Package Breach 2026: versions 1.82.7 and 1.82.8, the latter adding a .pth file that ran at every Python start, published with a token leaked when the compromised Trivy ran in LiteLLM's CI | Unit 42 and Snyk attribute |
| 27 March | telnyx PyPI Compromise 2026: versions 4.87.1 and 4.87.2 with the payload hidden in WAV files | Researchers attribute; Telnyx did not name the group |
| 29 April to 12 May | Mini Shai-Hulud 2026: SAP npm packages, then intercom-client, Mistral and OpenSearch packages | Wiz (high confidence, shared RSA key) and Socket attribute |
| 11 to 20 May | GitHub Internal Repositories Breach 2026: a token stolen in the TanStack compromise used to publish a poisoned Nx Console extension, leading to about 3,800 internal GitHub repositories | TeamPCP claimed the breach and offered the code for sale |
Exact dates vary by a day between sources because of time zones; the table follows the primary or most specific source. Trend Micro counts at least seven waves between 19 March and 24 April alone.
Detection and defence
Controls that break the cascade
- Pin everything immutable: the FBI and Aqua both recommend pinning GitHub Actions to full commit SHAs; Trend Micro adds pinning container images by digest. Aqua's advisory notes images referenced by digest were unaffected. See the GitHub and GitHub Actions Security Guide.
- Delay new versions: the FBI recommends a minimum package age, for example 7 days, in all installation environments. Most TeamPCP releases were pulled within hours.
- Rotate atomically, from a clean host: revoke every credential a compromised job could reach in one change window, not one at a time, and do it from a host outside the affected CI environment, as Trend Micro advises.
- Shrink what a job can steal: per-job, short-lived credentials (OIDC to cloud providers, scoped registry tokens), no long-lived PATs on bot accounts, and separate release jobs that never run third-party scanners. See the CI/CD Pipeline Identity Security Guide.
- Egress control on runners: allowlist HTTPS destinations; the FBI recommends runtime behavioural monitoring for unexpected outbound connections.
- Close workflow injection: Trend Micro points to untrusted event data such as ${{ github.event.comment.body }} interpolated into run: blocks as the flaw behind the elementary-data release.
- Protect maintainer accounts: phishing-resistant MFA for publishing access and audits of recovery email domains (FBI).
Detection signals
| Signal | Where to look | Technique |
|---|---|---|
| Tag force-push or tag moved to a new commit on an action or release repository | GitHub audit log and repository events | T1195.001, T1608.001 |
| Repositories named tpcp-docs or docs-tpcp in your organisation or users' accounts | GitHub organisation search (FBI, Aqua) | T1567 |
| CI runner connecting to new or lookalike domains, tunnels or blockchain gateways | Runner egress logs, DNS | T1583.001, T1583.006 |
| Package publish from an unexpected IP, token or outside the release workflow | npm and PyPI account security logs | T1078.004 |
| Secrets listing or bulk reads by CI or data pipeline roles | CloudTrail ListSecrets, GetSecretValue, DescribeParameters | T1555.006 |
| Python child processes making outbound HTTPS at start; .pth files over 100 KB in site-packages; Bun binaries in odd paths | EDR on developer and build hosts (Trend Micro) | T1059.006 |
| New privileged DaemonSets or service account token reads from unexpected pods | Kubernetes audit logs | T1610, T1059.013 |
For the response sequence, use the Malicious Package Worm Response Playbook and the CI/CD Pipeline Compromise Playbook.
Rollout
- Now: search for the affected versions and tpcp-docs repositories; if any pipeline ran an affected version, treat every secret it could reach as exposed and rotate them together.
- Weeks 1 to 2: inventory third-party actions, extensions and scanners in pipelines (the FBI's first CI/CD recommendation) and pin them by SHA or digest; use automated tooling so updates still flow.
- Weeks 2 to 6: replace bot-account PATs and long-lived registry tokens with OIDC and trusted publishing; enforce a minimum package age in a pilot repository first, with a documented override for urgent security fixes.
- Weeks 6 to 10: runner egress allowlists in audit mode, then enforce; alerts on tag moves and out-of-workflow publishes.
- Ongoing: tabletop a scanner compromise and measure how long full rotation takes.
Small vs large: a small team gets most value from SHA pinning, package age delay and trusted publishing. Large organisations with thousands of repositories need central policy (organisation-level allowed actions, registry proxies) and an automated rotation capability, because manual rotation is exactly where Aqua's incomplete rotation failed.
Metrics
- Percentage of workflow action references pinned to a full SHA.
- Long-lived publishing tokens and bot-account PATs remaining (target zero).
- Time to rotate every secret reachable from one pipeline, measured in exercises.
- Percentage of runners behind an egress allowlist.
- Installs blocked by the minimum package age policy, as evidence it is enforced.
Common failure patterns
- Trusting tags: a tag is a pointer the attacker can move.
- Rotating in stages: the Trivy sequel happened because one token survived the first rotation.
- Scanners in the release job: the LiteLLM token leaked because a scanner ran where publishing credentials lived.
- Assuming signatures mean safety: MITRE records malicious packages receiving legitimate signing from compromised release workflows.
- Missing one token: the GitHub breach page records Grafana Labs hit after one workflow token was missed during rotation.
Framework mapping
| Control area | NIST SP 800-53 Rev. 5 | NIST CSF 2.0 |
|---|---|---|
| Supply chain controls and provenance | SR-3, SR-4, SR-11 | GV.SC-05 |
| Integrity and signed components | SI-7, CM-14 | PR.DS-01 |
| Machine credential management | IA-5, IA-5(7) | PR.AA-05 |
| Least privilege for pipeline identities | AC-6 | PR.AA-05 |
| Inventory of third-party components | CM-8 | ID.AM-02 |
| Pipeline and runner monitoring | SI-4, AU-12 | DE.CM-09 |
| Eradication by full rotation | IR-4 | RS.MI-02 |
Practitioner checklist
- Search for tpcp-docs and docs-tpcp repositories and for the affected Trivy, KICS, LiteLLM and telnyx versions.
- Pin every GitHub Action to a full commit SHA and every container image to a digest.
- Enforce a minimum package age for npm and PyPI installs, with a documented override.
- Replace long-lived PATs and registry tokens with OIDC-based, short-lived, repository-scoped credentials.
- Keep scanners and third-party actions out of jobs that hold publishing or production credentials.
- Rehearse atomic rotation of every secret reachable from a pipeline, run from a clean host.
- Apply egress allowlists to CI runners and alert on new destinations.
- Require phishing-resistant MFA for maintainers and check recovery email domains.
Standards and references
- MITRE ATT&CK: TeamPCP (G1056)
- FBI: FLASH-20260702-01 TeamPCP
- Aqua Security: Trivy security advisory GHSA-69fq-xp46-6x23
- CISA: Known Exploited Vulnerabilities Catalog
- Palo Alto Networks Unit 42: TeamPCP supply chain attacks
- Trend Micro: Analyzing TeamPCP supply chain attacks
- MITRE ATT&CK: Compromise Software Dependencies and Development Tools (T1195.001)
- NIST: SP 800-53 Rev. 5
Related NHI Mgmt Group resources: Software Supply Chain Security Guide · Malicious Package and Dependency Confusion Guide · Git Secret Scanning Guide · Threat Actors Targeting SaaS and Cloud Identity Guide