一键导入
cors-misconfiguration
CORS 配置错误检测 — 检测跨域资源共享配置错误;适用于 Web API、前后端分离、网关代理场景。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
CORS 配置错误检测 — 检测跨域资源共享配置错误;适用于 Web API、前后端分离、网关代理场景。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
白盒建模——一次深度建模产出五张共享模型:项目架构(技术栈/分层/框架自有封装/闭源依赖位置)、 入口点(路由/中间件信任边界)、认证与权限(会话/角色/多租户/归属字段)、业务(实体/流程状态机/ 业务不变量/高价值资产)、全局威胁(攻击面×漏洞类别的适用性映射,供下游逐一全测)。本能力不做漏洞判定,为后续 漏洞维度分析建立共享底图。
OS 命令注入综合检测——覆盖直接命令拼接 / shell 元字符 / 参数注入 / 间接 RCE,按回显 / 时间 / 带外通道分诊。 流量中参数值含主机名 / URL / 文件名 / 命令片段、响应里出现 shell 错误关键字(`/bin/sh` / `cmd.exe` / `command not found`)、注入 `sleep N` 耗时增加、上传后异步处理链路时使用。
文件上传多策略综合检测——覆盖扩展名 / MIME / 魔术数 / 解析漏洞 / 上传链组合(LFI / Zip Slip / SVG XSS / SVG XXE)。 流量含 multipart/form-data 上传、响应回显落盘路径、上传后文件可被 GET 解析、上传字段含 filename / path 可控时使用。
IDOR 水平越权检测 — 通过替换资源标识符(ID/UUID/路径)访问他人资源的风险;适用于用户资料、订单、文档、租户隔离场景。
检测路径穿越和本地文件包含(LFI)风险;当目标存在文件读取/下载/预览功能且含路径参数时触发;适用于文件下载、日志查看、模板加载等场景。
黑盒建模 — 迭代式攻击面建模,按站点级 / 页面级 / 功能级三粒度推进;进入新页面即触发一次页面级建模、切换新身份各刷新一次,产出端点账本与页面语义模型,为后续漏洞维度的适用性判断提供依据。
| name | cors-misconfiguration |
| description | CORS 配置错误检测 — 检测跨域资源共享配置错误;适用于 Web API、前后端分离、网关代理场景。 |
| when-to-use | 当任务涉及跨域访问控制、Origin 白名单、凭证跨域读取风险评估时 |
| allowed-tools | bash,read_file,list_files,rg |
| user-invocable | false |
CORS 成因:source(攻击者控制的 Origin 头)→ sink(CORS 响应头:Access-Control-Allow-Origin / Access-Control-Allow-Credentials 等)。反射任意 Origin + Allow-Credentials=true,导致跨域读取受保护数据。详见同根目录 pentest/web-security-testing/SKILL.md 漏洞成因图谱 · CORS 配置错误行(不在本 skill 重复成因)。
关键 sink 形态:服务端在响应头里反射请求 Origin 作为 Access-Control-Allow-Origin 而不是用白名单——这是 CORS 配置错误的核心 sink,无论中间件实现方式如何(Go 反射 r.Header.Get("Origin") / Node CORS 通配 / Nginx 反向代理回填等)都属同 sink。
以下是已知的常见 CORS 触发线索,作为基线起点而非必检硬清单:
[x] done[-] n/a (原因)[+] added (来源)基线触发线索按"sink 语义"分类(不按业务命名):
Access-Control-Allow-Origin:任何返回 ACAO 头的端点都是候选——不限于"看起来像跨域"的 APIAccess-Control-Allow-Origin: <reflected from request Origin>(非固定白名单值)Access-Control-Allow-Credentials: true:与上面任一组合都是高危——攻击者可携带凭证跨域读null Origin 信任:服务端把 Origin: null 也作为合法值反射evil.target.com 被信任(target.com 后缀匹配缺陷)OPTIONS 预检返回 Access-Control-Allow-Methods/Headers 包含敏感方法 / 自定义头w.Header().Set("Access-Control-Allow-Origin", r.Header.Get("Origin")) + w.Header().Set("Access-Control-Allow-Credentials", "true") 形态加载本 skill 时按这些问题思考:
Allow-Credentials: true?(两者组合即高危)null?Origin 与带合法 Origin 各发起一次,记录 ACAO/ACAC/Varyhttps://evil.example、null、相似子域、随机端口等 Origin 重放请求OPTIONS 预检,检查 Access-Control-Allow-Methods/Headers 是否过宽| Origin payload | 用途 |
|---|---|
https://evil.example | 标准恶意 Origin |
null | 检测 null Origin 信任(如 sandboxed iframe) |
https://evil.example:9999 | 端口变体,检查白名单是否含端口 |
https://target.com.evil.example | 后缀匹配绕过 |
https://evil-target.com | 前缀匹配绕过 |
http://evil.example(HTTP 而非 HTTPS) | 协议混合 |
w.Header().Set("Access-Control-Allow-Origin", r.Header.Get("Origin")) + w.Header().Set("Access-Control-Allow-Credentials", "true") — Go 中间件直接反射 Origin(origin-reflected-with-credentials-cors)cors({ origin: true, credentials: true }) — Express CORS 配置 origin: true 反射所有 Origin(expressjs-origin-true-cors)w.Header().Set("Access-Control-Allow-Origin", "*") 但端点返回敏感数据 — 通配符 + 敏感数据(wildcard-acao-sensitive-cors)以下是 CORS 维度的典型窄化误判:
Access-Control-Allow-Methods/Headers 配置过宽问题,必须独立测Access-Control-Allow-Origin: * 不算高危" — 不完全错,但当响应含敏感数据 + 需要凭证时仍属高危。需结合端点的数据敏感度判定null Origin(来自 sandboxed iframe / file:// 等场景)是独立攻击面,需独立测为什么这里是「必须」:反例义务属于交付契约——"该子系统 CORS 配置安全"或"已防护"结论是覆盖完整性的产物声明,缺失反向验证清单会让下游误信"该维度全站安全"。
写"未发现 CORS 配置错误"或"已防护"前,产物必须包含:
清单不完整 → 结论降级为 partial-coverage 并显式声明未覆盖范围。
特别警示:多子系统场景下,CORS 配置按子系统独立结账——不能用"在子系统 A 测了"代替"子系统 B/C/D 也安全"的结论。
通用闭环口径见同根目录 common/closure-verification.md(技能表 path 列同一抽取根下,需要时 read_file 读取)。核心:结论须形成「输入 → 处理 → 真实危害 → 可复核证据」完整证据链;仅凭响应头出现 Access-Control-Allow-Origin 等中间信号最多判 suspected,证明攻击源可携带凭证跨域读到敏感响应才判 confirmed。
confirmed| 现象 | 判定 |
|---|---|
| 恶意 Origin 被允许,且在真实浏览器跨域场景下可读取敏感响应(含凭证场景) | confirmed |
配置看似宽松(如反射 / null),但尚未证明真实浏览器可读性或敏感数据暴露 | suspected |
| 仅允许受控白名单 Origin,且敏感接口无跨域读风险 | not vulnerable |
| 只测了部分子系统 / 端点 / Origin payload 类型 | partial-coverage(不得宣称 safe) |
ACAO: * 常见于公开静态资源;若无敏感数据与凭证,不应直接判高危Vary: Origin、缓存层与网关改写,避免一次性结果误判Access-Control-Allow-Credentials: truew.Header().Set("Access-Control-Allow-Origin", r.Header.Get("Origin")) 直接反射;改为白名单校验后输出