cors-check 是一个专注于检测 CORS(跨源资源共享)配置错误的安全技能,属于安全审计类工具。它通过向目标 URL 发送携带各种 Origin 头值的 HTTP 请求,并分析服务器返回的 Access-Control 响应头,来发现 CORS 策略中的潜在漏洞。
主要能力
该技能能够识别多种危险的 CORS 配置错误,包括:Access-Control-Allow-Origin 原样反射请求的 Origin;Access-Control-Allow-Origin 允许 null;以及同时设置 Access-Control-Allow-Origin: * 与 Access-Control-Allow-Credentials: true。在进行 Origin 反射测试时,如果检测到 Origin 被反射且 Access-Control-Allow-Credentials 为 true,会标记为 CRITICAL,提示可能存在凭据窃取风险;若仅反射 Origin 但未开启 Credentials,则标记为 WARNING。对于通配符 * 与 Credentials: true 同时出现的情况,会标记为 CRITICAL,并说明该组合虽会被浏览器阻止,但服务器配置本身仍然错误,应当上报。
使用方式
使用前需要满足两个前提:已安装 curl,以及能够对目标 URL 进行 HTTP/HTTPS 访问。技能提供两个输入变量:TARGET_URL 表示要测试的端点 URL,LEGITIMATE_ORIGIN 表示已知的合法来源(如有)。工作流程分为四步。第一步检查基线 CORS 响应,即在不带 Origin 头的情况下请求目标 URL,抓取 access-control 相关响应头。第二步进行 Origin 反射测试,通过一个 test_cors 函数依次测试多种 Origin 值:合法来源、null、攻击者域名(如 https://attacker.com)、子域名、前缀相似域名(如 https://example.com.evil.com)、带尾部斜杠的变体,以及 HTTP 降级(如 http://example.com)。测试函数会提取 ACAO 和 ACAC 头并输出,同时根据反射与 Credentials 情况给出风险提示。第三步测试 OPTIONS 预检请求,发送带有 Origin、Access-Control-Request-Method 和 Access-Control-Request-Headers 的 OPTIONS 请求并检查响应头。第四步汇总结果并评估风险,具体风险评级标准可参考 REFERENCE.md(资料未提供其详细内容,暂未提供)。
适用场景
该技能适用于多种安全审计场景:审计 API 端点的 CORS 策略;检查跨站请求伪造(CSRF)或凭据窃取的可能性;在漏洞赏金项目中验证基于 CORS 的账户接管漏洞。
完成标准与限制
技能完成的标志是:打印出 8 种或以上 Origin 变体的 ACAO/ACAC 响应,并自动检测和标记危险配置(如反射加 Credentials、允许 null Origin 等)。在失败模式方面,资料说明了几种情况:如果所有测试都没有 ACAO 头,说明 CORS 策略未配置或仅同源,且 curl 响应可能与浏览器行为不同;如果出现 302 重定向导致无法获得预期响应,可添加 -L 参数或直接指定最终 URL;如果服务器阻止 OPTIONS 方法,返回 405 表示不支持预检,可退回到简单请求(GET/POST)测试。资料还提示:如果某个子域存在 XSS,允许该子域作为 Origin 也可能构成漏洞。此外,可考虑使用自动化工具 corsy(https://github.com/s0md3v/Corsy)辅助测试。