with one click
cors-misconfiguration
CORS 配置错误检测 — 检测跨域资源共享配置错误;适用于 Web API、前后端分离、网关代理场景。
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
CORS 配置错误检测 — 检测跨域资源共享配置错误;适用于 Web API、前后端分离、网关代理场景。
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
白盒建模——一次深度建模产出五张共享模型:项目架构(技术栈/分层/框架自有封装/闭源依赖位置)、 入口点(路由/中间件信任边界)、认证与权限(会话/角色/多租户/归属字段)、业务(实体/流程状态机/ 业务不变量/高价值资产)、全局威胁(攻击面×漏洞类别的适用性映射,供下游逐一全测)。本能力不做漏洞判定,为后续 漏洞维度分析建立共享底图。
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")) 直接反射;改为白名单校验后输出