关于 access-control-testing
access-control-testing 是用于检查带身份验证、多用户或多租户应用的安全测试技能,重点验证每个对象和操作是否执行授权。它提供测试矩阵和请求修改步骤,用于发现水平及垂直越权问题。
主要功能
- 01水平与垂直越权测试
- 02未认证访问检查
- 03IDOR 与租户边界检查
- 04批量赋值及路由检查
- 05结构化记录问题详情
适用场景
- 01测试两个用户账户间的访问隔离
- 02检查低权限账户能否调用管理功能
- 03验证变更接口的授权机制
- 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 的对象? | — |
| 作为较低权限用户(垂直) | 用户访问管理员读取接口? | 用户访问管理员写入接口? | — | 用户调用管理员函数? |
| 未验证身份 | 无令牌 → 能获取数据? | 无令牌 → 能修改数据? | — | 无令牌 → 能执行管理员操作? |
如果任何单元格测试成功,即为一项发现。
方法
- 捕获合法请求,以用户 A 身份操作(记录每个 id、uuid、slug、文件名)。
- 替换对象引用为 B 的资源,保留 A 的会话 → IDOR/BOLA。
- 在特权端点上替换会话(移除令牌 / 使用低权限令牌)→ BFLA / 垂直越权。
- 使用普通账户强制浏览隐藏路由(
/admin、/api/internal)。 - 批量赋值——添加 UI 从不发送的字段(
role、isAdmin、userId、price)。 - 检查每种方法——
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