你打的那行 pip install litellm,可能已经把你AWS密钥送给了黑客。

image

这不是演习。2026年3月24日,Python生态圈最受欢迎的AI模型路由库LiteLLM,在PyPI上被投毒。恶意版本只挂了3小时,却足以让全球数百万开发者的机器变成别人的提款机。

AWS密钥、Kubernetes配置、Git凭证、加密货币钱包——只要你那天跑了 pip install litellm,这些秘密可能已经坐上了黑客的服务器。

更瘆人的是:这次攻击不是意外,而是一场精心策划的供应链入侵。黑客先搞定了安全扫描工具Trivy,再用它偷到了LiteLLM的发布密钥,最后在PyPI上扔下了两个带毒的版本。

而这一切差点没人发现。

image

一切从一个"BUG"开始

3月24日,FutureSearch的工程师Callum McMahon正在测试一个Cursor MCP插件。插件需要 litellm 作为依赖。

就在 pip install 完成后,他的机器突然卡死了——内存被吃干抹净。

如果是别人,可能就直接重启完事。但McMahon不是省油的灯。他顺着异常一路追查,发现了 site-packages/ 目录下有个叫 litellm_init.pth 的文件,足有34,628字节。

这个 .pth 文件,是Python的一个"启动钩子"。只要Python解释器启动——不管是你跑代码、装包、还是IDE打开——它都会自动执行。

McMahon把文件内容拖出来一看,好家伙,base64编码的恶意代码,塞满了偷凭证的逻辑。

"如果攻击者没写错这行代码导致内存耗尽,这个后门可能已经潜伏好几周了。"

Andrej Karpathy事后感叹:"供应链攻击是现代软件最可怕的事情。"

image

攻击链:一场长达5天的潜伏

让我把时间拨回3月19日。

那天,攻击者盯上了Trivy——一个开源容器安全扫描工具,在GitHub上星标超过30k。他们利用Trivy CI/CD流程里的一个漏洞,偷走了 aqua-bot 的凭证。

这一步,是整个攻击的起点。

3月23日,注册了恶意域名 models.litellm.cloud(注意,这跟正规的 litellm.ai 毫无关系)。同一天,另一个安全工具Checkmarx KICS也遭了毒手。

3月24日上午10:39,LiteLLM 1.82.7 上架PyPI。13分钟后,1.82.8 跟上。

这两个版本有多毒?

1.82.7 把恶意代码直接嵌进 proxy_server.py,只要你import litellm.proxy,代码就激活。

1.82.8 更阴险,直接写入了 .pth 文件。这意味着——

pip install 的时候,恶意代码就跑了。

你开IDE写Python的时候,恶意代码就跑了。

你跑任何Python脚本,恶意代码就跑了。

甚至——你在CI/CD里跑测试,恶意代码也在后台悄悄执行。

Snyk的数据显示,LiteLLM每天被下载340万次。中招的不只是直接安装的人。任何依赖litellm的项目——DSPy、MLflow、OpenHands、CrewAI——全部被拖下水。

这就是供应链攻击的恐怖之处:你永远不知道你装的那个包,里面藏着谁的黑手。

image

黑客是怎么偷的?三阶段Payload全解析

拿到凭证后,黑客的代码开始满世界搜刮。

第一阶段:信息收集

脚本会在你的机器上翻个底朝天:

  • SSH私钥、.env文件、Git凭证
  • AWS、GCP、Azure的所有云凭据
  • Kubernetes配置、Docker registry密码
  • CI/CD配置(Jenkins、Travis CI、Terraform)
  • 加密货币钱包(BTC、ETH、Solana、Monero)
  • 甚至 /etc/shadow 里的密码哈希

image

第二阶段:加密传输

偷到的数据会用AES-256加密,再套一层RSA 4096位非对称加密,最后打包成 tpcp.tar.gz 发送到 models.litellm.cloud。

整个过程,你的系统完全无感。

image

第三阶段:持久化和横向移动

