mcpField
A
access-control-testing

access-control-testing

github.com/mn-youssef安全49120 次安装20 周前更新
代码仓库

关于 access-control-testing

access-control-testing 是用于检查带身份验证、多用户或多租户应用的安全测试技能,重点验证每个对象和操作是否执行授权。它提供测试矩阵和请求修改步骤,用于发现水平及垂直越权问题。

主要功能

  1. 01水平与垂直越权测试
  2. 02未认证访问检查
  3. 03IDOR 与租户边界检查
  4. 04批量赋值及路由检查
  5. 05结构化记录问题详情

适用场景

  1. 01测试两个用户账户间的访问隔离
  2. 02检查低权限账户能否调用管理功能
  3. 03验证变更接口的授权机制
  4. 04记录已确认的访问控制问题

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mn-youssef/security-skills --skill access-control-testing

安装后在 Claude Code 中输入/access-control-testing确认已加载。

附带文件references/access-control-tests.md

详细介绍

访问控制测试(FIND/EXPLOIT — OWASP A01)

概述

验证每个对象和每项操作是否都在服务端检查“这个调用者是否有权限?”。 失效的访问控制是现实世界中最常见、影响最大的漏洞,也是最容易 被忽略的漏洞,因为正常流程完全没有问题。

**核心原则:**身份验证证明“你是谁”;授权证明“你可以做什么”。 对每个对象和每项操作都测试授权——而不只是 UI 中可见的操作。

适用情况 / 跳过情况

  • **适用情况:**应用有身份验证、多个用户、角色或多租户数据—— 即任何应受限制的资源或操作。(几乎所有非简单应用都适用。)
  • **跳过情况:**应用完全公开/匿名,没有任何按用户区分或特权数据 → 不适用。
  • **如果不适用:**报告“access-control-testing: N/A — no auth/multi-user surface”并停止。不要 臆造不存在的访问边界。

⚠️ 授权

使用你为自己拥有或获准测试的应用创建的测试账户。最简单的设置是两个账户(A 和 B) 加一个管理员账户和一个低权限账户。

测试矩阵(运行每个单元格)

读取写入/更新删除管理员操作
作为另一位用户(水平)A 读取 B 的对象?A 编辑 B 的对象?A 删除 B 的对象?—
作为较低权限用户(垂直)用户访问管理员读取接口?用户访问管理员写入接口?—用户调用管理员函数?
未验证身份无令牌 → 能获取数据?无令牌 → 能修改数据?—无令牌 → 能执行管理员操作?

如果任何单元格测试成功,即为一项发现。

方法

  1. 捕获合法请求,以用户 A 身份操作(记录每个 id、uuid、slug、文件名)。
  2. 替换对象引用为 B 的资源,保留 A 的会话 → IDOR/BOLA。
  3. 在特权端点上替换会话(移除令牌 / 使用低权限令牌)→ BFLA / 垂直越权。
  4. 使用普通账户强制浏览隐藏路由(/admin、/api/internal)。
  5. 批量赋值——添加 UI 从不发送的字段(role、isAdmin、userId、price)。
  6. 检查每种方法——GET 可能有访问控制,但可能遗漏了 PUT/DELETE/PATCH。

具体请求示例和边缘情况请参阅 references/access-control-tests.md。

快速参考 — 漏洞类别

类别测试
IDOR / BOLA将 id/uuid/文件名改为另一位用户的值;能否获取对方的数据?
水平越权对另一位同级用户的资源执行操作。
垂直越权低权限账户访问管理员功能/数据。
BFLA管理员端点在 UI 中受保护,但任何人都能直接调用。
多租户隔离失效租户 A 读取租户 B 的数据(替换 org_id/tenant_id)。
批量赋值在请求正文中注入特权字段。
强制浏览猜测/枚举未链接的特权路由。

输出

在发现记录中注明:哪个账户访问了哪个端点/对象、确切的替换请求、 暴露了什么,以及属于水平越权还是垂直越权。严重性几乎总是高及以上。

后续处理

在运行中的应用上确认 → 通过 active-pentest 复现;与 vulnerability-chaining 中的其他漏洞串联;通过 security-hardening 修复(默认拒绝、服务端检查)。

常见错误

  • 只用管理员账户测试——永远发现不了漏洞。务必使用较低权限账户测试。
  • 认为隐藏/未链接的端点就是安全的——应枚举并直接调用。
  • 只检查 GET——造成破坏的往往是修改操作。
  • 认为 UUID 安全——UUID 也会泄露(出现在响应、日志、引荐来源中),仍可能遭受 IDOR 攻击。
  • 忽略可预测的模式:连续 id、Base64 编码的 id、容易猜到的文件名。

评论

支持 Markdown