CVE-2026-89267
CVE-2026-89267 涉及 Python 生态中常用的 Starlette 后台管理框架扩展 starlette-admin。该框架允许开发者通过配置项 searchable_fields 声明哪些模型字段可以被前端搜索/过滤, 以此作为一道字段级访问控制白名单。问题出现在 0.16.1 至 0.17.1 这几个版本中: 当管理员把 searchable_fields 显式配置为空列表 (即意图表达“任何字段都不允许被搜索过滤”) 时, 框架没有正确执行这一白名单约束, 而是把空列表当成了“未设置”或“不过滤”处理, 从而未能对字段做任何限制。
具体而言, 该缺陷的触发路径是列表查询接口的 where 参数。starlette-admin 的列表 API 支持接收结构化的过滤查询 (structured filter query), 攻击者可以在该参数中构造针对任意字段的等值 (equality) 与比较 (comparison) 操作。由于空列表场景下白名单校验被绕过, 这些操作会被直接翻译为数据库查询条件并作用于那些本应被排除在可搜索范围之外的列。
从攻击条件看, 利用者需要是已通过身份认证的用户 (CVSS 向量中 PR:L, 权限要求为低), 且通过网络远程访问该管理后台接口 (AV:N), 不需要用户交互 (UI:N), 影响范围局限于自身组件 (S:U)。造成的后果是机密性受到有限影响 (C:L), 即攻击者可以借助逐字段、逐值的布尔型查询 (类似盲注式的推断), 从本不可搜索的列中推断出数据内容, 例如用户邮箱、内部标识、状态字段或其它敏感属性; 这不涉及完整性或可用性破坏 (I:N/A:N), 因此 NVD 给出的 CVSS 3.1 基础评分为 4.3, 属于中等风险。
修复思路是在配置为空列表时同样严格执行白名单语义, 即将“空”视为“无任何字段可被过滤”的强约束, 并在服务端对 where 参数中出现的字段名做统一的允许性校验, 拒绝任何不在白名单内的字段参与查询构造。防御方应在受影响版本区间内尽快升级到已修复版本; 若短期内无法升级, 可考虑撤销或收紧非必要账号对管理后台列表接口的访问权限、仅向可信网络段暴露后台、并审计管理接口日志中异常或高频的过滤请求。值得强调的是, 目前公开元数据中并未提供该漏洞已被在野利用的证据。
💡 影响/原因: starlette-admin 是常见的后台管理组件, 该缺陷使“空白名单”这一显式安全配置实际失效, 已认证的低权限用户可借过滤接口对未授权字段做等值与比较查询, 逐步推断敏感数据。CVSS 4.3 属中危, 不涉及完整性与可用性, 但暴露了后台字段级访问控制的设计缺陷, 需尽快升级或收紧后台暴露面。
排序因子: 有可用补丁/修复方案 (+3) | Primary 数据源 (+3) | LLM 评分加成 (+0.4)