访问控制失效
访问控制失效 是什么?
访问控制失效授权规则缺失或执行不当,使用户能够执行超出其权限的操作或访问越权数据的一类漏洞。
访问控制失效跃升至 OWASP Top 10(2021)的头号风险(#1),在 OWASP 测试的应用中有 94% 存在此问题,并对应 34 个 CWE,包括 CWE-284、CWE-639 和 CWE-862(缺少授权)。它发生在应用未能一致地执行谁可以做什么时——缺少服务端校验、依赖隐藏 URL(安全靠模糊)、信任客户端的角色信息,或在不验证归属的情况下暴露直接对象引用。
失效是如何发生的
授权必须在服务端针对每个请求重新评估。常见的失效是仅在 UI 或网关处执行授权,然后信任客户端发送的标识符。攻击者只需用不同的对象 ID、角色参数或 HTTP 方法重放该请求即可。
flowchart TD
A[请求:GET /api/invoice/1043] --> B{已认证?}
B -->|否| R[401 拒绝]
B -->|是| C{归属 / 角色校验<br/>在服务端执行?}
C -->|缺失| L[返回发票 1043<br/>即便它属于其他租户]
C -->|存在| D{主体是否拥有<br/>或具有对象所需角色?}
D -->|否| F[403 禁止]
D -->|是| G[200 返回资源]
L --> X[访问控制失效:<br/>IDOR / 数据泄露]真实事件
First American Financial 数据泄露(2019)通过一个典型的 IDOR 暴露了约 8.85 亿份抵押贷款文件——连续的 URL 无需任何认证。Optus 数据泄露(2022,澳大利亚)通过一个未认证的 API 端点暴露了约 980 万条客户记录。USPS Informed Visibility(2018)允许任何已登录用户通过一个未受保护的 API 查询他人的账户数据。
防御措施
使用集中式、默认拒绝的授权中间件;对每个服务端操作执行归属校验;优先使用不透明或作用域受限的标识符;记录访问控制失败并对异常发出告警;禁用目录列表;在服务端使 JWT/会话作用域失效;并用集成测试和持续的 DAST 覆盖授权路径,而非依赖人工抽查。
● 示例
- 01
普通用户调用 /api/admin/users 而无角色校验,获得完整列表。
- 02
修改 URL 中的文档 UUID,读取其他客户的发票。
● 常见问题
访问控制失效 是什么?
授权规则缺失或执行不当,使用户能够执行超出其权限的操作或访问越权数据的一类漏洞。 它属于网络安全的 漏洞 分类。
访问控制失效 是什么意思?
授权规则缺失或执行不当,使用户能够执行超出其权限的操作或访问越权数据的一类漏洞。
如何防御 访问控制失效?
针对 访问控制失效 的防御通常结合技术控制与运营实践,详见上方完整定义。
访问控制失效 还有哪些其他名称?
常见的别称包括: BAC, 授权绕过。