LiteLLM 被曝恶意版本,涉及凭据窃取
据文章援引的分析,PyPI 上的 litellm 1.107.0 及同日部分容器镜像被植入凭据窃取和远程执行代码,随后被撤下或替换。文章称恶意代码可在 Python 进程启动时运行,已执行的环境需轮换相关凭据,不能仅卸载依赖。
原文暂未完整获取,基于公开信息的快读
据 dev.to 文章援引的 SafeDep 分析,PyPI 上的 litellm 1.107.0 被植入凭据窃取和远程执行代码,随后被撤下,同日部分容器镜像也被指受影响。目前依据是摘要和原文节选,具体影响范围仍需核验。
目前能确认什么
节选称,恶意代码会借助 .pth 文件和 sitecustomize.py 在 Python 启动时执行,不需要业务代码主动导入 LiteLLM。Python 的启动机制可以执行这些位置的代码,因此同一解释器环境中的测试、脚本和 Jupyter 内核,都可能成为触发入口。
据节选描述,窃取目标包括云凭据、SSH 密钥、AI 工具令牌,以及 LiteLLM 代理数据库中的上游模型服务密钥。后台进程还会重复收集信息,并下载执行远程代码。
攻击路径也不只是上传一个冒名包。文章称,攻击者利用开发者凭据改变发布流程,最终由项目自身的 CI 构建、签名并发布恶意产物。
签名能证明产物来自某条发布链路,不能单独证明发布内容可信。
我的判断
对运行 LLM 网关的团队,排查边界应覆盖安装环境及其后启动的 Python 进程。只搜索业务代码有没有 import litellm,会漏掉节选描述的触发方式。
若确认恶意代码已经执行,仅卸载依赖无法撤回被窃取的密钥,也无法排除远程代码留下的影响。隔离环境、从可信来源重建,并在干净环境中轮换相关凭据,应作为一组处置动作。
长期看,固定版本和哈希有助于控制依赖变更,但不能让已选中的恶意版本变安全。网关集中持有多少密钥、进程能读取哪些文件,同样决定损失范围。
目前还不能把节选列出的「干净版本」当作长期白名单。容器标签与镜像摘要如何对应、各环境是否触发过载荷、是否执行过远程代码,仍需官方通报和部署日志确认。