一、祸起萧墙:9500万下载量的AI神器变“内鬼” 🚨
AI 时代!人人都在深耕 AI 安全,你缺的就是这关键一步!🚀
AI 正重塑安全边界,与其在门外徘徊,不如直接掌握主动权!

在2026年3月24日这个本该平静的日子里,网络安全实验室 Endor Labs 投下了一枚震撼弹:大名鼎鼎的开源项目 litellm 遭遇了极其严重的代码投毒!☠️
如果你不在 AI 圈子里混,可能不知道 litellm 的含金量。简单来说,它就像是连接各个大语言模型(LLM)的“超级路由器”和“万能转换插头”🔌。无论你是想用 OpenAI 的模型,还是 Anthropic、Google 的模型,开发者只需要通过 litellm 就能用统一的 API 接口进行调用。正是因为极其方便,它的月下载量已经突破了恐怖的 9500 万次!📈 试想一下,全球有多少顶尖的科技公司、初创团队和核心业务系统正在日夜不停地运行着这个代码库。

然而,Endor Labs 发现,在 Python 官方包管理平台(PyPI)上发布的 litellm1.82.7 版本和 1.82.8 版本中,被悄悄塞进了恶意的后门代码。😱 最让人细思极恐的是,这些恶意代码在 GitHub 上的开源代码库里根本不存在!黑客是直接在打包上传到 PyPI 的最终分发文件(Wheel 文件)里动了手脚,完美绕过了所有针对源代码的常规安全审查。🕵️♂️
一旦你或者你的系统不小心安装了这两个被感染的版本,简直就是引狼入室。恶意载荷会在你毫无察觉的情况下瞬间激活,并在你的系统中潜伏下来。为了让你一目了然,我们先来看看受影响版本的具体情况:
| litellm | 1.82.7 | proxy_server.py | ||
| litellm | 1.82.8 | proxy_server.pylitellm_init.pth(只要启动 Python 就触发) |
💡 安全提示: 目前已知最后一个安全、干净的版本是 1.82.6(发布于 2026年3月22日,已经过 Endor Labs 验证安全)。如果你在 3 月 24 日之后更新过依赖库,请立刻拉响最高级别的红色警报!🚨
这绝对不是一次普通的漏洞,而是一场蓄谋已久、针对性极强、且破坏力惊人的供应链攻击。黑客的目标非常明确:他们不仅要偷走你服务器上所有的密码、密钥 and 数字资产,还要把你的 Kubernetes 集群变成他们的“后花园”。接下来,我们将带你扒开这层画皮,看看黑客到底是如何在你眼皮子底下玩偷天换日的。🔍
二、剥茧抽丝:黑客的三重“隐身”投毒手法 🦠
黑客之所以能得手,靠的就是“隐蔽”二字。他们没有大张旗鼓地破坏系统,而是像顶级刺客一样,把毒针藏在了最不起眼的角落。这次投毒的感染链条极其狡猾,我们将其分为几个关键的技术维度来深度剖析。🛠️

