打开网易新闻 查看精彩图片

每天300万次下载量的AI中间件,在PyPI上被人塞进了窃密后门。攻击者没碰官方仓库,而是劫持了版本发布流程——这种"借道发货"的手法,让4万多名开发者在毫不知情中,把恶意代码装进了生产环境。

发现过程:一台48GB内存的Mac突然卡死

发现过程:一台48GB内存的Mac突然卡死

FutureSearch安全研究员Callum McMahon的电脑开始"抽风"时,他第一反应是硬件故障。htop加载要十几秒,CPU直接顶到100%,"这配置不该出现这种事"。强制重启前他拍了最后一张照片留证,没想到这成了追踪供应链攻击的起点。

排查后McMahon锁定问题:litellm 1.82.8版本被植入恶意负载。这个专门帮开发者统一调用OpenAI、Anthropic、Azure等百余种大模型API的工具包,此刻正在后台疯狂扫描——SSL证书、SSH密钥、云厂商凭证、Kubernetes配置、Git凭据、API密钥、Shell历史记录、加密钱包,全部在收集清单上。

Andrej Karpathy在X上转发了攻击细节时,评论区一片冷汗。很多开发者这才意识到:自己pip install时顺手装上的"便利工具",可能已经把公司云账号的访问密钥发到了攻击者服务器。

攻击路径:PyPI的发布权限成了突破口

攻击路径:PyPI的发布权限成了突破口

打开网易新闻 查看精彩图片

McMahon的后续分析还原了入侵链条。攻击者没有直接攻破LiteLLM的GitHub仓库,而是瞄准了PyPI的包发布机制——这个Python生态的核心枢纽,允许项目维护者通过API密钥或可信发布者(Trusted Publisher)配置自动上传新版本。

具体哪个环节被突破,目前公开信息有限。但PyPI的攻击面近年持续暴露:2023年有研究团队发现,仅通过拼写相似度(typosquatting)和依赖混淆(dependency confusion)就能大规模投毒;2024年PyPI强制开启双因素认证后,攻击者转向窃取CI/CD管道中的发布令牌。

LiteLLM的维护团队反应算快。McMahon报告后,恶意版本被迅速下架,PyPI官方也介入调查。但4万多次下载已经发生——按Python包的安装习惯,这些代码很可能残留在 countless 个虚拟环境和Docker镜像里,等待被激活。

为什么AI工具链成了靶子

为什么AI工具链成了靶子

LiteLLM的定位很微妙。它不做模型,只做"翻译层":开发者写一套代码,就能切换OpenAI、Claude、Gemini、甚至自托管的Llama。这种"中间件"特性让它成了AI应用的标配依赖,也意味着一旦沦陷,攻击面覆盖整个AI基础设施。

更麻烦的是密钥管理现状。很多团队为了方便,把OpenAI API key直接写进环境变量或配置文件。LiteLLM本身需要这些凭证来路由请求,恶意代码正好利用这个合法需求,把"读取配置"变成"批量外泄"。McMahon发现的payload甚至专门扫描了~/.aws/credentials和~/.kube/config——云原生开发者的标准配置路径。

打开网易新闻 查看精彩图片

供应链攻击的隐蔽性在于信任链的传递。你以为自己在装一个经过社区检验的开源工具,实际上拿到的是攻击者调包的版本。而且PyPI的包版本号看起来完全正常:1.82.8,不是1.8.2.8这种明显的拼写陷阱,就是官方序列中的真实版本号。

防御的困境:便利与安全的永恒张力

防御的困境:便利与安全的永恒张力

事件曝光后,社区讨论集中在几个无解的悖论上。

锁定依赖版本能防住这次攻击,但会错过安全补丁;自动更新能拿到修复,但也可能引入新问题。Poetry、Pipenv等工具支持哈希校验,但PyPI本身不提供官方签名,第三方镜像的可靠性又存疑。有人提议用Sigstore做软件制品签名,但 adoption 进度缓慢。

更深层的问题是权限设计。LiteLLM作为API网关,天然需要高敏感度凭证的访问权。攻击者不需要提权漏洞,只需要让恶意代码和合法代码混在一起执行。这种"寄生"模式比传统漏洞更难检测——行为看起来都是正常的。

McMahon在分析报告中提到一个细节:恶意代码会检查运行环境,只在非沙箱、非调试模式下激活。这意味着本地测试可能完全无感,一到生产环境就开始窃密。这种"环境感知"的对抗策略,让自动化检测更加困难。

PyPI官方尚未公布此次攻击的完整技术报告。LiteLLM团队建议所有1.82.8版本用户立即轮换密钥,并检查审计日志中是否有异常API调用。但密钥轮换的成本很高——尤其是当那些密钥关联着正在运行的生产服务时。