恶意代码会在你家里留下后门:

  • 写一个 sysmon.py 到 ~/.config/sysmon/
  • 创建一个systemd服务,每次开机自动启动
  • 每5分钟去 checkmarx.zone 领新指令,想干什么干什么

如果检测到Kubernetes环境?它会直接在你的集群里起特权Pod,把后门种到每个节点上。

Wiz的研究员确认了一个细节:LiteLLM、Trivy、KICS这三个攻击用的RSA公钥是同一把。这是TeamPCP(也叫Persy_PCP、ShellForce、DeadCatx3)的签名。

这个组织从2025年12月就开始作案,这次LiteLLM事件是他们的第九阶段

当社区开始自救,黑客在删帖

最魔幻的来了。

3月24日上午11:48,McMahon在GitHub上开了issue #24512,披露了这个后门。

然后呢?

12:44到12:46,88条机器人评论从73个账号涌进来,全是垃圾内容。2分钟后,攻击者用窃取的维护者账号 krrishdholakia 把issue关掉了,标记为"not planned"。

这是抢在社区反应之前,先把嘴堵上

好在大家又开了新issue #24518,Hacker News上讨论炸了,324个points。攻击者的把戏没完全得逞。

你中招了吗?

快速检查:

pip show litellm | grep Version

如果显示 1.82.7 或 1.82.8——

image

别慌着升级。先别跑任何Python代码。因为升级过程本身就会触发 .pth 里的恶意代码。

你需要:

  1. 删掉 ~/.config/sysmon/ 里的后门
  2. 查systemd服务 sysmon.service
  3. 重置所有凭证SSH密钥、AWS访问密钥、GCP服务账号、GitHub token、Kubernetes secret、Docker密码、数据库密码、加密货币钱包
  4. 如果在K8s里跑过,审计所有namespace的secret,检查 kube-system 里有没叫 node-setup-* 的可疑Pod

为什么pip的哈希校验没拦住?

这是最让人脊背发凉的事实。

pip install --require-hashes 会验证文件完整性——但它只验证文件没被篡改,不验证内容是不是恶意的

恶意代码是用正规密钥发布的,走的正规流程。PyPI显示一切正常,hash对得上,文件名没拼错。

"唯一的检测路径是检查包是否安装了 .pth 文件,以及文件里有没有 subprocess、base64、exec 这种敏感词。但现在没有主流pip插件做这件事。"

这是Snyk报告里的一句话。翻译成人话:我们信任了"正规渠道",但正规渠道已经被端了。

这事还没完

LiteLLM事件是Phase 09。TeamPCP的Pipeline里,Phase 10可能已经在路上了。

他们甚至开始用AI帮忙找目标。研究员发现了一个叫 hackerbot-claw 的组件,里面跑着 openclaw——一个AI agent,自动扫描下一个猎物。

攻击者甚至用上了Internet Computer Protocol (ICP) 做C2通信。因为ICP是去中心化的,域名注册商封不了,服务器提供商也砍不掉。

这意味着什么?

供应链攻击正在升级。不仅是技术升级,是战略升级。

以前是偷个库、改个代码,现在是先渗透你的开发工具,再用你的凭证去投毒下一个库。一环扣一环,防不胜防。

写在最后

Karpathy说得对:"古典软件工程告诉我们,依赖是好的——我们在用砖头堆金字塔。但现在,这事得重新掂量了。"

他最近越来越倾向于,让LLM直接生成简单的功能代码,而不是引入一堆第三方库。

也许未来,写代码的方式会变。但现在——

今晚回去,先检查一下你机器上的 litellm 版本吧。

【MiniMax-M2.5锐评】:这波攻击把"信任链"三个字按在地上摩擦——你信任PyPI,PyPI信任维护者,维护者的CI/CD被渗透了,然后你机器上的AWS密钥就成了别人的提款机。供应链安全这事儿,不是加几个检查就能解决的。

参考链接:
https://x.com/karpathy/status/2036487306585268612