SuperAPI AI 工具集

testing-api-for-broken-object-level-authorization

安全与审计

查看项目

更新于 10-15 12:32

技能介绍

用途

本技能用于测试 REST 与 GraphQL API 是否存在对象级授权缺失(Broken Object Level Authorization,BOLA,也称 IDOR,对应 OWASP API1:2023)。适用于在 URL 路径、查询参数或请求体中使用对象标识符的 API,多租户 SaaS 应用的跨租户数据隔离验证,以及新增端点后确认授权中间件是否一致生效。

使用时必须具备 API 所有者的书面授权。BOLA 测试涉及访问或尝试访问他人数据,缺少明确许可不得执行。

前提条件

  • 书面授权,明确目标 API 端点与测试范围
  • 至少两个权限级别不同、数据集不同的测试账号
  • 配置为拦截代理的 Burp Suite Professional 或 OWASP ZAP
  • 每个测试账号的认证令牌(JWT、会话 Cookie、API Key)
  • API 文档(OpenAPI/Swagger 规范)或可用于枚举端点的访问方式
  • Python 3.10+ 与 requests 库,用于脚本化测试
  • 已安装 Autorize Burp 扩展以实现自动化 BOLA 检测

主要能力

技能围绕一个六步工作流展开:

  1. 端点发现与对象 ID 映射:从 OpenAPI/Swagger 规范或 Burp 流量中枚举端点,提取路径与查询参数,识别形如 /api/v1/users/{id}、/api/v1/orders/{order_id} 的对象引用,并对 ID 类型分类(顺序整数、UUID v4、编码/哈希值、复合 ID、slug)及对应的可预测性与 BOLA 风险。
  2. 基线请求捕获:分别以用户 A 与用户 B 的令牌获取各自的资料与对象 ID 列表,作为后续交叉测试的基准。
  3. 水平越权测试:用用户 A 的令牌访问、修改、删除用户 B 的对象,根据响应状态码判定是否可越权(如 200、204 视为存在漏洞)。
  4. 进阶 BOLA 技巧:参数污染、JSON 请求体中的对象 ID 覆盖、批量请求中混入他人 ID、顺序 ID 的数值枚举、嵌套资源路径中的 ID 替换、以及对 GET 之外的方法(PUT/PATCH/DELETE/HEAD/OPTIONS)逐一切换测试。
  5. Autorize 自动化检测:在 Burp Suite 中配置用户 B 的凭据与拦截过滤规则(包含 .*\/api\/.*,排除静态资源),以用户 A 浏览应用时自动重放请求,并根据响应差异标记授权是否被绕过。
  6. GraphQL BOLA 测试:针对 node/ID relay 模式与嵌套关系查询,测试跨用户对象访问。

使用方式

技能提供直接可用的代码片段:从 Swagger 规范提取带参数端点的 curl + Python 命令、使用 requests 库获取账号对象的脚本、越权访问/修改/删除的测试脚本、参数污染与批量 ID 注入示例、方法切换测试循环,以及 GraphQL 查询示例。所有测试结果可按统一格式输出报告,包含发现 ID、严重级别、受影响端点、描述、PoC 步骤、影响与修复建议。

适用场景

文档给出一个电商 API 评估的完整示例:通过 Swagger 规范定位 47 个端点(其中 23 个带对象 ID),系统性地将用户 A 的对象 ID 替换为用户 B 的 ID,最终在订单读取、地址修改、支付方式查看、批量导出等端点发现 BOLA,而订单删除端点正确返回 403。

限制与常见误区

  • 仅测试 GET 请求,遗漏 PUT/PATCH/DELETE 中可修改或破坏数据的 BOLA
  • 误以为 UUID 可防止 BOLA——UUID 可预测性低,但可能通过 API 响应、日志或 URL 参数泄露
  • 未测试嵌套资源路径中授权仅检查父资源而遗漏子资源的情况
  • 遗漏接受对象 ID 数组的批量端点
  • 未考虑不同 API 版本(v1 与 v2)可能具有不同的授权实现

修复建议包括:实现对象级授权中间件,在数据访问层加入 WHERE order.user_id = authenticated_user.id 一类校验,用 UUID 替代顺序整数 ID(纵深防御,单独使用并非修复),在 CI/CD 中为每个带对象 ID 的端点加入授权测试,并按用户实施限流以减缓枚举。