1. 致命的 12 行代码:模块导入时的“连环雷” 💣
在 litellm 的包文件中,有一个非常核心的文件叫做 litellm/proxy/proxy_server.py。黑客在这个文件的第 128 行,也就是两个完全正常的代码块(一个字典和一个警告函数)之间,硬生生地插进去了 12 行恶意代码。
你可能会问,为什么不插在开头或结尾?因为插在中间最不容易被肉眼发现!🙈
这 12 行代码会在什么时候触发呢?只要你的项目里写了 import litellm.proxy.proxy_server 这句极为常见的导入代码,炸弹就会瞬间引爆,根本不需要你执行任何具体的函数! 💥
为了躲避杀毒软件和静态代码扫描工具的追杀,黑客非常聪明地避开了 Python 中常用于执行动态代码的 exec() 或 eval() 函数(这两个函数在安全软件眼里就像是头上顶着红名)。相反,黑客把一段极长的恶意脚本进行了 Base64 编码(这就像是给文字加了一层常人看不懂的密码),然后在运行时将其解码,写入一个系统临时文件中,最后用 subprocess.run() 在后台偷偷运行它。由于 proxy_server.py 这个文件本来就需要合法地调用 subprocess 来启动本地的 AI 服务(比如 Ollama),所以这个恶意调用完美地混迹在正常代码中,毫无违和感。🎭
2. 版本 1.82.8 的终极进化:无需导入,见血封喉 🩸
如果你觉得 1.82.7 版本的导入触发已经够恶心了,那 1.82.8 版本简直就是“丧心病狂”。在这个版本中,黑客加入了第二个、也是更具侵略性的攻击载体——一个名为 litellm_init.pth 的文件。
💡 通俗大白话科普时间:什么是 .pth 文件?
在 Python 的世界里,
.pth文件本来是用来帮助配置包路径的。当 Python 解释器启动时(也就是只要你在命令行里敲下python这几个字),系统就会自动、无条件地去读取和执行site-packages目录下的.pth文件。
黑客在这个 34,628 字节的 .pth 文件里,只写了一行极长极长的代码。这行代码做的事情,就是导入 subprocess 模块,然后开启一个与当前程序完全脱离的“幽灵进程”,去执行和之前一样的 Base64 恶意载荷。👻
这两个版本的致命区别在于:
• 1.82.7 版本: 你得在代码里真正用到了(import)特定的 litellm模块,它才会发作.• 1.82.8 版本:只要你的系统环境里安装了这个包,哪怕你今天写的代码是一行简单的 print("Hello World"),只要你运行了 Python,后台就会立刻静默启动黑客的密码收割机! 🤯 并且它使用的是非阻塞模式(subprocess.Popen),你的程序该怎么跑就怎么跑,丝毫感觉不到卡顿,真正的杀人于无形。
3. 笨拙的试错:黑客在正式包里留下的“开发草稿” 📝
在这场堪称精密的攻击中,黑客却犯了一个极其业余的 OPSEC(操作安全)错误:他们在代码的第 131 行和 132 行,留下了两次被注释掉的“历史迭代代码”!通过对这三段 Base64 代码进行解密,安全专家直接“现场观摩”了黑客是如何一步步优化这个木马的:
• 第一代(初出茅庐版,28,924 字节): 最早的版本,使用了很容易被杀软拦截的 exec()函数,把偷来的数据明文写在一个叫collected_vars.txt的文件里,并且使用了自制的 RC4 加密算法来混淆命令。虽然粗糙,但核心的远控服务器(C2)、系统驻留机制和偷窃目标已经全部成型。• 第二代(过渡臃肿版,51,985 字节): 这是一个缝合怪版本,黑客不仅保留了第一代的 RC4 加密层,还加入了一个纯文本的新版本。体积巨大,说明黑客在测试新的免杀机制。 • 第三代(终极杀戮版,25,844 字节): 这就是最终生效的恶意代码!黑客彻底重写了执行逻辑,抛弃了所有容易报警的 exec()和 RC4,改用管道通信和临时目录。干净、隐蔽、高效。🗡️
这种演进过程表明,黑客在短短的时间内(可能就是在发布更新的几十分钟内),直接在拥有 9500 万下载量级别的开源项目上进行了“在线调试”!猖狂程度令人发指。
三、核心腹地:扒光底裤的“三步走”绝杀收割 🔪
🎯 【LLM 供应链安全攻防】
恶意代码激活后,它是如何精准定位并“洗劫”你的 AWS 凭证、K8s 令牌甚至加密货币钱包的?在复杂的容器环境下,黑客又是如何实现从一个普通节点到整个集群的“核平级”横向移动?
🚀 想深度解锁黑客自动化收割机的高级手段及完整载荷分析,请立即加入 Oxo AI Security 知识星球。星球内包含此章节的完整技术拆解,助你洞察 AI 时代最危险的供应链攻击细节。
• 📚 AI 文献解读:最前沿的 LLM 安全论文深度剖析。 • 🐛 AI 漏洞情报:第一时间掌握主流大模型的 0-day 漏洞与越狱方式。 • 🛡 AI 安全体系:从红队攻击到蓝队防御的全方位知识图谱。 • 🛠 AI 攻防工具:红队专属的自动化测试与扫描工具箱。
🚀 立即加入 Oxo AI Security 知识星球,掌握AI安全攻防核心能力!


夜雨聆风