post cover

技术热点落地:LiteLLM v1.83.0 安全漏洞修复与生产环境加固(2026-04-11)


适用场景与目标

适用场景:

  • 团队使用 LiteLLM 作为 AI 网关/代理层,统一管理多个 LLM 提供商(OpenAI、Anthropic、Azure、Bedrock 等)
  • 通过 LiteLLM 做了模型路由、负载均衡、成本监控
  • 已在生产环境暴露 LiteLLM Proxy 端口(尤其是启用了 JWT 认证的部署)

本文目标:

  1. 理解 3 月供应链事件的根因(LiteLLM 官方已公开)
  2. 掌握 CVE-2026-35030/35029 的危害与利用条件
  3. 最小化安全升级到 v1.83.0 的步骤
  4. 生产环境后续加固最佳实践

最小可行方案(MVP)步骤

第一步:确认当前版本

# 查看当前 LiteLLM 版本
litellm --version
# 或通过 Docker
docker images | grep litellm

如果在 v1.83.0 以下,且启用了 JWT 认证,立刻进入紧急修复流程

第二步:升级到安全版本 v1.83.0

# Python 包方式
pip install litellm==1.83.0 --force-reinstall

# Docker 方式(推荐,隔离环境)
# 1. 更新 docker-compose.yml 中的镜像版本
# image: ghcr.io/berriai/litellm:main-v1.83.0
docker-compose pull ghcr.io/berriai/litellm:main-v1.83.0
docker-compose up -d

# 确认版本
curl http://localhost:4000/health

第三步:验证 JWT 认证是否正常

升级后一定要测试认证流程:

# 测试带 JWT Token 的请求
curl -X POST http://localhost:4000/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $YOUR_JWT_TOKEN" \
  -d '{"model": "gpt-4o-mini", "messages": [{"role": "user", "content": "hi"}]}'

关键实现细节

CVE-2026-35030:OIDC 缓存碰撞导致认证绕过(Critical)

根因: LiteLLM 在缓存 OIDC 公钥时使用了未做盐值隔离的缓存 Key,攻击者可以通过构造特定 JWT,利用缓存碰撞使 LiteLLM 使用错误的公钥验证,从而绕过认证。

影响范围: 启用了 LITELLM_JWT_AUTH=True 且使用 OIDC 提供商(如 Okta、Google Workspace)做 JWT 验证的部署。

修复: v1.83.0 引入缓存 Key 盐值隔离,确保不同 OIDC Tenant 的缓存完全隔离。

判断你是否受影响:

# 检查你的 config.yaml 中是否有这些配置
grep -E "JWT|jwt|OIDC|oidc" /path/to/your/litellm/config.yaml

如果返回空,说明你未启用 JWT 认证,此 CVE 不影响你

CVE-2026-35029:特权升级通过 /config/update(High)

根因: /config/update 接口在某些路由条件下缺少权限校验,低权限用户可以调用此接口修改全局配置(如注入恶意模型路由、修改认证策略)。

修复: v1.83.0 中该接口默认需要 admin 角色,并增加了审计日志。

立刻做临时止血(若无法立刻升级):

# 在 config.yaml 中临时禁用 config/update 路由
# 注意:这会同时禁用正常的配置热更新,需评估业务影响
extra_route_constraints:
  disabled_routes:
    - "/config/update"

供应链事件根因(值得警醒)

3 月事件中,LiteLLM 的 CI/CD 环境存在三个问题叠加:

  1. 共享 CI/CD 环境:所有发布步骤共用同一 CircleCI 环境,一个步骤被控, blast radius 覆盖了 PyPI/GHCR/Docker 发布凭证。
  2. 静态凭证:发布凭证是长生命周期静态环境变量,被控后直接泄露。
  3. 未固定 Trivy 版本:依赖了可变版本 Trivy(漏洞扫描工具),攻击者通过依赖劫持注入恶意代码。

常见坑与规避清单

说明规避方法
升级后 JWT 全部失效v1.83.0 修改了 OIDC 缓存逻辑,可能导致旧 Token 被错误解析升级后立刻用测试 Token 验证认证流程,不要等到发现线上故障
Docker 镜像未同步更新Docker Hub 和 GHCR 镜像版本可能存在数小时延迟使用 GHCR(GitHub Container Registry)而不要依赖 Docker Hub
/config/update 误关禁用该路由后,配置热更新功能丢失,config map 变更不会生效若需要热更新,改用数据库-backed 配置并通过 API 有权限更新
未重启 Proxy 就升级Python 包升级后进程未重启,仍运行旧版本代码升级后必须重启服务:supervisorctl restart litellmdocker-compose restart
升级前未做配置备份回滚时配置格式可能不兼容cp config.yaml config.yaml.backup.$(date +%Y%m%d)
忽略健康检查升级后直接上流量,未验证通过 /health 端点确认版本号后再切流量

成本/性能/维护权衡

升级成本

  • 时间成本:30 分钟内可完成升级(不含后续加固)
  • 风险成本:若跳过测试直接上生产,认证故障会导致全量 API 请求失败
  • 人力成本:建议至少两人操作,一人升级一人盯监控

不升级的风险

  • CVE-2026-35030 可被远程利用(若暴露公网),认证绕过 = 攻击者免费调用你的所有模型
  • 每次 API 调用成本 $2-$60/百万token,被刷量后果严重

性能影响

v1.83.0 的 OIDC 缓存逻辑变更引入了额外的缓存 Key 校验,预计延迟增加 <5ms,对整体吞吐量无显著影响。

维护建议

  • 建立版本警报:Litellm 每次发布安全修复,Slack/邮件通知到负责工程师
  • 锁定镜像版本:不要用 latest tag,用固定版本如 v1.83.0
  • 监控 /config/update 调用:生产环境应审计所有配置变更

一周内可执行行动清单

Day 1(今天)

  • 确认当前 LiteLLM 版本:litellm --version
  • 检查是否启用 JWT/OIDC 认证(grep -E "JWT|jwt|OIDC" config.yaml
  • 若版本 < v1.83.0,立即安排变更窗口(建议非高峰期)

Day 2

  • 执行升级到 v1.83.0(Docker 或 pip)
  • 重启服务并验证 /health 返回正确版本号
  • 用测试 Token 验证 JWT 认证流程正常

Day 3-4

  • 审计 /config/update 调用日志,确认无异常调用
  • 若有自托管 OIDC,验证多租户 Token 不再互相串台
  • 备份当前配置文件

Day 5-7

  • 实施镜像版本锁定(不再用 latest
  • 配置 Litellm 版本监控告警(GitHub Releases RSS 或第三方监控)
  • 若未迁移到 v1.83.0,评估是否有必要关停公网入口作为临时缓解

参考资料: