TeamPCP’s Supply-Chain Campaign Used CI/CD Secrets to Spread Across Software Ecosystems

Summary
A detailed profile traces TeamPCP’s 2026 campaign from a Trivy CI/CD compromise through credential theft and propagation across package registries and developer tools, detailing its C2, persistence, exfiltration, and reported impacts.
Key points
- The article traces the campaign’s initial access to residual Trivy token access after an incomplete credential rotation, which enabled a malicious release and poisoned GitHub Actions.
- Payloads scraped runner process memory and filesystem paths for secrets, encrypted collected data in tpcp.tar.gz, and used victim-owned GitHub repositories as a fallback exfiltration channel.
- Stolen publishing tokens enabled CanisterWorm to push malicious updates to 28 npm packages in under 60 seconds; the campaign also reached PyPI and OpenVSX.
- Reported techniques include Internet Computer Protocol canisters for fallback command and control, Python payloads hidden in WAV files, and persistence through systemd services and privileged Kubernetes DaemonSets.
- The article reports roughly 500,000 stolen credentials and more than 300 GB of exfiltrated data. It says CERT-EU attributed a European Commission AWS environment breach to TeamPCP, with about 92 GB of compressed data stolen.
- The article describes the campaign as ongoing in early April 2026 and recommends rotating secrets, auditing for campaign artifacts, and pinning GitHub Actions to full commit SHAs.
Article Details
- Attack Vectors
- TeamPCP used residual access to a Trivy CI/CD service account token to push a malicious v0.69.4 tag and poison the release pipeline.
- Compromised GitHub Actions harvested secrets from runner process memory and filesystem paths, including cloud credentials, tokens, SSH keys, and Docker configuration.
- Stolen npm publish tokens enabled CanisterWorm to publish malicious updates to packages the token owners could modify; stolen PyPI tokens were used in the LiteLLM and Telnyx SDK compromises.
- Compromised Checkmarx credentials were used to compromise GitHub Actions and OpenVSX extensions.
- The payloads used WAV files containing base64-encoded Python payloads for delivery, and used privileged Kubernetes DaemonSets and malicious systemd services for persistence.
- The campaign used typosquatted domains, Cloudflare Tunnel endpoints, and an ICP canister for command-and-control or exfiltration; a fallback uploaded encrypted archives to repositories in victims’ GitHub organizations.
- The article reports SSH key harvesting to support lateral movement and a wiper targeting Iranian hosts.
- Defensive Notes
- Rotate credentials atomically after a compromise, including service-account tokens and package-publishing credentials.
- Audit logs for tpcp.tar.gz and hunt for docs-tpcp and tpcp-docs repository names.
- Pin GitHub Actions to full commit SHAs rather than mutable tags.
Indicators of compromise
| Type | Indicator | Context |
|---|---|---|
| DOMAIN | checkmarx[.]zone | C2 and second-stage delivery infrastructure used in the Checkmarx campaign. |
| HOSTNAME | championships-peoples-point-cassette[.]trycloudflare[.]com | Cloudflare Tunnel hostname reported as C2 for payload versions 3.0 and 3.1. |
| HOSTNAME | create-sensitivity-grad-sequence[.]trycloudflare[.]com | Cloudflare Tunnel hostname reported as active C2 for payload versions 3.2 and 3.3; it served kamikaze.sh and WAV payloads. |
| HOSTNAME | plug-tab-protective-relay[.]trycloudflare[.]com | Cloudflare Tunnel hostname used as a phase 02 exfiltration endpoint. |
| HOSTNAME | scan[.]aquasecurtiy[.]org | Typosquatted attacker-controlled C2 domain used to fetch malicious Go source files for the Trivy build pipeline. |
| HOSTNAME | tdtqy-oyaaa-aaaae-af2dq-cai[.]raw[.]icp0[.]io | ICP canister hostname used as fallback C2 infrastructure. |
| IPV4 | 45[.]148[.]10[.]212 | C2 server reported to resolve for scan.aquasecurtiy[.]org. |
| IPV4 | 83[.]142[.]209[.]203 | New C2 address reported in the compromised Telnyx Python SDK campaign. |
MITRE ATT&CK
T1021.004 · SSHprop.py harvested ~/.ssh/id_* keys and auth.log entries to support SSH-based spread across local networks.T1027 · Obfuscated Files or InformationPython payloads were base64-encoded inside valid WAV audio files to evade file-extension filtering and static analysis.T1036 · MasqueradingImposter commits spoofed trusted contributor identities, and PostgreSQL-themed service names helped disguise malicious artifacts.T1059.004 · Unix Shellkamikaze.sh acted as a Bash loader, while kube.py and prop.py were Python controllers for deployment and propagation.T1195.001 · Compromise Software Dependencies and Development ToolsPoisoned Trivy GitHub Actions, npm packages, PyPI releases, and OpenVSX extensions were used to compromise downstream users.T1485 · Data DestructionAn Iran-targeted wiper executed rm -rf / on Kubernetes nodes and other Iranian hosts.T1543.002 · Systemd ServiceThe payloads installed pgmon.service, pgmonitor.service, or internal-monitor.service with Restart=always for persistence.T1552 · Unsecured CredentialsThe malicious Actions payload read /proc/[pid]/mem from Runner.Worker processes and searched runner memory and filesystem paths for secrets.T1560 · Archive Collected DataStolen data was packaged as tpcp.tar.gz using AES-256-CBC and RSA-4096 key exchange.T1567.001 · Exfiltration to Code RepositoryA fallback created a tpcp-docs repository in the victim’s GitHub organization and uploaded encrypted archives as release assets.T1610 · Deploy ContainerPrivileged DaemonSets named host-provisioner-std and host-provisioner-iran were deployed in kube-system with hostPath mounts.
CVE
CVE-2025-29927vercel · next.jsIn December 2025, TeamPCP exploited CVE-2025-29927 (CVSS 10.0), a critical React2Shell vulnerability in Next.js, to compromise over 59,000 servers in under 48 hours during Operation PCPcat.CVE-2026-33634aquasecurity · setup-trivy; aquasecurity · trivy; +3 moreaccess on March 19 to push a malicious v0.69.4 tag to the Trivy repository, an incident tracked as CVE-2026-33634 (CVSS 9.4), using imposter commits — a technique that spoofs trusted contributor identities with
People
Threat Actors
CipherForceThe article identifies CipherForce as a confirmed TeamPCP alias and describes it as the group’s parallel ransomware operation.DMTThe article identifies DMT as TeamPCP’s original operator and reports that DMT stepped down.LAPSUS$The article characterizes Lapsus$ as a collaborator of TeamPCP but provides no further details about the collaboration.MegaGame10418The article identifies MegaGame10418 as the threat actor that exploited the vulnerable Trivy pull_request_target workflow on February 27 to exfiltrate a service-account token; it does not establish that this actor was TeamPCP.Persy_PCPThe article identifies Persy_PCP as a confirmed TeamPCP alias and an earlier Telegram identity.ShinyHuntersThe article reports that ShinyHunters published approximately 340 GB of data stolen from the European Commission’s AWS environment.T00001BThe article reports that the operator using this alias took over as TeamPCP’s new leader and stated that the operation would continue.TeamPCPThe article describes TeamPCP as a financially motivated cybercrime group responsible for supply-chain compromises, credential theft, data exfiltration, and destructive activity.Vect Ransomware GroupThe article reports that the group announced a partnership with TeamPCP and stated its intention to deploy ransomware across organizations affected by the Trivy and LiteLLM compromises.
Malware
Vendors
Amazon Web Servicesstolen credentials and over 300 GB of exfiltrated data including a breach of the European Commission’s AWS environment.Aqua SecurityTeamPCP converted trusted CI/CD tooling (notably Aqua Security’s Trivy) into a malware distribution channel by injecting malicious build logic and poisoned releases that propagated through GitHub Releases, Docker Hub,Checkmarxsupply chain campaign that compromised trusted security tools and package ecosystems (Trivy, Checkmarx, LiteLLM, Telnyx, 66+ npm packages, PyPI, OpenVSX), resulting in roughly 500,000 stolen credentials andTelnyxchain campaign that compromised trusted security tools and package ecosystems (Trivy, Checkmarx, LiteLLM, Telnyx, 66+ npm packages, PyPI, OpenVSX), resulting in roughly 500,000 stolen credentials and over 300 GB of
Products
AWS ECRmalicious build logic and poisoned releases that propagated through GitHub Releases, Docker Hub, AWS ECR, and GitHub Container Registry.Checkmarx KICSin March 2026 with a cascading supply chain campaign that compromised Aqua Security’s Trivy, Checkmarx KICS, LiteLLM, Telnyx, Palo Alto Networks, and 66+ npm packages, ultimately breaching the EuropeanDocker HubCI/CD scanners and runner environments to harvest secrets and propagate across GitHub Actions, Docker Hub, npm, PyPI, and OpenVSX.GitHub Actionsweaponized CI/CD scanners and runner environments to harvest secrets and propagate across GitHub Actions, Docker Hub, npm, PyPI, and OpenVSX.GitHub Container Registrylogic and poisoned releases that propagated through GitHub Releases, Docker Hub, AWS ECR, and GitHub Container Registry.LiteLLMsupply chain campaign that compromised trusted security tools and package ecosystems (Trivy, Checkmarx, LiteLLM, Telnyx, 66+ npm packages, PyPI, OpenVSX), resulting in roughly 500,000 stolen credentials and over 300Next.jsIn December 2025, TeamPCP exploited CVE-2025-29927 (CVSS 10.0), a critical React2Shell vulnerability in Next.js, to compromise over 59,000 servers in under 48 hours during Operation PCPcat.npmthat compromised trusted security tools and package ecosystems (Trivy, Checkmarx, LiteLLM, Telnyx, 66+ npm packages, PyPI, OpenVSX), resulting in roughly 500,000 stolen credentials and over 300 GB of exfiltratedOpenVSXsecurity tools and package ecosystems (Trivy, Checkmarx, LiteLLM, Telnyx, 66+ npm packages, PyPI, OpenVSX), resulting in roughly 500,000 stolen credentials and over 300 GB of exfiltrated data including a breachPyPItrusted security tools and package ecosystems (Trivy, Checkmarx, LiteLLM, Telnyx, 66+ npm packages, PyPI, OpenVSX), resulting in roughly 500,000 stolen credentials and over 300 GB of exfiltrated data including aTelnyx Python SDKTelnyx Python SDK versions 4.87.1 and 4.87.2 compromised on PyPI via the same WAV steganography technique, with a new C2 at 83[.]142[.]209[.]203. The package had 742,000 monthly downloads.Trivy2026 open-source supply chain campaign that compromised trusted security tools and package ecosystems (Trivy, Checkmarx, LiteLLM, Telnyx, 66+ npm packages, PyPI, OpenVSX), resulting in roughly 500,000 stolen
Tools
kamikaze.sh[T1059.004 ] Command and Scripting: Bash/Python – kamikaze.sh served as the bash loader while kube.py and prop.py acted as Python controllers for deployment, propagation, and control (‘kamikaze.sh acts as the bashkube.py[T1059.004 ] Command and Scripting: Bash/Python – kamikaze.sh served as the bash loader while kube.py and prop.py acted as Python controllers for deployment, propagation, and control (‘kamikaze.sh acts as the bashprop.py[T1059.004 ] Command and Scripting: Bash/Python – kamikaze.sh served as the bash loader while kube.py and prop.py acted as Python controllers for deployment, propagation, and control (‘kamikaze.sh acts as the bash
