Skip to main content
Meet us at Black Hat USA 2026— Las Vegas, August 1–6Book a Meeting
Mallory
Back to malware
MalwareRansomwareUsed by 4 actorsExploits 2 CVEs

TeamPCP Cloud stealer

TeamPCP Cloud Stealer is a credential-harvesting malware payload used in TeamPCP supply-chain attacks in March 2026, most notably against Aqua Security’s Trivy ecosystem and later in related compromises affecting Checkmarx GitHub Actions and the LiteLLM PyPI package. It is purpose-built for CI/CD and developer environments, especially GitHub Actions runners, while some variants also execute on developer hosts and Python environments.

High-confidence behavior described in the content includes dumping GitHub Actions Runner.Worker process memory via /proc/<pid>/mem to recover secrets marked in memory, harvesting environment variables and filesystem-stored credentials, and collecting SSH keys, Git credentials, cloud provider credentials for AWS, GCP, and Azure, Kubernetes tokens and secrets, Docker credentials, .env files, database credentials, CI/CD configurations, TLS private keys, VPN data, cryptocurrency wallet material including Solana wallets, and Slack and Discord webhook URLs. Reported variants also queried the AWS Instance Metadata Service at 169.254.169.254 for IAM credentials and gathered host/network reconnaissance data.

The malware preserved legitimate application functionality while running malicious logic in parallel in compromised Trivy artifacts. Stolen data was commonly bundled as tpcp.tar.gz and encrypted with hybrid AES-256 and RSA-4096 encryption, including references to AES-256-CBC and RSA-4096, before exfiltration to attacker-controlled infrastructure. Reported exfiltration endpoints included scan.aquasecurtiy[.]org, checkmarx[.]zone, and models.litellm[.]cloud; scan.aquasecurtiy[.]org resolved to 45.148.10.212 in reporting, and checkmarx[.]zone was also used in related TeamPCP activity. A fallback exfiltration mechanism created GitHub repositories named tpcp-docs, docs-tpcp, or timestamped tpcp-docs variants in victim accounts or organizations to store stolen data.

Some variants established persistence on non-CI or developer systems through a systemd user service and a script such as ~/.config/systemd/user/sysmon.py, sometimes disguised as a telemetry service. Reported persistence components polled external infrastructure including tdtqy-oyaaa-aaaae-af2dq-cai.raw.icp0.io or checkmarx[.]zone/raw for follow-on payloads, with a kill-switch condition tied to responses containing YouTube/youtube.

The malware is strongly associated with the TeamPCP threat group, also referenced in the content as DeadCatx3, PCPcat, ShellForce, PersyPCP, and CipherForce. The payload self-identifies in source comments as "TeamPCP Cloud stealer," and multiple reports linked attribution to TeamPCP based on this labeling and consistent tradecraft. The malware was deployed through poisoned GitHub Action tags, malicious Trivy releases and Docker images, compromised OpenVSX extensions, and malicious LiteLLM versions 1.82.7 and 1.82.8 on PyPI. Targeting centered on cloud-native, CI/CD, and developer environments, with downstream impact reported across enterprises using affected tooling.

Share:
For your environment

Hunt this family in your stack

Mallory pivots from this family to the IOCs, detections, and named campaigns that touch your stack, and pages you when something new lands.

EXPLOITED CVES

Vulnerabilities exploited

2 CVEs Mallory has correlated with this family across public research and vendor advisories. Each row links to the full Mallory page for that vulnerability.

2 CVES
CVE-2026-33634Trivy supply chain compromise via malicious release and retagged GitHub ActionsExploited in the wild

On 19 March, TeamPCP launched a coordinated multi-channel attack that resulted in CVE-2026-33634, a supply chain compromise affecting the official Trivy distribution infrastructure. | Deployed "TeamPCP Cloud Stealer", a purpose-built payload designed for CI/CD runner environments that dumped process memory from the GitHub Actions runner, swept SSH keys, cloud provider credentials, and Kubernetes secrets, then encrypted and exfiltrated the collected data using AES-256 and RSA-4096 to attacker-controlled servers.

via halcyon attacks lookouthalcyon.ai
CVE-2025-29927Next.js middleware authorization bypass via x-middleware-subrequest header

Their malware consistently self-identifies through an embedded string, “TeamPCP Cloud stealer,” which has become one of the clearest attribution markers across all campaign phases.

via socradar blogsocradar.io
THREAT ACTORS

Groups observed using it

4 distinct threat actors attributed by public researchers. Open in Mallory to see the full evidence chain and overlapping campaigns.

View more details
TeamPCP

