用途
sast-missingauth 是一个面向代码库的安全评估技能,用于发现两类漏洞:缺失身份认证(Missing Authentication)和功能级授权失效(Broken Function-Level Authorization)。它通过子代理执行三阶段流程:侦察(recon)、分批验证(batched verify)和合并(merge)。
主要能力
该技能覆盖三类漏洞:
- 类 1:未认证的敏感端点。端点执行修改数据、返回私有信息或管理操作,但完全不需要登录,任何匿名 HTTP 请求均可触发。
- 类 2:已认证但缺少角色检查。端点要求有效会话或令牌,但不校验调用者是否具备所需角色或权限,任意已认证用户均可调用管理员或特权功能。
- 类 3:授权不完整或可绕过。授权逻辑存在但可被绕过,例如 GET 处理器有角色检查而对应的 DELETE/POST 没有;角色检查依赖攻击者可控的请求头或参数;中间件已注册但路由挂载在中间件生效之前。
该技能明确不覆盖:IDOR/水平越权(已认证用户 A 通过修改 ID 访问用户 B 的资源)、JWT 签名/验证缺陷(由 sast-jwt 覆盖)、业务逻辑漏洞(价格操纵、流程绕过等)。
使用方式
前置条件:必须存在 sast/architecture.md。若不存在,应先运行分析技能。
执行分为三个阶段:
-
侦察阶段:启动子代理,构建所有应用端点/路由及其当前认证/授权状态的完整映射,并识别角色/权限系统,结果写入 sast/missingauth-recon.md。侦察需收集各框架的路由定义(如 Express 的 router.get/post、Django 的 urlpatterns、Flask 的 @app.route、Rails 的 routes.rb、Spring 的 @GetMapping 等)、已应用的认证中间件与装饰器、角色/权限系统(角色常量、权限装饰器、中间件、Policy/Gate 对象、处理器内检查),并标记敏感/特权端点(如 /admin、/management、/internal 等前缀,用户管理、配置管理、财务数据、系统操作、聚合敏感数据等)。需忽略公开端点(登录、注册、密码重置请求、公开内容)以及静态资源、健康检查端点。
-
验证阶段:读取侦察文件,将端点清单按每批最多 3 个端点分批,并行启动子代理,每个子代理只验证其分配的端点,结果写入 sast/missingauth-batch-N.md。子代理需根据项目技术栈选择对应的“易受攻击 vs 安全”示例,并评估每个端点的认证检查(是否存在认证中间件/装饰器/守卫、中间件链是否在处理器之前运行、路由是否意外挂载在受保护组之外)和角色/权限检查(是否校验角色、是否对每个 HTTP 方法都执行检查)。
-
合并阶段:将各批结果整合为最终报告。
适用场景
适用于对代码库进行聚焦的安全评估,尤其是需要系统性排查未认证访问和垂直越权(功能级授权失效)的场景。支持多种技术栈,包括 Python(Django、Flask)、Node.js(Express)、Ruby on Rails、Java(Spring Boot)、Go、PHP(Laravel)、C#(ASP.NET Core)等。
限制
该技能不检测 IDOR/水平越权、JWT 缺陷和业务逻辑漏洞。使用前必须存在 sast/architecture.md。具体执行细节(如合并阶段的具体指令)在提供的资料中未完整给出,暂未提供。