Mar 25, 2026·6 min read·89 visits
Malicious actors published LiteLLM versions 1.82.7 and 1.82.8 to PyPI after stealing publisher credentials via a compromised GitHub Action. The malware automatically executes on Python startup to steal cloud, developer, and AI credentials, while attempting lateral movement within Kubernetes clusters.
Threat actors compromised the CI/CD pipeline of the LiteLLM package by poisoning a dependency, allowing them to steal PyPI publisher credentials. These credentials were used to publish two malicious versions of LiteLLM that deploy a persistent credential harvester and Kubernetes worm via Python's .pth file mechanism.
The LiteLLM package, a widely used AI management library and gateway, was the target of a sophisticated supply chain attack on March 24, 2026. Threat actors successfully bypassed repository security controls to publish two malicious package versions, 1.82.7 and 1.82.8, directly to the Python Package Index (PyPI). This compromise did not stem from a vulnerability in the LiteLLM source code itself, but rather a targeted attack against its build environment and release pipeline.
The malicious packages functioned as multi-stage malware designed to harvest sensitive developer and infrastructure credentials. Because LiteLLM operates as an AI gateway, it naturally processes and has access to high-value AI provider API keys (such as OpenAI and Anthropic), making it a lucrative target for credential theft. The exposure window lasted approximately three hours before PyPI security teams quarantined and removed the affected artifacts.
This incident highlights the critical risk posed by implicit trust in CI/CD pipeline dependencies. By compromising a third-party security scanning action, the attackers gained the execution privileges necessary to extract deployment secrets, entirely circumventing branch protection rules and multi-factor authentication requirements enforced at the repository layer.
The initial access vector for this supply chain compromise was the poisoning of a third-party GitHub Action used within the LiteLLM continuous integration pipeline. On March 19, 2026, the threat actor group identified as TeamPCP compromised the release tags for aqua-security/trivy-action, an open-source container security scanner. This action was explicitly defined as a step in the LiteLLM build workflow.
When the LiteLLM CI/CD pipeline executed using the poisoned Trivy action tags, it unknowingly pulled down and executed malicious shell code embedded by the attackers. This code was specifically engineered to access the runner's environment variables and memory space during the build process, allowing it to capture the PyPI publisher API tokens provisioned for the release job.
Possessing the valid PyPI publisher credentials, the threat actors no longer needed access to the LiteLLM GitHub repository. On March 24, 2026, they authenticated directly to the PyPI registry API and published the backdoored versions. This sequence demonstrates a classic CI/CD pivot, where a compromised tertiary dependency (Trivy action) leads to the compromise of primary deployment credentials.
The malware embedded within the published LiteLLM packages utilized Python's Path Configuration (.pth) file mechanism to guarantee execution and maintain persistence. When a Python package is installed via pip, .pth files included in the distribution are placed directly into the environment's site-packages directory.
During the initialization phase of the Python interpreter, the site module automatically scans the site-packages directory for any files ending in .pth. If a .pth file contains an executable statement prefixed with import, the interpreter evaluates and executes that code before any user scripts are run. The attackers leveraged this feature by embedding their stage-one payload invocation within a .pth file distributed with the malicious LiteLLM wheels.
This mechanism ensures the malware executes every time the Python interpreter starts within the compromised environment. The victim does not need to explicitly import litellm in their code; merely having the malicious package installed in the active virtual environment or system path is sufficient to trigger the payload upon any Python execution.
The embedded malware executes a sophisticated three-stage payload focused on broad credential theft and lateral movement. Stage 1 is an exhaustive information collection phase. The script traverses standard directory locations to harvest cloud provider credentials (targeting ~/.aws/credentials, GCP, and Azure configurations), SSH private keys (~/.ssh/), local .env files, and local cryptocurrency wallet data. Given the context of LiteLLM, it also aggressively scans environment variables for AI provider API keys.
Stage 2 handles the exfiltration of the harvested data. To evade rudimentary network-based data loss prevention (DLP) systems, the malware locally encrypts the aggregated secrets before transmission. The encrypted payload is then exfiltrated via HTTPS to models.litellm.cloud, a domain registered by the threat actors on March 23, 2026, specifically to masquerade as legitimate LiteLLM telemetry or model-fetching traffic.
Stage 3 introduces significant operational risk to containerized environments by deploying a "Kubernetes worm" module. This component inspects the local file system for injected Kubernetes service account tokens, typically mounted at /var/run/secrets/kubernetes.io/serviceaccount/token. If found, the malware uses the token to interact with the Kubernetes API, attempting to enumerate the cluster and move laterally to other pods or nodes.
The installation of LiteLLM version 1.82.7 or 1.82.8 results in a total loss of confidentiality for all secrets accessible to the Python environment's user context. Organizations must treat any system, container, or CI runner that installed these specific versions as fundamentally compromised. The impact extends beyond the immediate host, as the exfiltrated cloud credentials and Kubernetes tokens enable attackers to pivot into the broader infrastructure.
Immediate remediation requires isolating the affected environments from the network to halt ongoing exfiltration and lateral movement attempts. The malicious packages must be uninstalled, and dependencies should be pinned to known safe versions, such as 1.82.6 or verified subsequent releases. Forensic analysis should inspect network logs for connections to models.litellm.cloud to confirm if exfiltration occurred.
The most critical remediation step is comprehensive secret rotation. Because the malware indiscriminately harvests local state, administrators must systematically revoke and reissue all AWS/GCP/Azure IAM keys, GitHub Personal Access Tokens, SSH private keys, and AI provider API keys that were present on the affected systems. Failure to rotate these credentials leaves the infrastructure vulnerable to subsequent access by the threat actors, even after the malware is removed.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H| Product | Affected Versions | Fixed Version |
|---|---|---|
litellm LiteLLM | 1.82.7 - 1.82.8 | Removed from PyPI |
| Attribute | Detail |
|---|---|
| Attack Vector | Supply Chain / CI/CD Poisoning |
| Execution Mechanism | Python .pth File Initialization |
| CWE ID | CWE-506 (Embedded Malicious Code) |
| Impact | Credential Theft and Lateral Movement |
| Exploit Status | Active Exploitation (March 2026) |
| Malicious Domain | models.litellm.cloud |
The product contains embedded malicious code, such as a time bomb, logic bomb, or trojan horse.
An insecure data retrieval flaw in the Froxlor server administration panel API allows authenticated remote attackers to retrieve unredacted bcrypt password hashes and Base32-encoded Time-Based One-Time Password (TOTP) seeds. Affected endpoints include several 'get' and 'listing' handlers for customers, administrators, and FTP accounts. Utilizing these leaked parameters, attackers can crack the password hashes offline and concurrently generate valid second-factor authentication codes to completely bypass access controls.
CVE-2026-70666 is a critical Server-Side Request Forgery (SSRF) vulnerability in Netflix Lemur's ACME certificate management integration. Prior to version 1.9.3, the system allowed authority-role users to bypass initial ACME URL allowlist validations when updating an existing authority. Additionally, the underlying ACME network client blindly parsed and connected to dynamic endpoint URLs supplied in JSON responses from the configured ACME directory, allowing attackers to route arbitrary JWS-signed requests to internal services or cloud metadata endpoints.
A security vulnerability in Netflix Lemur, a TLS certificate management framework, allows authenticated operators to bypass Server-Side Request Forgery (SSRF) mitigations. The issue exists within the certificate revocation verification workflow, specifically inside the CRL and OCSP retrieval logic. By exploiting HTTP redirects or DNS rebinding (Time-of-Check Time-of-Use) mechanisms, an attacker can coerce the server into issuing arbitrary network requests to internal services, such as the cloud instance metadata service (IMDS) or loopback addresses. This bypass neutralizes previous network-boundary validation logic and allows blind read/write SSRF targeting internal infrastructure resources.
Netflix Lemur, an open-source TLS certificate management framework, is affected by a Server-Side Request Forgery (SSRF) vulnerability. This vulnerability arises from an incomplete patch for a previous security flaw, CVE-2026-55166. While Lemur version 1.9.2 validated the ACME directory URL against an allowlist during authority creation, it failed to perform the same checks when updating existing authorities. An authenticated user possessing an authority role can exploit this omission to replace the directory URL with internal or cloud metadata endpoints. During subsequent certificate issuance, the Lemur backend executes unauthorized requests, potentially leaking sensitive metadata or credentials.
An authorization bypass and information disclosure vulnerability in Netflix Lemur before version 1.9.3 allows authenticated, low-privilege users to retrieve raw destination configurations, exposing plaintext credentials such as SFTP passwords and private key passphrases.
Netflix Lemur before 1.9.3 contains a missing authorization vulnerability (CWE-862, CWE-639) when handling certificate creation, upload, or modification. Authenticated non-read-only users can manipulate the replaces parameter to silence expiration notifications and hijack certificate rotation tasks for arbitrary targets, leading to unauthorized TLS certificate deployment and traffic interception.