The malicious versions of these Actions run a tool self-described as "TeamPCP Cloud stealer", which dumps Runner.Worker process memory, harvests SSH, cloud, and K8s secrets, encrypts the data (using AES-256+RSA-4096), and exfiltrates it to a remote server.

via wiz blogwiz.io
TeamPCP

Security analysts have linked the activity to the TeamPCP threat group, which has conducted a series of supply chain attacks targeting developer platforms including GitHub, PyPI, npm, and Docker. The group is known for deploying a credential-harvesting tool referred to as the TeamPCP Cloud Stealer.

via teiss newsteiss.co.uk
LAPSUS$

When the infected software runs, the TeamPCP Cloud Stealer searches the system memory and files for digital master keys that allow access to a company’s servers. It specifically hunts for Kubernetes tokens and Solana cryptocurrency wallets.

via hackreadhackread.com
ShellForce

The malware self-identifies as TeamPCP Cloud stealer in a Python comment on the final line of the embedded filesystem credential harvester.

via socket blogsocket.dev
MITRE ATT&CK

Techniques & procedures

29 distinct techniques documented for this family, organized by ATT&CK tactic.

Initial Access

4 techniques
T1078Valid AccountsEvidence1

Cisco Systems... experienced a cyberattack in which threat actors infiltrated its internal development environment using stolen credentials obtained through a recent supply chain compromise... During the incident, attackers obtained multiple Amazon Web Services keys and used them to carry out unauthorized activities across a limited number of Cisco cloud accounts.

T1078.004Cloud AccountsEvidence1

During the incident, attackers obtained multiple Amazon Web Services keys and used them to carry out unauthorized activities across a limited number of Cisco cloud accounts.

T1195Supply Chain CompromiseEvidence6

On 19 March, TeamPCP launched a coordinated multi-channel attack that resulted in CVE-2026-33634, a supply chain compromise affecting the official Trivy distribution infrastructure.

T1195.001Compromise Software Dependencies and Development ToolsEvidence1

Tag-based action references (e.g., @v2) were subverted by force-pushing tags to malicious commits. Only commit SHA pinning would have been immune.

Execution

3 techniques
T1059.006PythonEvidence1

it executes a base64-encoded Python filesystem harvester signed "TeamPCP Cloud stealer"

T1204User ExecutionEvidence1

Endor Labs reports that threat actors pushed out two malicious versions of LiteLLM today, each containing a hidden payload that executes when the package is imported.

T1574Hijack Execution FlowEvidence4

The threat actor force-pushed 75 of 76 version tags in the aquasecurity/trivy-action repository, redirecting them to malicious commits containing the "TeamPCP Cloud stealer." When CI/CD workflows referenced these tags, the compromised action executed a multi-stage payload.

Persistence

4 techniques
T1037Boot or Logon Initialization ScriptsEvidence1

Version 1.82.8 introduces a more aggressive feature that installs a '.pth' file named 'litellm_init.pth' to the Python environment. Because Python automatically processes all '.pth' files when the interpreter starts, the malicious code would be executed whenever Python is run.

T1078Valid AccountsEvidence1

Cisco Systems... experienced a cyberattack in which threat actors infiltrated its internal development environment using stolen credentials obtained through a recent supply chain compromise... During the incident, attackers obtained multiple Amazon Web Services keys and used them to carry out unauthorized activities across a limited number of Cisco cloud accounts.

T1078.004Cloud AccountsEvidence1

During the incident, attackers obtained multiple Amazon Web Services keys and used them to carry out unauthorized activities across a limited number of Cisco cloud accounts.

T1543.002Systemd ServiceEvidence1

The cloud stealer payload also includes an additional base64 encoded script that is installed as a systemd user service disguised as a "System Telemetry Service," which periodically contacts a remote server at checkmarx[.]zone to download and execute additional payloads.

Privilege Escalation

5 techniques
T1037Boot or Logon Initialization ScriptsEvidence1

Version 1.82.8 introduces a more aggressive feature that installs a '.pth' file named 'litellm_init.pth' to the Python environment. Because Python automatically processes all '.pth' files when the interpreter starts, the malicious code would be executed whenever Python is run.

T1055Process InjectionEvidence1

The malware scraped memory from the Runner.Worker process by reading /proc/<pid>/mem and searching for the pattern {"value":"<secret>","isSecret":true}.

T1078Valid AccountsEvidence1

Cisco Systems... experienced a cyberattack in which threat actors infiltrated its internal development environment using stolen credentials obtained through a recent supply chain compromise... During the incident, attackers obtained multiple Amazon Web Services keys and used them to carry out unauthorized activities across a limited number of Cisco cloud accounts.

T1078.004Cloud AccountsEvidence1

