The TeamPCP Cloud Stealer is a comprehensive filesystem credential stealer that can harvest, encrypt, and exfiltrate credentials from over 50 sensitive file paths across CI/CD, cloud, developer tooling, and container environments. The TeamPCP Cloud Stealer was the primary payload used by TeamPCP in March 2026 during early stages of a cascading supply chain campaign targeting CI/CD workflows.[1][2][3][4][5][6][7][8]
| Domain | ID | Name | Use | |
|---|---|---|---|---|
| Enterprise | T1548 | .003 | Abuse Elevation Control Mechanism: Sudo and Sudo Caching |
TeamPCP Cloud Stealer can use |
| Enterprise | T1071 | .001 | Application Layer Protocol: Web Protocols |
TeamPCP Cloud Stealer has used |
| Enterprise | T1560 | .001 | Archive Collected Data: Archive via Utility |
TeamPCP Cloud Stealer has bundled collected data into a file named tpcp.tar.gz for exfiltration.[1][3][4][5] |
| Enterprise | T1119 | Automated Collection |
TeamPCP Cloud Stealer can identify and collect credentials across over 50 file paths in Cloud, CI/CD, developer tooling, and container enviornments.[1][3] |
|
| Enterprise | T1020 | Automated Exfiltration |
TeamPCP Cloud Stealer can compress and encrypt data and exfiltrate it via POST to scan.aquasecurtiy[.]org. If that method fails it attempts to use a stolen GITHUB_TOKEN to create a repo and exfiltrate the data there.[1] |
|
| Enterprise | T1580 | Cloud Infrastructure Discovery |
TeamPCP Cloud Stealer has the ability to search for generic GitHub runners.[5] |
|
| Enterprise | T1526 | Cloud Service Discovery |
TeamPCP Cloud Stealer can search GitHub for Actions runner processes.[3][2][1][5] |
|
| Enterprise | T1059 | .004 | Command and Scripting Interpreter: Unix Shell |
TeamPCP Cloud Stealer has abused the shell script files entrypoint.sh (in trivy-action) and setup.sh (in ast-github-action/2.3.28) for discovery and credential harvesting.[4] [6] |
| .006 | Command and Scripting Interpreter: Python |
TeamPCP Cloud Stealer has leveraged Python scripts to download additional payloads, engage in discovery, and to establish persistence.[1][3][5][5][6] |
||
| .007 | Command and Scripting Interpreter: JavaScript |
TeamPCP Cloud Stealer has infected victims through malicious pre and post-install scripts within the package.json file.[6] |
||
| Enterprise | T1609 | Container Administration Command |
TeamPCP Cloud Stealer can use |
|
| Enterprise | T1613 | Container and Resource Discovery |
TeamPCP Cloud Stealer can identify Docker and Kubernetes environments for credentials.[3][5] |
|
| Enterprise | T1543 | .002 | Create or Modify System Process: Systemd Service |
TeamPCP Cloud Stealer can create a systemd unit to execute a python script for persistence.[1][3][5] |
| Enterprise | T1555 | Credentials from Password Stores |
TeamPCP Cloud Stealer can harvest credentials from cryptocurrency wallets and keystores such as Ethereum keystores, Cardano keys, Solana validator keypairs, Ledger device files, and Anchor deploy keys.[2][3][8] |
|
| .006 | Cloud Secrets Management Stores |
TeamPCP Cloud Stealer can enumerate multiple filesystem paths to extract credentials for AWS, GCP, and Azure including Identity Access Management (IAM) credentials.[1][2][3][4][5][5][6][8][7] |
||
| Enterprise | T1213 | .003 | Data from Information Repositories: Code Repositories |
TeamPCP Cloud Stealer can target sensitive file paths in Git repos to extract credentials.[1][3] |
| .006 | Data from Information Repositories: Databases |
TeamPCP Cloud Stealer can extract credentials from multiple database configuration files including ~/.pgpass, ~/.my.cnf, ~/.mongorc.js, and /etc/mysql/my.cnf.[3] |
||
| Enterprise | T1074 | .001 | Data Staged: Local Data Staging |
TeamPCP Cloud Stealer has created a staging file in |
| Enterprise | T1678 | Delay Execution |
TeamPCP Cloud Stealer has leveraged a persistence script that will sleep for five minutes before additional execution.[1][3][5] |
|
| Enterprise | T1140 | Deobfuscate/Decode Files or Information |
TeamPCP Cloud Stealer can deobfuscate an encoded Python script prior to execution.[3] |
|
| Enterprise | T1573 | .001 | Encrypted Channel: Symmetric Cryptography |
TeamPCP Cloud Stealer has encrypted collected data using a hybrid AES-256 and RSA-4096 encryption prior to exfiltration over 'curl`.[1][2][4][5] |
| .002 | Encrypted Channel: Asymmetric Cryptography |
TeamPCP Cloud Stealer has encrypted collected data using a hybrid RSA-4096 and AES-256-encryption prior to exfiltration over 'curl`.[1][2][4][5] |
||
| Enterprise | T1546 | .016 | Event Triggered Execution: Installer Packages |
TeamPCP Cloud Stealer can inject malicious pre or post-install scripts within package.json for payload execution.[6] |
| .018 | Event Triggered Execution: Python Startup Hooks |
TeamPCP Cloud Stealer has used .pth files to establish persistence on compromised hosts due to the Python interpreter's automatic processing of .pth files at startup.[6] |
||
| Enterprise | T1480 | Execution Guardrails |
TeamPCP Cloud Stealer has checked if it is running on a developer machine (rather than GitHub Actions) before executing a Python script for persistence. The script has also polled C2 every 50 minutes for additional payloads and aborted if the returned value contained YouTube.[3][5] |
|
| Enterprise | T1041 | Exfiltration Over C2 Channel |
TeamPCP Cloud Stealer has exfiltrated collected data to typosquat C2 domains including scan.aquasecurtiy[.]org.[1][3][4][5] |
|
| Enterprise | T1567 | .001 | Exfiltration Over Web Service: Exfiltration to Code Repository |
TeamPCP Cloud Stealer can create a repository in the victim's GitHub account using the victim's own GITHUB_TOKEN to upload stolen credentials.[1][2][3][4][5][6] |
| Enterprise | T1008 | Fallback Channels |
TeamPCP Cloud Stealer can compress and encrypt data and exfiltrate it via POST to an attacker-controlled domain. If that method fails it can use the victim's own GitHub account to create a public repository and uploads the encrypted data as a release asset.[1][2][3][5][6] |
|
| Enterprise | T1083 | File and Directory Discovery |
TeamPCP Cloud Stealer can identify files containing environment variables, SSH keys, cloud credentials, access tokens, and cryptocurrency wallets.[1][2][3][5] |
|
| Enterprise | T1657 | Financial Theft |
TeamPCP Cloud Stealer can search filesystems for cryptocurrency wallets such as Bitcoin, Litecoin, Dogecoin, Zcash, Dash, Ripple, and Monero.[1][2][3] |
|
| Enterprise | T1564 | .001 | Hide Artifacts: Hidden Files and Directories |
TeamPCP Cloud Stealer can create a hidden directory in the user's home folder on Linux hosts to write a python backdoor.[5] |
| Enterprise | T1070 | .004 | Indicator Removal: File Deletion |
TeamPCP Cloud Stealer has the ability to remove all staged files after exfiltration.[3] |
| Enterprise | T1105 | Ingress Tool Transfer |
TeamPCP Cloud Stealer has the ability to download additional payloads to targeted systems.[1][3][5][6] |
|
| Enterprise | T1036 | .005 | Masquerading: Match Legitimate Resource Name or Location |
TeamPCP Cloud Stealer has installed a backdoor named sysmon.py on targeted systems.[5] |
| Enterprise | T1027 | .013 | Obfuscated Files or Information: Encrypted/Encoded File |
TeamPCP Cloud Stealer has used multi-stage payloads with double Base64-encoded scripts to evade static analysis.[1][2][6] |
| Enterprise | T1003 | .007 | OS Credential Dumping: Proc Filesystem |
TeamPCP Cloud Stealer can scrape memory from the Runner.Worker process by reading |
| Enterprise | T1057 | Process Discovery |
TeamPCP Cloud Stealer can locate GitHub Actions runner processes.[3][1][2][5] |
|
| Enterprise | T1518 | Software Discovery |
TeamPCP Cloud Stealer has searched for cryptocurrency wallets on targeted hosts.[1][2] |
|
| Enterprise | T1528 | Steal Application Access Token |
TeamPCP Cloud Stealer can read runner.worker process memory to extract plaintext tokens.[6][4][5][6][8][7] |
|
| Enterprise | T1082 | System Information Discovery |
TeamPCP Cloud Stealer has detected if it is on a developer machine by checking if the environmental variable GITHUB_ACTIONS != "true".[1] TeamPCP Cloud Stealer has also identified readable memory regions on CI/CD runners and enumerated system information using |
|
| Enterprise | T1016 | System Network Configuration Discovery |
TeamPCP Cloud Stealer has the ability to enumerate network interfaces.[1][3] |
|
| Enterprise | T1049 | System Network Connections Discovery |
TeamPCP Cloud Stealer can search compromised systems for webhook URLs connecting to Slack and Discord.[4] |
|
| Enterprise | T1033 | System Owner/User Discovery |
TeamPCP Cloud Stealer can use |
|
| Enterprise | T1552 | .001 | Unsecured Credentials: Credentials In Files |
TeamPCP Cloud Stealer has the ability to check over 50 file paths for credentials stored in files across CI/CD, cloud, container, and other environments.[1][2][3][5][8][7] |
| .003 | Unsecured Credentials: Shell History |
TeamPCP Cloud Stealer can target credentials in shell history on self-hosted runners.[3] |
||
| .004 | Unsecured Credentials: Private Keys |
TeamPCP Cloud Stealer has searched victim hosts for TLS and SSH keys.[1][2][3][5] |
||
| .007 | Unsecured Credentials: Container API |
TeamPCP Cloud Stealer can query the Kubernetes API for credentials.[5][6] |
||
| ID | Name | References |
|---|---|---|
| G1056 | TeamPCP |
TeamPCP has used TeamPCP Cloud Stealer in credential harvesting and exfiltration.[1][2][3][4][5][6] |