SuperAPI AI 工具集

broken-access-control

安全与审计

查看项目

更新于 10-16 02:07

技能介绍

用途

该技能用于审计和测试 Web 应用中的「失效的访问控制」(Broken Access Control,OWASP A01:2025)。资料称这是连续两个周期排名第一的 OWASP 风险,出现在 3.74% 的应用中,超过 180 万次发生,涉及 32,654 个 CVE。访问控制的作用是确保用户不能超出其被授予的权限行事;一旦失效,会导致未授权的数据泄露、修改或破坏。

覆盖的子类别

技能按子类别组织,并列出对应的关键 CWE:

  • 缺失授权(Missing Authorization):路由/端点没有认证守卫,对应 CWE-862、CWE-284。
  • IDOR:未验证资源所有权,对应 CWE-639、CWE-285。
  • CORS 配置错误:通配符或过于宽松的来源,对应 CWE-284。
  • SSRF:向内部/私有 IP 发起出站请求,对应 CWE-918。
  • CSRF:改变状态的表单缺少令牌校验,对应 CWE-352。
  • 权限提升:用户访问更高权限角色,对应 CWE-269。
  • JWT/会话操纵:元数据篡改、会话固定,对应 CWE-287。

使用方式:审计 FastAPI 或 Flask 应用

技能给出分步工作流:

  1. 识别所有路由。FastAPI 可遍历 app.routes 打印路径、方法与依赖;Flask 可遍历 app.url_map.iter_rules() 打印端点、方法与规则。需标记:处理 POST、PUT、PATCH、DELETE 却无认证依赖的路由;返回用户特定数据(资料、订单、文件)却无所有权检查的路由;敏感操作无速率限制的路由。
  2. 检查授权守卫。FastAPI 查找缺失的 Depends(),Flask 查找缺失的 @login_required。资料给出易受攻击与安全写法的对照示例。
  3. IDOR 检查(资源所有权)。每个获取用户所属资源的查询都必须比较 resource.owner_id 与 current_user.id。资料给出易受攻击与安全写法,并建议返回 404 而非 403 以避免枚举。测试向量:以用户 A 认证并记录资源 ID,再以用户 B 认证请求同一 ID,若拿到数据即为 IDOR。
  4. CORS 配置错误。FastAPI 与 Flask 均给出易受攻击(通配符来源)与安全(显式白名单)写法。资料提示 allow_origins=["*"] 与 allow_credentials=True 同时使用双重危险。
  5. SSRF(现已纳入 A01:2025)。检查任何使用用户可控 URL 发起出站 HTTP 请求的代码,资料给出 is_safe_url 校验私有网段的示例,并列出测试向量:http://169.254.169.254/latest/meta-data/(AWS 元数据)、http://localhost:6379(Redis)、http://10.0.0.1/admin。
  6. CSRF(Flask 特有风险)。使用 JWT/Bearer 令牌的 FastAPI API 通常对 CSRF 安全;使用会话 Cookie 的 Flask 应用需要显式防护,资料给出 Flask-WTF 的 CSRFProtect 用法,并提醒所有改变状态的表单需包含 {{ form.hidden_tag() }} 或 {{ csrf_token() }},并确认 WTF_CSRF_ENABLED = True。
  7. JWT 与会话安全。验证 JWT 设置了较短的过期时间(15 分钟至 1 小时);Flask 会话需设置 SESSION_COOKIE_SECURE、SESSION_COOKIE_HTTPONLY、SESSION_COOKIE_SAMESITE 与 PERMANENT_SESSION_LIFETIME。

快速审计清单

资料提供一份适用于任何 Python Web 应用的清单:每个非公开路由都有认证依赖/装饰器;所有用户所属资源查询都验证 resource.owner_id == current_user.id;CORS 来源为显式白名单而非 *;出站 HTTP 调用校验 URL 不在私有 IP 段;Flask 应用对所有改变状态的表单启用 Flask-WTF CSRF 防护;JWT 有较短的 exp 声明,会话有 SECURE、HTTPONLY、SAMESITE 标志;登出时使会话 ID 失效;访问控制失败被记录并告警。

自动化扫描

资料列出工具与用途:Bandit 捕获 SSRF 模式、硬编码密钥、危险函数,命令为 bandit -r . -t B105,B106,B107,B501,B601;OWASP ZAP 捕获运行时 IDOR、缺失认证、CORS,命令为 zap-baseline.py -t http://localhost:8000;truffleHog 捕获 git 历史中泄露的令牌/密钥,命令为 trufflehog git file://. --only-verified。

关键 CWE 参考

资料列出:CWE-284 访问控制不当(路由无任何认证即可访问);CWE-285 授权不当(有认证但未检查角色/所有权);CWE-352 CSRF(改变状态的端点接受 Cookie 认证且无 CSRF 令牌);CWE-639 通过用户可控键绕过授权(IDOR,如 GET /orders/{id} 无所有权检查);CWE-862 缺失授权(无 @login_required 或 Depends(get_current_user));CWE-918 SSRF(requests.get(user_input_url) 无校验);CWE-200 敏感信息暴露(未授权用户收到他人 PII/数据)。

适用场景与限制

该技能适用于对 Python Web 应用(尤其是 FastAPI 与 Flask)进行访问控制安全审计与测试。资料还提到可参考 references/bac-detail.md 获取扩展的 CWE 描述、更多攻击示例与合规映射,以及 OWASP A01:2025 官方页面。关于该技能的安装方式、收费、价格、平台支持与具体效果,资料暂未提供。