During the incident, attackers obtained multiple Amazon Web Services keys and used them to carry out unauthorized activities across a limited number of Cisco cloud accounts.

T1543.002Systemd ServiceEvidence1

The cloud stealer payload also includes an additional base64 encoded script that is installed as a systemd user service disguised as a "System Telemetry Service," which periodically contacts a remote server at checkmarx[.]zone to download and execute additional payloads.

Stealth

5 techniques
T1027Obfuscated Files or InformationEvidence1

The malicious code was injected into 'litellm/proxy/proxy_server.py' as a base64 encoded payload, which is decoded and executed whenever the module is imported.

T1055Process InjectionEvidence1

The malware scraped memory from the Runner.Worker process by reading /proc/<pid>/mem and searching for the pattern {"value":"<secret>","isSecret":true}.

T1078Valid AccountsEvidence1

Cisco Systems... experienced a cyberattack in which threat actors infiltrated its internal development environment using stolen credentials obtained through a recent supply chain compromise... During the incident, attackers obtained multiple Amazon Web Services keys and used them to carry out unauthorized activities across a limited number of Cisco cloud accounts.

T1078.004Cloud AccountsEvidence1

During the incident, attackers obtained multiple Amazon Web Services keys and used them to carry out unauthorized activities across a limited number of Cisco cloud accounts.

T1574Hijack Execution FlowEvidence4

The threat actor force-pushed 75 of 76 version tags in the aquasecurity/trivy-action repository, redirecting them to malicious commits containing the "TeamPCP Cloud stealer." When CI/CD workflows referenced these tags, the compromised action executed a multi-stage payload.

Defense Impairment

1 technique
T1553Subvert Trust ControlsEvidence1

Tag-based action references (e.g., @v2) were subverted by force-pushing tags to malicious commits. Only commit SHA pinning would have been immune.

Credential Access

9 techniques
T1003OS Credential DumpingEvidence2

Deployed "TeamPCP Cloud Stealer", a purpose-built payload designed for CI/CD runner environments that dumped process memory from the GitHub Actions runner, swept SSH keys, cloud provider credentials, and Kubernetes secrets

T1056Input CaptureEvidence1

The Trivy breach also affected the LiteLLM open-source Python library in an attack that infected tens of thousands of devices with its "TeamPCP Cloud Stealer" information-stealing malware.

T1528Steal Application Access TokenEvidence3

When a compromised Trivy action executes in a workflow, it extracts GitHub personal access tokens (PATs) and other secrets from the Runner.Worker process memory. If those tokens have write access to repositories that also use Checkmarx actions, the attacker can use them to push malicious code to additional action dependencies.

T1552Unsecured CredentialsEvidence2

