{"id":49602,"date":"2026-10-22T16:08:42","date_gmt":"2026-10-22T10:38:42","guid":{"rendered":"https:\/\/www.getastra.com\/blog\/?p=49602"},"modified":"2026-10-22T16:11:21","modified_gmt":"2026-10-22T10:41:21","slug":"litellm-supply-chain-attack","status":"publish","type":"post","link":"https:\/\/www.getastra.com\/blog\/security-advisory\/litellm-supply-chain-attack\/","title":{"rendered":"LiteLLM Supply Chain Attack: Malicious PyPI Release Steals Credentials"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">On October 21, 2026, a malicious version of LiteLLM (1.107.0) was published to PyPI. LiteLLM is a widely used open-source proxy that connects applications to more than 100 LLM providers.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The compromised release contained an infostealer designed to exfiltrate credentials and a remote access trojan (RAT) capable of downloading and executing additional code. Stolen AWS credentials were reportedly abused within hours of the initial exfiltration.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The malicious PyPI package was quarantined, and compromised Docker tags were removed. <strong>The latest reported safe version is<\/strong> <strong>1.106.2<\/strong><strong>.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Organizations that installed or executed the compromised release should treat affected systems as potentially compromised and begin incident response immediately.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"How_the_LiteLLM_Supply_Chain_Attack_Happened\"><\/span>How the LiteLLM Supply Chain Attack Happened<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The attack originated from a lookalike GitHub repository, Berri-AI\/litellm, which was used to introduce malicious files and modify the release pipeline.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The attacker reportedly compromised three engineers\u2019 GitHub accounts using stolen GitHub CLI OAuth tokens. These accounts were used to trigger and approve a release, allowing the malicious version to reach PyPI and Docker registries.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Changes to pyproject.toml and Dockerfiles helped package and execute the malicious payload. The LiteLLM team subsequently revoked the compromised tokens.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What_Data_Was_Stolen\"><\/span>What Data Was Stolen?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The infostealer targeted a broad range of sensitive information, including:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Cloud credentials:<\/strong> AWS, GCP, and Azure tokens and keys.<\/li>\n\n\n\n<li><strong>AI provider secrets:<\/strong> API keys for OpenAI, Anthropic, Cohere, and other LLM services.<\/li>\n\n\n\n<li><strong>Developer credentials:<\/strong> GitHub tokens, SSH and GPG keys, package manager credentials, and developer tool secrets.<\/li>\n\n\n\n<li><strong>Browser data:<\/strong> Saved passwords, cookies, and browsing history.<\/li>\n\n\n\n<li><strong>Infrastructure secrets:<\/strong> Kubernetes tokens, Docker credentials, CI\/CD secrets, and Vault tokens.<\/li>\n\n\n\n<li><strong>LiteLLM database records:<\/strong> Configured provider credentials and proxy model information.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The stolen data was encrypted before being exfiltrated to www.litellm[.]dev\/healthcheck, a lookalike domain impersonating LiteLLM infrastructure.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Post-Exploitation_Activity\"><\/span>Post-Exploitation Activity<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A separate payload, delivered through sitecustomize.py, attempted to contact a GitHub-hosted dead-drop repository every hour. If supplied with a usable command-and-control domain, it could retrieve and execute additional Python code.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Although no second-stage payload was observed during the initial analysis, the capability remained on infected systems.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The incident also progressed beyond credential theft. On October 21, suspicious AWS activity was observed from 168.100.8[.]57 and 165.227.201[.]8, including credential validation, Amazon Bedrock model enumeration, and IAM discovery. These activities are consistent with attempts to abuse stolen cloud credentials for unauthorized LLM usage and further reconnaissance.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Indicators_of_Compromise_IOCs\"><\/span>Indicators of Compromise (IOCs)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Security teams should investigate the following indicators alongside their endpoint, network, and cloud audit logs:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Malicious package:<\/strong><code> litellm==1.107.0<\/code><\/li>\n\n\n\n<li><strong>Suspicious domain:<\/strong> <code>www.litellm[.]dev<\/code><\/li>\n\n\n\n<li><strong>RAT dead-drop URL:<\/strong> <code>raw.githubusercontent[.]com\/letters9813\/pythonclient-test\/main\/domain.txt<\/code><\/li>\n\n\n\n<li><strong>Persistence lock file<\/strong><code><strong>:<\/strong> \/tmp\/remote_code_loader.lock<\/code><\/li>\n\n\n\n<li><strong>Stealer sentinel file:<\/strong> <code>\/tmp\/.pc_once_72129118c59f5636c0bb<\/code><\/li>\n\n\n\n<li><strong>Suspicious source IPs:<\/strong> 1<code>68.100.8[.]57, 165.227.201[.]8<\/code><\/li>\n\n\n\n<li><strong>Environment variable:<\/strong> <code>PRIVCOLLECT_ACTIVE=1<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">These indicators may change or become inactive. Their absence does not prove that a system is clean.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"How_to_Respond_to_the_LiteLLM_Compromise\"><\/span>How to Respond to the LiteLLM Compromise<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Organizations that installed or executed the malicious release should:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Upgrade to a verified safe version:<\/strong> Pin LiteLLM to 1.106.2 or another release explicitly confirmed safe by the maintainers.<\/li>\n\n\n\n<li><strong>Rotate exposed credentials:<\/strong> Replace cloud keys, LLM API keys, GitHub tokens, SSH keys, database credentials, and other secrets accessible to affected hosts.<\/li>\n\n\n\n<li><strong>Investigate cloud activity:<\/strong> Review AWS CloudTrail for unexpected <code>sts:GetCallerIdentity<\/code>, <code>bedrock:ListFoundationModels<\/code>, and IAM enumeration calls.<\/li>\n\n\n\n<li><strong>Contain affected systems:<\/strong> Isolate compromised hosts and rebuild them from trusted images rather than relying solely on deleting malicious files.<\/li>\n\n\n\n<li><strong>Inspect CI\/CD pipelines:<\/strong> Review GitHub audit logs, release approvals, OAuth token usage, and container image provenance.<\/li>\n\n\n\n<li><strong>Check downstream deployments:<\/strong> Identify affected containers, Kubernetes workloads, developer machines, and CI runners.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Simply upgrading the package is not sufficient if the malicious code has already executed and exposed credentials.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"How_Astra_Helps_Reduce_Supply_Chain_Risk\"><\/span>How Astra Helps Reduce Supply Chain Risk<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Supply chain attacks demonstrate how a single compromised dependency can expose cloud infrastructure, developer environments, customer data, and production workloads.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">At Astra Security, we recommend combining <strong>regular <a href=\"https:\/\/www.getastra.com\/blog\/tag\/website-penetration-testing\/\" target=\"_blank\" data-type=\"post_tag\" data-id=\"667\" rel=\"noreferrer noopener\">penetration testing<\/a>, dependency security reviews, and continuous<a href=\"https:\/\/www.getastra.com\/dast\" target=\"_blank\" rel=\"noreferrer noopener\"> vulnerability managemen<\/a>t<\/strong> to identify weaknesses before attackers can exploit them.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Regular penetration testing can help uncover excessive permissions, exposed secrets, weak network boundaries, vulnerable APIs, and gaps in incident detection. These weaknesses can turn a compromised dependency into a much larger security incident.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To reduce the blast radius of future compromises, organizations should also enforce least-privilege access, isolate CI\/CD environments, use short-lived credentials, maintain strong secret-management practices, and monitor unusual cloud API activity.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>A compromised dependency should not automatically mean a compromised organization.<\/strong> Regular security testing and effective containment controls help limit what an attacker can access, how far they can move, and how much damage they can cause.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Astra helps organizations identify exploitable weaknesses through security assessments and penetration testing, strengthening their defenses against supply chain attacks and other emerging threats.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Source\"><\/span>Source<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><a href=\"https:\/\/docs.litellm.ai\/blog\/security-incident-oct-21-2026\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">https:\/\/docs.litellm.ai\/blog\/security-incident-oct-21-2026<\/a><\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>On October 21, 2026, a malicious version of LiteLLM (1.107.0) was published to PyPI. LiteLLM is a widely used open-source proxy that connects applications to more than 100 LLM providers. The compromised release contained an infostealer designed to exfiltrate credentials and a remote access trojan (RAT) capable of downloading and executing additional code. Stolen AWS &#8230; <a title=\"LiteLLM Supply Chain Attack: Malicious PyPI Release Steals Credentials\" class=\"read-more\" href=\"https:\/\/www.getastra.com\/blog\/security-advisory\/litellm-supply-chain-attack\/\" aria-label=\"Read more about LiteLLM Supply Chain Attack: Malicious PyPI Release Steals Credentials\">Read more<\/a><\/p>\n","protected":false},"author":138,"featured_media":49605,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[819],"tags":[],"class_list":["post-49602","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-security-advisory"],"_links":{"self":[{"href":"https:\/\/www.getastra.com\/blog\/wp-json\/wp\/v2\/posts\/49602","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.getastra.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.getastra.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.getastra.com\/blog\/wp-json\/wp\/v2\/users\/138"}],"replies":[{"embeddable":true,"href":"https:\/\/www.getastra.com\/blog\/wp-json\/wp\/v2\/comments?post=49602"}],"version-history":[{"count":2,"href":"https:\/\/www.getastra.com\/blog\/wp-json\/wp\/v2\/posts\/49602\/revisions"}],"predecessor-version":[{"id":49613,"href":"https:\/\/www.getastra.com\/blog\/wp-json\/wp\/v2\/posts\/49602\/revisions\/49613"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.getastra.com\/blog\/wp-json\/wp\/v2\/media\/49605"}],"wp:attachment":[{"href":"https:\/\/www.getastra.com\/blog\/wp-json\/wp\/v2\/media?parent=49602"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.getastra.com\/blog\/wp-json\/wp\/v2\/categories?post=49602"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.getastra.com\/blog\/wp-json\/wp\/v2\/tags?post=49602"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}