用途
该技能用于分析源代码中的失效访问控制(Broken Access Control,OWASP A01:2021)漏洞,包括缺失授权检查、不安全直接对象引用(IDOR)、CORS 配置错误、JWT 篡改、目录遍历和权限提升。
覆盖范围
涉及的 CWE 包括:
- CWE-200:敏感信息暴露
- CWE-284:访问控制不当
- CWE-285:授权不当
- CWE-352:跨站请求伪造
- CWE-639:通过用户可控键实现的授权绕过(IDOR)
- CWE-862:缺失授权
- CWE-863:授权不正确
支持的标志
技能支持通用的横切标志,其中关键标志如下:
--scope:决定分析哪些文件(默认:changed)--depth:standard 读取代码并检查中间件链;deep 在调用图和中间件栈中追踪授权逻辑--severity:过滤输出(访问控制问题通常为 high 或 critical)
工作流程
- 确定范围:解析标志并按规范解析文件列表,过滤出可能包含访问控制逻辑的文件,包括路由/控制器定义(
**/routes/**、**/controllers/**、**/handlers/**)、中间件文件(**/middleware/**、**/middlewares/**)、授权模块(**/auth/**、**/authz/**、**/policies/**、**/guards/**)、API 端点定义(**/api/**、**/endpoints/**),以及 CORS、JWT 和会话管理配置文件。 - 检查可用扫描器:检测 semgrep(访问控制模式的主要扫描器)、bandit(Python 授权问题)、brakeman(Rails 批量赋值和授权绕过),记录哪些可用、哪些缺失。
- 运行扫描器(如可用):如 semgrep 可用,运行
semgrep scan --config auto --json --quiet <target>,将结果过滤到访问控制、授权、CORS、JWT 和 IDOR 相关规则,并归一化到 findings schema。 - 人工代码分析(无论扫描器是否可用都要进行):清点路由并检查每个是否有授权中间件;查找使用用户提供 ID 的数据库查询并验证所有权检查;定位 CORS 配置并检查通配符或过于宽松的来源;查找 JWT 验证代码并检查声明是否被验证;查找使用用户输入的文件路径操作并检查遍历防护;识别基于角色的决策并验证其是否同时覆盖横向和纵向访问。当
--depth deep时,额外追踪从路由到处理程序的完整中间件链、授权装饰器/注解继承以及跨服务授权委托。 - 报告发现:按 findings schema 输出,使用 AC 前缀(如 AC-001、AC-002)。每条发现包含:严重程度和置信度、带代码片段的确切文件位置、针对该访问控制失败的影响描述、尽可能提供带 diff 的具体修复、CWE 和 OWASP 参考。
重点检查模式
- 无授权中间件的路由:处理敏感数据或变更操作但链中没有 auth 中间件的端点。
- 无所有权校验的直接对象引用:使用
req.params.id或类似输入进行数据库查询但未按已认证用户过滤。 - CORS 通配符或反射:
Access-Control-Allow-Origin: *或未经验证地反射 Origin 头,尤其是在带凭据时。 - 未验证即使用 JWT 声明:未验证签名就读取 JWT 载荷,或信任客户端提供的角色/权限声明。
- 通过用户输入进行路径遍历:使用用户提供路径进行文件操作而未做规范化或白名单验证。
- 缺失函数级访问控制:普通用户可访问管理员端点,或 API 操作没有角色验证。
- 强制浏览可预测 URL:顺序 ID 或可预测资源路径没有授权检查。
- 横向权限提升:用户通过更改标识符访问其他用户数据,服务器端无所有权验证。
扫描器集成
- semgrep:覆盖 IDOR、缺失 auth 中间件、CORS、JWT 问题,命令
semgrep scan --config auto --json --quiet <target> - bandit:Python 授权模式,命令
bandit -r <target> -f json -q - brakeman:Rails 批量赋值、授权,命令
brakeman -q -f json -o /dev/stdout
回退方案(无扫描器):使用 Grep 配合检测模式参考中的模式,查找路由定义、使用用户可控 ID 的数据库查询、CORS 头和 JWT 解码调用,发现以 confidence: medium 报告。
相关 semgrep 规则类别包括:
python.django.security.audit.unvalidated-*javascript.express.security.audit.missing-auth-*java.spring.security.audit.missing-authorizationgeneric.cors.security.wildcard-origin
输出格式
使用统一的 findings schema。ID 前缀:AC(如 AC-001);metadata.tool: access-control;metadata.framework: owasp;metadata.category: A01;references.owasp: A01:2021;references.stride: E(权限提升)或 I(信息泄露)。
本类别的严重程度指引:
- critical:未认证即可访问管理功能,大规模 IDOR 暴露所有用户数据
- high:已认证 IDOR,变更端点缺失授权,带凭据的 CORS 通配符
- medium:不带凭据的 CORS 配置错误,认证端点缺失速率限制
- low:泄露授权逻辑的冗长错误信息,轻微的强制浏览风险