Credential scraping : Scanned /proc/*/mem from Runner.Worker processes to extract secrets stored in memory

T1552.001Credentials In FilesEvidence1

it executes a base64-encoded Python filesystem harvester ... that reads SSH keys, cloud credentials, Kubernetes configs, Docker credentials, .env files, terraform state, shell history, database configs, TLS private keys, and cryptocurrency wallets

T1552.004Private KeysEvidence1

...swept SSH keys, cloud provider credentials, and Kubernetes secrets...

T1552.005Cloud Instance Metadata APIEvidence1

Cloud metadata harvesting : Queried the AWS Instance Metadata Service (IMDS) at 169.254.169.254 for IAM credentials... IMDS credential harvesting : curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/

T1555Credentials from Password StoresEvidence1

Once triggered, the payload runs a three-stage attack: it harvests credentials (SSH keys, cloud tokens, Kubernetes secrets, crypto wallets, and .env files)... The stealer harvests a wide range of credentials and authentication secrets.

T1649Steal or Forge Authentication CertificatesEvidence2

swept SSH keys, cloud provider credentials, and Kubernetes secrets

Discovery

1 technique
T1082System Information DiscoveryEvidence2

The malicious process gathers environmental variables, sweeps the system for any credentials stored in the filesystem and enumerates the network interface.

Collection

2 techniques
T1056Input CaptureEvidence1

The Trivy breach also affected the LiteLLM open-source Python library in an attack that infected tens of thousands of devices with its "TeamPCP Cloud Stealer" information-stealing malware.

T1560Archive Collected DataEvidence2

Harvested credentials were encrypted using AES-256-CBC with RSA-4096 hybrid encryption and bundled into tpcp.tar.gz.

Command and Control

3 techniques
T1008Fallback ChannelsEvidence1

If the primary command-and-control channel failed, the malware fell back to creating a repository called tpcp-docs inside the victim's own GitHub organization and storing stolen secrets there.

T1102Web ServiceEvidence1

Webhook enumeration : Searched the workspace for Slack and Discord webhook URLs... grep -r "hooks.slack.com\|discord.com/api/webhooks" . 2>/dev/null | head -20

T1105Ingress Tool TransferEvidence3

Published a weaponized Trivy binary (v0.69.4) to GitHub Releases, Docker Hub, GHCR, ECR Public, and deb/rpm repositories; Deployed "TeamPCP Cloud Stealer"

Exfiltration

3 techniques
T1041Exfiltration Over C2 ChannelEvidence4

then encrypted and exfiltrated the collected data using AES-256 and RSA-4096 to attacker-controlled servers.

T1567Exfiltration Over Web ServiceEvidence2

These secrets were exfiltrated to a Cloudflare Tunnel C2 (plug-tab-protective-relay.trycloudflare.com). ... The malware transmitted the encrypted bundle to a typosquatted domain (scan.aquasecurtiy[.]org). As a fallback, it could create a tpcp-docs repository in the victim's GitHub account and upload the stolen credentials as a release asset.

T1567.001Exfiltration to Code RepositoryEvidence1

If the primary command-and-control channel failed, the malware fell back to creating a repository called tpcp-docs inside the victim's own GitHub organization and storing stolen secrets there.

INDICATORS OF COMPROMISE

IOCs tracked for this family

143 indicators attributed across vendor reports, sandbox runs, and researcher write-ups. Full values are available in Mallory.

View more in app
Network
24 tracked

IPs, domains, and DNS infrastructure linked to this family.

Hashes
114 tracked

File hashes (MD5, SHA-1, SHA-256) from samples and reports.

Other
5 tracked

Other indicator types observed in public reporting.

TypeValueLatest sighting
ip.v4●●●●●●●●●●●●View more in app1 day ago
ip.v4●●●●●●●●●●●●View more in app2 days ago
uri●●●●●●●●●●●●View more in app10 days ago
domain●●●●●●●●●●●●View more in app13 days ago
domain●●●●●●●●●●●●View more in app17 days ago
ip.v4●●●●●●●●●●●●View more in app1 month ago
ACTIVITY FEED

Recent activity

22 sources tracked across advisories, community write-ups, and news. New activity surfaces here as Mallory finds it.

bleeping computerNews
May 20, 2026
GitHub investigates internal repositories breach claimed by TeamPCP

An information-stealing malware used in a supply-chain attack that infected tens of thousands of devices via the compromised LiteLLM open-source Python library.

Read more
halcyon attacks lookoutNews
Apr 17, 2026
Trivy Supply Chain Compromise Enters Extortion Phase as Vect Ransomware Publishes First Victim

A purpose-built stealer for CI/CD runner environments that harvests process memory, SSH keys, cloud credentials, and Kubernetes secrets, encrypts the stolen data, and exfiltrates it to attacker-controlled infrastructure. It also has a fallback exfiltration method using a repository named tpcp-docs inside the victim GitHub organization.

Read more
halcyon attacks lookoutNews
Apr 17, 2026
Trivy Supply Chain Compromise Enters Extortion Phase as Vect Ransomware Publishes First Victim

A purpose-built stealer for CI/CD runner environments that dumps process memory, collects SSH keys, cloud credentials, and Kubernetes secrets, then encrypts and exfiltrates the stolen data. It also has a fallback exfiltration mechanism using a repository named tpcp-docs inside the victim's GitHub organization.

Read more
sysdig blogNews
Apr 5, 2026
TeamPCP expands: Supply chain compromise spreads from Trivy to Checkmarx GitHub Actions | Sysdig

A credential-stealing payload used in compromised GitHub Actions and CI/CD pipelines. It scrapes secrets from runner process memory, harvests cloud metadata and IAM credentials from IMDS, searches for Slack and Discord webhooks, encrypts collected data into tpcp.tar.gz, and exfiltrates it to attacker-controlled typosquat domains.

Read more
What this page doesn’t show

The version that knows your environment.

This page is what’s public. Mallory adds the parts that aren’t: which of your assets match these IOCs, which detections are missing, which campaigns to expect next, and what to do in the next 30 minutes.
IOC matching143

Match every observed IP, domain, and hash against your live telemetry.

Threat actor attribution4

Named campaigns wielding this family, with evidence pinned to each claim.

Exploited vulnerabilities2

CVEs this family uses for access and lateral movement.

Detection signatures

YARA, Sigma, Snort, and vendor rules, auto-deployed to your SIEM.

MITRE ATT&CK mapping29

Every documented technique, ranked by evidence weight.

Researcher chatter

Reddit, Mastodon, and CTI community discussion around this family.