TeamPCP: the security scanner as the way in – profile of a supply-chain campaign
In 2026 TeamPCP demonstrated how a tool every CI/CD pipeline trusts can be turned into an access key to a thousand organisations. Trivy, Checkmarx KICS, LiteLLM, Telnyx: five days, five ecosystems, half a million stolen credentials. Two arrests in Australia change little about the fact that the stolen tokens are still in circulation. What the actor does, what it means for the Mittelstand and critical infrastructure, and what a SOC needs to see.
Who TeamPCP is.
TeamPCP is a financially motivated group that fits none of the usual boxes: not a state actor, not a classic ransomware crew, not a purely ideological outfit. CrowdStrike tracks it as Altered Spider, Google’s Threat Intelligence Group as UNC6780; the names DeadCatx3, PCPcat and ShellForce circulate in the scene, and the group’s own tool CanisterWorm is often used as a synonym for it. Oligo Security has traced its infrastructure back to 2020; in 2025 the group is said to have compromised more than a thousand software packages within four months.
The business model has drifted over the years. TeamPCP started with automated exploitation of exposed cloud control planes: open Docker APIs, unprotected Kubernetes clusters, forgotten Jupyter instances. That turned into cryptomining, data theft and extortion. From late 2025 came the step that put the group in the headlines: instead of attacking individual systems, TeamPCP compromises the tools developers use to build and test software, and harvests the credentials of everyone who runs those tools.
The March 2026 cascade.
The campaign that Malpedia and the FBI attribute to the group ran across five ecosystems in eight days. The sequence is the actual lesson.
| Date | Target | What happened |
|---|---|---|
| Late February | Trivy (Aqua Security) | Through a pwn-request flaw in Trivy’s own CI, TeamPCP obtains a privileged token of the service account that maintains releases |
| 19 March | Trivy | Using the token, a malicious binary v0.69.4 is published and 76 of 77 version tags of trivy-action plus all tags of setup-trivy are redirected to malicious code (CVE-2026-33634, CVSS 9.4). Active for about three hours, an estimated 10,000-plus pipeline runs affected |
| 20 March | npm | npm tokens harvested in Trivy runs spawn CanisterWorm, a self-propagating worm; 47 to more than 60 packages infected depending on the count. Command and control runs via canisters on the ICP blockchain, a technique not observed before |
| 23 March | Checkmarx KICS | All 35 tags of kics-github-action, one version of the AST action and the VS Code extensions on Open VSX are taken over with the same stolen credentials |
| 24 March | LiteLLM | A PyPI token that came from LiteLLM’s own pipeline, which scanned with Trivy, is used to publish versions 1.82.7 and 1.82.8. Live for about five hours; the second version installs a .pth file that steals credentials at every Python start-up. CloudSEK counts secrets from more than 2,500 organisations |
| 27 March | Telnyx Python SDK | Same stealer, same RSA key for encrypting the loot |
| 21/22 April | npm, KICS Docker Hub, xinference | Second wave after a 25-day pause; the Docker images were detected within about 30 minutes |
The harvest at every stage is credentials: cloud keys, SSH keys, Kubernetes secrets, Git tokens, publishing tokens for package registries. The credentials of one stage open the next. That is why replacing the compromised package is not enough: the pipeline that ran it once has already handed over its secrets.
Two details say something about the group’s character. The worm behaves differently by geolocation – in Iran as a wiper that destroys Kubernetes clusters, everywhere else as a stealer. And according to Socket, TeamPCP has begun passing compromised access on to the Vect ransomware group. That is the logic of an access broker: the break-in is the product, someone else does the monetising.
Arrests, advisory, open account.
On 2 July 2026 the FBI published a FLASH advisory on the campaign. Its core message: exfiltrated credentials are a persistent risk, because affiliated actors will use them long after the original incident. The advisory names four pieces of malware – CanisterWorm, SANDCLOCK, Mini Shai-Hulud and Miasma – and two concrete traces: repositories named tpcp-docs and docs-tpcp, which the worm creates in victims’ GitHub organisations using stolen credentials.
On 26 August 2026 the Australian Federal Police, working with the FBI, arrested two men aged 21 and 23 in Western Australia; the investigation had begun in April on tips from threat-intelligence firms. Authorities speak of more than a thousand potentially compromised organisations, half a million stolen credentials, at least 300 gigabytes of exfiltrated data and remediation costs in the hundreds of millions. Brian Krebs had identified the alleged leader back in June; he claims to have left the group in March, before the LiteLLM wave. Police have not ruled out further arrests.
Important for context: the second LiteLLM compromise of 21 October 2026 (version 1.107.0, via a never-revoked master key of an agent platform) is not currently attributed to TeamPCP; Socket found no link. That such a prominent project falls twice within seven months is nevertheless part of the same story: the attack path through release pipelines is now known, and it is being copied.
Why this concerns the Mittelstand and critical infrastructure.
The common reaction is: we don’t build AI gateways, this doesn’t affect us. Three reasons why that does not hold.
First, Trivy runs in a surprising number of pipelines that nobody would call software development – as the image scanner in a container platform, as a mandatory step in a compliance tool, as part of a product a service provider operates. Our own pipeline uses Trivy too. Anyone who does not know whether and where has the inventory problem every supply-chain question starts with.
Second, the credentials are the real asset. A cloud key that leaked from a CI runner in March still opens the same tenant in November if nobody rotated it. The FBI calls it a persistent risk; from a DFIR perspective it means the incident does not end with the patch but with proof that every reachable secret was replaced.
Third, this is a supply-chain problem in the NIS2 sense. Article 21 requires measures for supply-chain security and for handling vulnerabilities in one’s own development and procurement. A service provider whose pipeline runs Trivy via floating tags is a supplier with an open risk, and the question of how they handled it belongs in the supplier assessment.
What a SOC needs to see.
The campaign leaves traces in three places: in the pipeline, on the hosts and at the network edge. None of them needs exotic tooling.
| Where | Indicator | Implementation in XIEM |
|---|---|---|
| GitHub / GitLab | New repositories tpcp-docs or docs-tpcp; force-pushes to version tags; workflows referencing actions via floating tags instead of commit SHAs | Platform audit log into the SIEM, rule on tag force-push and unknown repo names; SHA pinning as policy |
| CI runners | Outbound connections during a scan step to destinations that are neither registry nor vulnerability feed; reads of environment variables, cloud metadata and ~/.npmrc, ~/.pypirc, ~/.kube/config | Runner egress logging, process telemetry via Wazuh agent on self-hosted runners |
| Python hosts | New .pth files or sitecustomize.py in site-packages; litellm 1.82.7/1.82.8 or 1.107.0 in the inventory | Wazuh FIM on site-packages, Syscollector check against version list |
| Kubernetes | Unknown DaemonSets, systemd services on nodes, connections to ICP canister endpoints | API server audit log, NetFlow of node networks |
| Registries | Packages with deviating build time or signature; versions not from your own lockfile | Archive an SBOM per build, run Grype/Trivy against the SBOM rather than the image, cross-check with Pwn-Watch entries |
The FIM rule on .pth files is the cheapest single measure with the best effort-to-effect ratio: it would have exposed the LiteLLM persistence of March and October alike.
Five actions.
- Inventory. Where does Trivy, KICS, LiteLLM or the Telnyx SDK run – directly, in images, at service providers? Without that list everything else is guesswork.
- Rotation. Every secret a pipeline running one of the affected tools could reach between 19 and 27 March or on 21/22 April counts as compromised – even without an alert. Same for hosts with litellm 1.107.0 in October.
- Pinning. Reference GitHub Actions only by commit SHA, never by tag; lock package versions in lockfiles and verify installs against the lockfile.
- Search. Search your GitHub organisation for tpcp-docs and docs-tpcp; search site-packages on all Python hosts for cook.pth and sitecustomize.py.
- Supplier question. Ask every service provider with pipeline access to your environment, in writing, whether and how they were affected and what was rotated. The answer belongs in your NIS2 documentation.
TeamPCP did not need a single zero-day. A sloppily configured workflow, an unrotated token and the trust every pipeline places in a security scanner were enough. The arrests may end the group. Not the method.
Sources
- Malpedia: TeamPCP (Threat Actor)
- FBI FLASH-20260702-01: Cyber Criminal Group TeamPCP(2026-07-02)
- Trend Micro: Your AI Gateway Was a Backdoor – Inside the LiteLLM Supply Chain Compromise(2026-03-26)
- Cloud Security Alliance: TeamPCP Supply Chain Cascade – When Security Tools Become Attack Infrastructure(2026-04-02)
- Cloud Security Alliance: TeamPCP (UNC6780) – AI Supply Chain's Most Active Threat Actor(2026-05)
- OpenSourceMalware: TeamPCP Supply Chain Campaign – A March 2026 Retrospective(2026-03)
- SANS: When the Security Scanner Became the Weapon(2026-03)
- Krebs on Security: Two Alleged 'TeamPCP' Hackers Arrested in Australia(2026-08-27)
- BleepingComputer: Australia arrests alleged TeamPCP hackers behind supply-chain attacks(2026-08-27)
- The Hacker News: Alleged TeamPCP Hackers Charged in Australia Over Major Supply Chain Attacks(2026-08-27)
- Infosecurity Magazine: TeamPCP Targets Telnyx Package in Latest PyPI Software Supply Chain Attack(2026-03-27)
- LiteLLM: Oct 21, 2026 release v1.107.0 compromised – incident report(2026-10-21)
- Cloud Security Alliance: The Unrevoked Key – Agent Credential to LiteLLM Release Hijack(2026-10-24)
- Kaspersky: Supply chain attack via Trivy and LiteLLM(2026-09)