漏洞概述 标题: JWT Migration Regression — /login Still Generates Permanent DB Keys Leaked Inside Stateless JWT Tokens 描述: 在Admin UI的JWT迁移过程中, 调用未被从登录流程中移除。每次 和 请求都会创建一个新的 数据库API密钥,并将其嵌入到JWT cookie中(无需密钥字段),且不会使之前的密钥失效。攻击者可以拦截任何登录cookie,解码JWT(无需密钥),提取 密钥,并将其作为独立的管理员bearer token使用,该token在JWT会话生命周期结束后仍然有效。 影响范围 受影响产品: - 生态系统: PyPI - 包名: litellm - 受影响版本: <= 1.82.2(发现时的最新版本) - 已修复版本: 无 严重性: 高 向量字符串: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H 弱点: - CWE-613: 不充分的会话过期 - CWE-200: 向未经授权的行为者暴露敏感信息 修复方案 修复状态: 未提及具体修复方案,但指出之前的修复函数 在JWT迁移期间被完全移除,导致问题回归。 POC代码 1. 登录并捕获JWT cookie 2. 解码JWT并提取嵌入的DB密钥(无需密钥) 3. 使用提取的密钥作为独立的管理员API密钥 返回HTTP 200 — 完全管理员访问权限。 4. 重复登录以证明密钥累积(密钥永不过期) 证据日志 发生情况 永久链接: - Admin login path - User login path - Key embedded in JWT - /onboarding/get_token endpoint 描述: - Admin login path: 创建永久DB密钥,尽管JWT迁移旨在消除DB密钥。 - User login path: 相同的 调用为普通用户创建额外的累积DB密钥。 - Key embedded in JWT: 将物理DB密钥嵌入JWT有效负载,通过 泄露,无需解码JWT(base64,无需密钥)。 - /onboarding/get_token endpoint: 相同的 调用创建累积DB密钥并嵌入JWT。