TeamPCP Supply Chain Attack on LiteLLM — Trojanized PyPI Packages with .pth Persistence and Multi-Stage Credential Stealer
TeamPCP Supply Chain Attack on LiteLLM (TL-2026-0281), also tracked as "[\"PYSEC-2026-2\", is a critical-severity supply-chain compromise scored CVSS 9.8, first published 2026-03-25. It is attributed to TeamPCP with high confidence, references 1 CVE (CVE-2026-33634), maps to 33 MITRE ATT&CK techniques (T1003, T1005, T1027), and is covered by 9 detection rules and 37 indicators of compromise.
Key facts for TL-2026-0281
- Threat ID
- TL-2026-0281
- Also known as
- "[\"PYSEC-2026-2\", \"WIZ-ADV-2026-037\", \"Sonatype-2026-001357\", \"TeamPCP Phase 09\"]"
- Severity
- CRITICAL
- CVSS
- 9.8 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H)
- Status
- MONITORING
- Category
- SUPPLY_CHAIN
- First published
- 2026-03-25
- Last reviewed
- 2026-03-25
- Attribution
- TeamPCP
- Attribution confidence
- HIGH
- Motivation
- FINANCIAL
- Detection rules
- 9
- Indicators of compromise
- 37
Malware and tooling in TeamPCP Supply Chain Attack on LiteLLM
Malware and tooling: TeamPCP Cloud stealer, TeamPCP Cloud stealer
Threat actor TeamPCP compromised the widely-used LiteLLM Python package (present in 36% of cloud environments) by publishing trojanized PyPI versions 1.82.7 and 1.82.8. The malware leverages Python's .pth mechanism for system-wide persistence, deploys a three-stage payload that harvests cloud credentials, SSH keys, and cryptocurrency wallets, performs Kubernetes lateral movement via privileged pods, and installs a persistent systemd backdoor polling attacker C2 infrastructure. This is the third stage of TeamPCP's cascading supply chain campaign (Trivy → KICS → LiteLLM).
How TeamPCP Supply Chain Attack on LiteLLM works
On March 24, 2026, the threat actor known as TeamPCP published two malicious versions (1.82.7 and 1.82.8) of the popular LiteLLM Python package to PyPI, leveraging credentials stolen during their prior compromise of Aqua Security's Trivy vulnerability scanner. LiteLLM is a universal LLM API proxy used in approximately 36% of cloud environments, making this a high-impact supply chain attack.
The attack represents the third phase of TeamPCP's cascading supply chain campaign. Phase one compromised Trivy's GitHub Actions on March 19, 2026 (tracked as CVE-2026-33634, CVSS 9.4), harvesting CI/CD secrets from thousands of repositories. Phase two hijacked 35 tags of the Checkmarx KICS GitHub Action on March 23, 2026, along with the ast-github-action, OpenVSX extensions, and npm packages. Phase three targeted LiteLLM's PyPI distribution directly.
The root cause was an incompletely-rotated GitHub personal access token exposed during the Trivy compromise. LiteLLM's CI/CD pipeline incorporated Trivy for security scanning via an unpinned installation script (ci_cd/security_scans.sh), which allowed the poisoned Trivy payload to harvest PyPI publishing credentials. The attacker then published directly to PyPI, bypassing GitHub CI/CD entirely.
Version 1.82.7 embedded a base64-encoded payload within litellm/proxy/proxy_server.py, activated upon importing the proxy module. Version 1.82.8 escalated to a more aggressive vector: a 34,628-byte .pth file (litellm_init.pth) placed in the Python site-packages directory. Python's site.py processes .pth files at interpreter startup, meaning the malware executes on every Python process in the environment without requiring any import of the litellm package. The .pth file spawns a detached child process via subprocess.Popen containing a double base64-encoded payload.
The payload operates in three stages. Stage one is a credential harvester that sweeps SSH keys, environment variables, AWS/GCP/Azure cloud credentials, Kubernetes configurations and secrets (across all namespaces), CI/CD secrets, Docker registry credentials, database passwords, SSL private keys, shell history, .env files, cryptocurrency wallets, and even password hashes from /etc/shadow. On GitHub Actions runners, it accesses process memory via /proc/[PID]/mem to dump Runner.Worker components and extract JSON-flagged secrets.
Stage two is a Kubernetes lateral movement toolkit. It leverages the host's service account token to enumerate all cluster nodes, then deploys privileged pods (named node-setup-{node_name}, alpine:latest image) to every node in the kube-system namespace with host filesystem mounting enabled. It then chroots into the host filesystem and installs the persistence dropper.
Stage three is a persistent systemd backdoor. The sysmon.py script is installed at ~/.config/sysmon/sysmon.py with a systemd user service (sysmon.service, described as 'System Telemetry Service') that polls checkmarx.zone/raw every 50 minutes for next-stage payload URLs. It includes a kill-switch pattern that aborts if the response URL contains 'youtube.com'.
All harvested data is encrypted using AES-256-CBC with PBKDF2 key derivation (32-byte session key generated via openssl rand), then the session key is wrapped with an RSA-4096 public key (OAEP padding) hardcoded in the malware. The encrypted archive (tpcp.tar.gz) is exfiltrated via HTTPS POST to models.litellm.cloud. The same RSA public key was reused from the Trivy and KICS campaigns, providing high-confidence attribution to TeamPCP.
PyPI quarantined the malicious packages approximately 2 hours 55 minutes after publication (11:25 UTC). The entire litellm package was subsequently suspended. The LiteLLM team (BerriAI) rotated all maintainer accounts, engaged Google Mandiant for incident response, and halted releases pending a full supply chain audit. Docker Proxy image users were unaffected as dependencies were pinned in requirements.txt.
TeamPCP communicated via Telegram channels (@Persy_PCP, @teampcp), taunting victims: 'These companies were built to protect your supply chains yet they can't even protect their own.' The group claims partnerships with additional teams for ongoing attacks, indicating this campaign may continue to expand.
MITRE ATT&CK techniques used in TL-2026-0281
credential-access
T1003 OS Credential Dumping; T1528 Steal Application Access Token; T1552 Unsecured Credentials
collection
T1005 Data from Local System; T1074 Data Staged; T1530 Data from Cloud Storage; T1560 Archive Collected Data
defense-evasion
T1027 Obfuscated Files or Information; T1036 Masquerading; T1070 Indicator Removal; T1140 Deobfuscate/Decode Files or Information; T1610 Deploy Container
exfiltration
T1041 Exfiltration Over C2 Channel; T1567 Exfiltration Over Web Service
execution
T1053 Scheduled Task/Job; T1059 Command and Scripting Interpreter
privilege-escalation
T1068 Exploitation for Privilege Escalation; T1611 Escape to Host
command-and-control
T1071 Application Layer Protocol; T1105 Ingress Tool Transfer; T1573 Encrypted Channel
discovery
T1082 System Information Discovery; T1083 File and Directory Discovery; T1087 Account Discovery; T1613 Container and Resource Discovery
initial-access
impact
persistence
T1543 Create or Modify System Process; T1547 Boot or Logon Autostart Execution
lateral-movement
resource-development
T1586 Compromise Accounts; T1588 Obtain Capabilities; T1608 Stage Capabilities
CVEs associated with TeamPCP Supply Chain Attack on LiteLLM
Weaknesses (CWE) in TeamPCP Supply Chain Attack on LiteLLM
CWE-506, CWE-829, CWE-912, CWE-502, CWE-798
Timeline of TeamPCP Supply Chain Attack on LiteLLM
- Aqua Security (Trivy maintainer) suffers initial breach by TeamPCP, beginning the cascading supply chain campaign
- TeamPCP compromises Trivy GitHub Actions (aquasecurity/trivy-action, setup-trivy), injecting credential-stealing payload into CI/CD pipelines across thousands of repositories (CVE-2026-33634, CVSS 9.4)
- Attacker registers exfiltration domain litellm.cloud via Spaceship, Inc. registrar, hosted on DEMENIN B.V. infrastructure
- Checkmarx OpenVSX extensions confirmed malicious: cx-dev-assist 1.7.0 and ast-results 2.53.0
- KICS GitHub Action repository taken down at 16:50 UTC after user report, reinstated at 19:24 UTC after maintainer remediation
- TeamPCP hijacks all 35 tags of Checkmarx/kics-github-action between 12:58-16:50 UTC using compromised cx-plugins-releases service account (GitHub ID 225848595). ast-github-action tag 2.3.28 also compromised
- BerriAI creates new maintainer accounts (@krrish-berri-2, @ishaan-berri), halts all releases pending full supply chain audit. Checkmarx publishes security update at 09:00 UTC
- Entire litellm package suspended on PyPI — all versions return 'No matching distribution found'. BerriAI rotates all maintainer accounts and engages Google Mandiant
- Wiz publishes detailed technical analysis (WIZ-ADV-2026-037) and KICS companion blog, Sonatype publishes Sonatype-2026-001357 advisory
- GitHub Issue #24518 opened at 13:48 UTC with full timeline, community analysis begins documenting attack chain from Trivy to LiteLLM
- PyPI quarantines malicious litellm packages at approximately 11:25 UTC after security vendor detection — exposure window approximately 2 hours 55 minutes
- Malicious litellm versions 1.82.7 and 1.82.8 published to PyPI at approximately 08:30 UTC by compromised maintainer account krrishdholakia
- Microsoft, Sysdig, Snyk, GitGuardian, and other vendors publish detection guidance and campaign analysis. Full scope: 4 GitHub Actions repos, 2 OpenVSX extensions, container registries, 66+ npm packages compromised
- As of 2026-05-29, the specific LiteLLM v1.82.7/1.82.8 packages are contained (PyPI quarantined within ~3hrs, accounts rotated, Mandiant engaged), but actor TeamPCP remains highly active and uncaught. Its same tooling drove fresh attacks through May 2026 (Telnyx, TanStack npm, and Megalodon hitting 5,561 GitHub repos on May 18), with no arrests or takedown.
Threats related to TeamPCP Supply Chain Attack on LiteLLM
- TeamPCP Supply Chain Campaign: LiteLLM PyPI Compromise, CanisterWorm npm Propagation, and Multi-Ecosystem Attack (CVE-2026-33634)
- TeamPCP LiteLLM Supply Chain Attack — Trojaned PyPI Packages (v1.82.7/1.82.8) with Multi-Stage C2 Payload
- LiteLLM Supply Chain Compromise — TeamPCP Multi-Ecosystem Campaign via Trojanized PyPI Packages
- TeamPCP Supply Chain Attack via Backdoored Telnyx PyPI Package with Steganographic WAV Payloads
- TeamPCP Partners With Vect Ransomware Group to Escalate Cross-Ecosystem Open Source Supply Chain Attacks
- Trivy Supply Chain Compromise — TeamPCP Credential-Stealing Malware Injected into CI/CD Pipelines (CVE-2026-33634)
Detection coverage for TL-2026-0281
As of 2026-03-25, Threadlinqs Intelligence publishes 9 detection rule(s) for TL-2026-0281 across Splunk SPL, Microsoft KQL and Sigma, covering 37 indicator(s) of compromise. The whole corpus is readable without an account; a free account unlocks full detection query text in Splunk SPL, Microsoft KQL and Sigma; paid tiers add raw indicator values, correlation and the MCP server. Threadlinqs MCP server · View plans.