TeamPCP’s LiteLLM Supply-Chain Attack Stole Credentials and Installed a Backdoor

Summary
Compromised LiteLLM versions 1.82.7 and 1.82.8 harvested credentials and could establish persistent access. The article traces the attack to TeamPCP’s wider campaign, describes the payload, and outlines remediation.
Key points
- Malicious LiteLLM versions 1.82.7 and 1.82.8 were published to PyPI after TeamPCP compromised CI/CD tooling in a wider supply-chain campaign.
- Version 1.82.8 added a .pth file that ran at Python startup; both versions could harvest credentials, including cloud secrets, SSH keys, Kubernetes secrets, and LLM API keys.
- The payload encrypted stolen data and sent it to attacker-controlled infrastructure; it also installed a persistent backdoor and contained code for Kubernetes cluster-wide access.
- The attack followed a compromise of Trivy-related GitHub Actions, which exposed a PyPI publishing token through LiteLLM’s CI/CD pipeline.
- PyPI removed the affected versions about three hours after reports emerged. No public confirmation indicated whether stolen credentials were successfully used.
- The article recommends checking for the malicious file and persistence artifacts, rotating credentials on affected systems, blocking listed infrastructure, and pinning dependencies with hash verification.
Article Details
- Attack Vectors
- A misconfigured pull_request_target workflow in Trivy's CI enabled theft of the aqua-bot Personal Access Token. Aqua Security reported that subsequent credential rotation was not atomic and attackers may have obtained refreshed tokens.
- Still-valid credentials enabled malicious replacement of 76 of 77 trivy-action release tags and all seven setup-trivy tags. The compromised scanner harvested runner secrets while still producing normal scan output, according to CrowdStrike.
- The compromised Trivy execution in LiteLLM's CI/CD pipeline stole its PYPI_PUBLISH token, enabling direct publication of malicious LiteLLM versions 1.82.7 and 1.82.8 to PyPI.
- LiteLLM 1.82.7 injected malicious code into proxy_server.py. Version 1.82.8 retained that injection and added LiteLLM_init.pth, triggering execution on subsequent Python interpreter startups without requiring a LiteLLM import.
- The payload collected cloud credentials, SSH keys, Kubernetes secrets, application credentials, cryptocurrency wallet material, and CI/CD secrets, then encrypted and exfiltrated the collection.
- Code could deploy privileged Kubernetes pods to cluster nodes, mount host filesystems, and install persistent backdoors through chroot. The article does not confirm that this lateral movement was exploited in the wild.
- A systemd user service provided persistent polling and remote executable delivery. A YouTube-based kill switch was active during analysis, and second-stage execution was not confirmed.
- CanisterWorm stole npm publishing tokens and automatically published malicious versions of accessible packages, extending the compromise across the npm ecosystem.
- Compromised credentials were also used to hijack KICS GitHub Action tags and publish malicious Docker images. Two malicious VS Code extensions appeared on OpenVSX.
- A fake checkmarx-util package was distributed directly from attacker-controlled infrastructure and used a postinstall hook for automatic execution.
- Community analysis reported compromised GitHub accounts flooding the disclosure issue with comments; the article assesses that this likely sought to delay triage.
- Defensive Notes
- Check Python site-packages for LiteLLM_init.pth; the article recommends assuming full credential compromise if it is present.
- Rotate all credentials exposed through environment variables or configuration files on systems that installed LiteLLM 1.82.7 or 1.82.8, including CI/CD runners and LLM API keys.
- Remove reliance on affected releases and audit transitive dependencies, including downstream projects that may introduce the compromised package indirectly.
- Block the reported attacker infrastructure at DNS and firewall layers and enforce outbound domain allowlisting.
- Search Linux systems for sysmon.service and ~/.config/sysmon/.
- Audit npm packages for checkmarx-util references and postinstall hooks that inspect GITHUB_ACTIONS.
- Pin security scanners, package versions, and cryptographic hashes; enforce hash verification and software bills of materials.
- Disable npm installation scripts in CI/CD unless explicitly reviewed.
- Alert on unexpected .pth creation outside a known-good baseline and on bulk reads of credential files, cloud configurations, and wallet material.
- Monitor JARM fingerprints associated with the reported infrastructure and investigate unexpected TLS connections to bulletproof hosting networks.
- Treat fork bombs and unexplained resource exhaustion as possible supply chain compromise signals.
- Use short-lived provider tokens where available and treat centralized LLM API key storage as a high-impact credential exposure point.
- Successful downstream use of stolen credentials was not publicly confirmed. Model poisoning was theoretical and was not implemented in the analyzed payload.
Indicators of compromise
| Type | Indicator | Context |
|---|---|---|
| DOMAIN | checkmarx[.]zone | Attacker-controlled infrastructure directly serving the malicious checkmarx-util package. |
| DOMAIN | litellm[.]cloud | Attacker infrastructure associated with the second C2 node and explicitly listed for blocking. |
| DOMAIN | models[.]litellm[.]cloud | Reported LiteLLM credential-exfiltration endpoint, also identified in the article's infrastructure and ATT&CK discussion. |
| DOMAIN | scan[.]aquasecurtiy[.]org | Typosquatted exfiltration domain used by the compromised Trivy GitHub Actions payload. |
| IPV4 | 45[.]148[.]10[.]212 | Reported resolution address of the Trivy credential-exfiltration domain. |
| IPV4 | 46[.]151[.]182[.]203 | Reported second C2 node associated with LiteLLM[.]cloud and the exfiltration infrastructure. |
| IPV4 | 83[.]142[.]209[.]11 | Seed IOC and reported C2 node associated with checkmarx[.]zone. |
MITRE ATT&CK
T1005 · Data from Local SystemThe collector gathered local files and command output across user homes and system directories into a temporary collection file.T1027 · Obfuscated Files or InformationThe malicious Python payload used three layers of base64 encoding.T1033 · System Owner/User DiscoveryThe collector ran whoami as part of initial system reconnaissance.T1041 · Exfiltration Over C2 ChannelEncrypted stolen data was POSTed to the attacker-controlled models domain.T1057 · Process DiscoveryThe collector gathered information about running processes.T1059.006 · PythonThe LiteLLM payload decoded and executed multiple layers of Python code.T1071.001 · Web ProtocolsThe persistent backdoor polled the checkmarx domain over HTTPS every approximately 50 minutes.T1078 · Valid AccountsStolen and still-valid credentials enabled repository tag replacement, package publication, and authenticated access to cloud secrets.T1082 · System Information DiscoveryThe collector executed hostname and uname commands to identify the compromised system.T1105 · Ingress Tool TransferThe backdoor could download an executable from a URL returned by its C2 endpoint and run it as a detached process; execution was not confirmed during analysis.T1195.002 · Compromise Software Supply ChainTeamPCP replaced security-tool release tags and published malicious package versions that executed in downstream developer and CI/CD environments.T1543.002 · Systemd ServiceThe payload installed and enabled sysmon.service as a systemd user service with Restart=always.T1552 · Unsecured CredentialsThe collector harvested unsecured secrets across cloud, application, CI/CD, Kubernetes, and wallet configurations.T1552.001 · Credentials In FilesThe collector read credential-bearing files including .env variants, cloud configuration files, database passwords, and CI/CD secret files.T1552.004 · Private KeysThe collector stole SSH private keys across user homes, SSH host keys, TLS private keys, and WireGuard private keys.T1552.005 · Cloud Instance Metadata APIThe collector queried EC2 IMDS v1 and v2 and ECS metadata endpoints for role credentials.T1555.006 · Cloud Secrets Management StoresUsing harvested AWS credentials, the collector called Secrets Manager ListSecrets and GetSecretValue to retrieve cloud-managed secrets.T1560.001 · Archive via UtilityThe orchestrator bundled encrypted collected data and the encrypted session key into tpcp.tar.gz before exfiltration.T1573.001 · Symmetric CryptographyThe exfiltration bundle used AES-256-CBC encryption with an RSA-4096-OAEP-wrapped session key.T1610 · Deploy ContainerPayload code created privileged pods in kube-system for each enumerated Kubernetes node.T1611 · Escape to HostKubernetes payload code used privileged pods, host filesystem mounts, and chroot to install the backdoor on cluster hosts.
CVE
People
Andrej KarpathyAI researcher who noted that a crash-causing payload bug led to rapid discovery of the LiteLLM compromise.Callum McMahonFutureSearch researcher who encountered the malicious package while testing a Cursor MCP plugin that introduced LiteLLM as a transitive dependency.RalfHackerNamed developer of AdaptixC2; the article reports links to the Russian criminal underground but does not establish participation in this compromise.
Threat Actors
@pcpcatsExplicitly identified as an alias of TeamPCP. The account claimed an Israel location; the article treats geographic attribution as uncertain.MegaGame10418Handle of the actor reported to have exploited Trivy's misconfigured pull_request_target workflow and exfiltrated the aqua-bot Personal Access Token in late February 2026.PersyPCPExplicitly identified as an alias of TeamPCP, the group attributed the reported supply chain compromises.ShellforceExplicitly identified as an alias of TeamPCP, the group attributed the reported supply chain compromises.TeamPCPGroup attributed the multi-ecosystem supply chain compromises. The article identifies Shellforce, PersyPCP, and @pcpcats as aliases and assesses a financially motivated small criminal team with moderate confidence.
Malware
Akira"RalfHacker," has been linked to the Russian criminal underground. The framework has been used by an Akira ransomware affiliate, based on infrastructure overlap, though the strength of this attribution linkCanisterWorm20): Less than 24 hours after the Trivy compromise, TeamPCP deployed a self-propagating worm — dubbed CanisterWorm by Aikido researchers — across the npm ecosystem. The worm stole npm tokens from compromised runners,
Vendors
Aqua SecurityTrivy is an open-source vulnerability scanner developed by Aqua Security. It scans container images, filesystems, and infrastructure-as-code for security vulnerabilities, and it is integrated into the CI/CD pipelines ofBerriAIA security researcher opened GitHub issue #24512 against BerriAI's LiteLLM repository with a simple, devastating subject line: "CRITICAL: Malicious LiteLLM_init.pth in LiteLLM 1.82.8 PyPI package, credential stealer."DEMENIN B.V.were hosted on AS205759, a bulletproof hosting provider operating under Ghosty Networks LLC / DEMENIN B.V. with a Netherlands/Ukraine jurisdictional gap exploited for abuse reporting friction. JARM TLSGhosty Networks LLC(LiteLLM[.]cloud), were hosted on AS205759, a bulletproof hosting provider operating under Ghosty Networks LLC / DEMENIN B.V. with a Netherlands/Ukraine jurisdictional gap exploited for abuse reporting
Products
Arize Phoenixhours after publication. Multiple downstream projects, including DSPy, MLflow, OpenHands, CrewAI, and Arize Phoenix, filed security PRs to pin away from the affected versions on the same day.CrewAIthree hours after publication. Multiple downstream projects, including DSPy, MLflow, OpenHands, CrewAI, and Arize Phoenix, filed security PRs to pin away from the affected versions on the same day.Docker HubThe campaign spanned PyPI, npm, Docker Hub, GitHub Actions, and OpenVSX in a single coordinated operation. While it did not specifically target AI infrastructure, the campaign's cascade through developer tooling caughtDSPyboth versions approximately three hours after publication. Multiple downstream projects, including DSPy, MLflow, OpenHands, CrewAI, and Arize Phoenix, filed security PRs to pin away from the affected versionsGitHub ActionsThe campaign spanned PyPI, npm, Docker Hub, GitHub Actions, and OpenVSX in a single coordinated operation. While it did not specifically target AI infrastructure, the campaign's cascade through developer tooling caughtKICSCheckmarx KICS (March 23): Using compromised Checkmarx credentials, TeamPCP hijacked all 35 tags (v1 through v2.1.20) of the KICS GitHub Action, an infrastructure-as-code security scanner. Two malicious VS CodeLiteLLMOn March 24, production systems running LiteLLM started dying, and engineers saw runaway processes, CPU pegged at 100%, containers killed by out-of-memory (OOM) errors. The stack traces pointed to the LiteLLM package, aMLflowboth versions approximately three hours after publication. Multiple downstream projects, including DSPy, MLflow, OpenHands, CrewAI, and Arize Phoenix, filed security PRs to pin away from the affected versions on thenpmThe campaign spanned PyPI, npm, Docker Hub, GitHub Actions, and OpenVSX in a single coordinated operation. While it did not specifically target AI infrastructure, the campaign's cascade through developer tooling caughtOpenHandsapproximately three hours after publication. Multiple downstream projects, including DSPy, MLflow, OpenHands, CrewAI, and Arize Phoenix, filed security PRs to pin away from the affected versions on the same day.OpenVSXThe campaign spanned PyPI, npm, Docker Hub, GitHub Actions, and OpenVSX in a single coordinated operation. While it did not specifically target AI infrastructure, the campaign's cascade through developer tooling caughtPyPI3.4 million times per day that serves as a unified gateway to multiple LLM providers, was compromised on PyPI. Upon analysis, it was found that versions 1.82.7 and 1.82.8 contained malicious code that stole cloud
Tools
AdaptixC2across both nodes, a fingerprint inconsistent with commodity nginx and consistent with the AdaptixC2 framework, an open-source Go C&C toolkit.kubectlThe script reads K8s config files and runs kubectl. It also reads the K8s service account token from the well-known mount path, then uses the K8s API to enumerate all secrets across all namespaces. API-based enumerationpipdeptreeAudit transitive dependencies. You may not use LiteLLM directly but pull it through DSPy, CrewAI, or other frameworks. Use pipdeptree or uv pip tree to check.setup-trivycredentials to force-push 76 of 77 release tags in the trivy-action repository, and all seven tags in setup-trivy, to malicious commits containing a multi-stage credential stealer (T1195.002 — Compromise SoftwareTrivytracked as TeamPCP. This post traces the cascade from its origin, the open-source vulnerability scanner Trivy, and then presents our technical analysis of the LiteLLM payload.trivy-actionand it is integrated into the CI/CD pipelines of thousands of software projects via the trivy-action GitHub Action.
Countries
BrazilTeamPCP's .onion site and Telegram channels document affected systems across the United States, China, Brazil, Philippines, India, Turkey, Chile, South Korea, Vietnam, and Uzbekistan. V from the United States spanChilechannels document affected systems across the United States, China, Brazil, Philippines, India, Turkey, Chile, South Korea, Vietnam, and Uzbekistan. V from the United States span telecommunications infrastructure,ChinaTeamPCP's .onion site and Telegram channels document affected systems across the United States, China, Brazil, Philippines, India, Turkey, Chile, South Korea, Vietnam, and Uzbekistan. V from the United StatesIndiaand Telegram channels document affected systems across the United States, China, Brazil, Philippines, India, Turkey, Chile, South Korea, Vietnam, and Uzbekistan. V from the United States span telecommunicationsIranAttribution is complicated by the Iran-targeted wiper component (kamikaze[.]sh). This could indicate a Russian criminal actor with anti-Iran motivation, a deliberate false flag, or a multi-party operation. We assessIsraelagainst three attribution candidates: The @pcpcats account from October 2023 claims they are based in Israel, although indicates they are connected via a South Africa Android app. The strong attribution signal isNetherlandson AS205759, a bulletproof hosting provider operating under Ghosty Networks LLC / DEMENIN B.V. with a Netherlands/Ukraine jurisdictional gap exploited for abuse reporting friction. JARM TLS fingerprinting revealedPhilippines.onion site and Telegram channels document affected systems across the United States, China, Brazil, Philippines, India, Turkey, Chile, South Korea, Vietnam, and Uzbekistan. V from the United States spanSouth Africaaccount from October 2023 claims they are based in Israel, although indicates they are connected via a South Africa Android app. The strong attribution signal is cultural.South Koreadocument affected systems across the United States, China, Brazil, Philippines, India, Turkey, Chile, South Korea, Vietnam, and Uzbekistan. V from the United States span telecommunications infrastructure, automotiveTurkeyTelegram channels document affected systems across the United States, China, Brazil, Philippines, India, Turkey, Chile, South Korea, Vietnam, and Uzbekistan. V from the United States span telecommunicationsUkrainea bulletproof hosting provider operating under Ghosty Networks LLC / DEMENIN B.V. with a Netherlands/Ukraine jurisdictional gap exploited for abuse reporting friction. JARM TLS fingerprinting revealed identicalUnited Statesthis assessment. TeamPCP's .onion site and Telegram channels document affected systems across the United States, China, Brazil, Philippines, India, Turkey, Chile, South Korea, Vietnam, and Uzbekistan. V from theUzbekistanacross the United States, China, Brazil, Philippines, India, Turkey, Chile, South Korea, Vietnam, and Uzbekistan. V from the United States span telecommunications infrastructure, automotive rental, employmentVietnamsystems across the United States, China, Brazil, Philippines, India, Turkey, Chile, South Korea, Vietnam, and Uzbekistan. V from the United States span telecommunications infrastructure, automotive rental,
Industries
automotive rentalKorea, Vietnam, and Uzbekistan. V from the United States span telecommunications infrastructure, automotive rental, employment platforms, and business analytics. Chinese victims operate in SaaS, financial trading,business analyticsUnited States span telecommunications infrastructure, automotive rental, employment platforms, and business analytics. Chinese victims operate in SaaS, financial trading, and e-commerce dropshipping. Brazil,digital payment/loyalty solutionsemployment and e-commerce platforms. Chile and Uzbekistan represent sectoral outliers with digital payment/loyalty solutions and fantasy sports infrastructure.E-commerceemployment platforms, and business analytics. Chinese victims operate in SaaS, financial trading, and e-commerce dropshipping. Brazil, Philippines, and Turkey entities run fintech and payment processing operations.employment platformsUzbekistan. V from the United States span telecommunications infrastructure, automotive rental, employment platforms, and business analytics. Chinese victims operate in SaaS, financial trading, and e-commercefantasy sportsChile and Uzbekistan represent sectoral outliers with digital payment/loyalty solutions and fantasy sports infrastructure.financial tradingautomotive rental, employment platforms, and business analytics. Chinese victims operate in SaaS, financial trading, and e-commerce dropshipping. Brazil, Philippines, and Turkey entities run fintech and paymentfintechin SaaS, financial trading, and e-commerce dropshipping. Brazil, Philippines, and Turkey entities run fintech and payment processing operations. India, South Korea, and Vietnam victims operate employment andPayment processingtrading, and e-commerce dropshipping. Brazil, Philippines, and Turkey entities run fintech and payment processing operations. India, South Korea, and Vietnam victims operate employment and e-commerce platforms.SaaSautomotive rental, employment platforms, and business analytics. Chinese victims operate in SaaS, financial trading, and e-commerce dropshipping. Brazil, Philippines, and Turkey entities run fintech andTelecommunicationsIndia, Turkey, Chile, South Korea, Vietnam, and Uzbekistan. V from the United States span telecommunications infrastructure, automotive rental, employment platforms, and business analytics. Chinese victims