[Bug]: v1.86.0 regression — UI/SSO/CLI session token’s $0.25 max_ui_session_budget incorrectly used as ceiling for /key/generate, blocking n

用户使用 LiteLLM Proxy v1.86.0+,以非 admin 角色(如 team admin)通过 UI、实验性 UI JWT、CLI JWT 或 SSO/`/login` 流程登录后,尝试通过 Dashboard 的"Create Key"界面或直接调用 `POST /key/gene

[Bug]: v1.86.0 regression — UI/SSO/CLI session token's $0.25 max_ui_session_budget incorrectly used as ceiling for /key/generate, blocking n

[Bug]: v1.86.0 regression — UI/SSO/CLI session token’s $0.25 max_ui_session_budget incorrectly used as ceiling for /key/generate, blocking n

快速结论:该报错出现在 LiteLLM v1.86.0 及以上版本中,非管理员用户(包括团队管理员)通过 UI、CLI JWT 或 SSO 登录后,在 Dashboard 或 API 创建 key 时,若 `max_budget` 大于 0.25 美元会报错。优先检查是否为 UI/SSO/CLI 会话令牌误用了 `max_ui_session_budget` 常量。

问题场景

用户使用 LiteLLM Proxy v1.86.0+,以非 admin 角色(如 team admin)通过 UI、实验性 UI JWT、CLI JWT 或 SSO/`/login` 流程登录后,尝试通过 Dashboard 的”Create Key”界面或直接调用 `POST /key/generate` API 创建 key,并设置 `max_budget` 大于 0.25 美元时触发。该限制也适用于为团队创建 key 的场景。

报错原文

{
  "error": {
    "message": "max_budget (100.0) cannot exceed the caller's own max_budget (0.25).",
    "type": "internal_server_error",
    "param": "None",
    "code": "400"
  }
}

原因分析

LiteLLM 在 v1.86.0 版本中引入了委托权限预算上限检查(commit 410ce761dc,对应 GHSA-q775-qw9r-2r4g),该逻辑在 `litellm/proxy/management_endpoints/key_management_endpoints.py:742-756` 中实现。问题在于,当用户通过 UI、CLI JWT 或 SSO 登录时,系统会生成一个合成的 `UserAPIKeyAuth` 令牌,该令牌的 `max_budget` 被硬编码为 `litellm.max_ui_session_budget` 常量(值 0.25 美元),定义在 `litellm/__init__.py:407`。这个常量的本意是限制 Dashboard 中”Test Key”面板的交互聊天成本,而非表达用户对团队预算的管理权限。

新引入的上限检查未区分真实 API 密钥与合成会话令牌,导致该 0.25 美元限额被错误地应用于非管理员用户的 key 创建请求。即使该用户是团队管理员并拥有更高的团队预算权限,也无法创建超过 0.25 美元的 key。

环境排查

  • LiteLLM Proxy 版本:v1.86.0 及更新版本
  • 用户角色:非 PROXY_ADMIN(如 team admin、internal user)
  • 认证方式:UI 会话、实验性 UI JWT、CLI JWT 或 SSO/`/login` 流程
  • 请求路径:`POST /key/generate` 或 Dashboard 的”Create Key”界面

解决步骤

  1. 确认问题一致性(可选):检查 `/key/update` 端点是否存在同样问题。Issue 指出 `/key/update` 缺少相同的预算上限检查,因此可以通过先创建 `max_budget=0` 的 key,再调用 `/key/update` 将 `max_budget` 提高到 100 来绕过限制。这意味着当前行为存在不一致性。
  2. 临时绕过方案:
    • 步骤 A:使用 `POST /key/generate` 创建 key,设置 `{“team_id”: “”, “max_budget”: 0}`(该请求会成功)。
    • 步骤 B:使用 `POST /key/update` 更新刚创建的 key,设置 `{“key”: “”, “max_budget”: 100}`(该请求不会触发预算上限检查)。
  3. 可优先尝试:降级 LiteLLM 至 v1.85.x 版本以恢复预期行为。注意:这将同时移除 GHSA-q775 的安全修复。
  4. 等待上游修复:Issue 已建议修改委托权限检查逻辑,使其在会话令牌场景下忽略 `user_api_key_dict.max_budget`,或改为查询团队的 `max_budget`。可关注 BerriAI/litellm #29073 的后续修复提交。

验证方法

使用非 admin 用户的 UI 会话令牌或 CLI JWT,尝试创建 `max_budget` 大于 0.25 美元的 key。如果成功返回 key 信息(无 400 错误),或者通过上述临时绕过方案成功创建并更新 key 的预算,则说明问题已规避或修复。

参考来源

BerriAI/litellm #29073

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 13307

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注