跨域资源共享 (CORS) 是一种允许从源外的其他域请求网页上的受限资源的机制。虽然 CORS 对于现代 Web 应用程序至关重要,但配置不当可能会使网站暴露于漏洞,让恶意攻击者能够窃取敏感信息。
本文介绍了 CORS 漏洞是什么、如何找到它们、漏洞赏金的奖励以及识别和利用这些漏洞的工具和方法。
什么是 CORS 错误?
浏览器中实施 CORS 是为了保护用户免受恶意跨域请求的侵害。同源策略(SOP) 通常限制网页向页面来源域以外的域发出请求。CORS 以受控方式放宽了这些限制。但是,如果服务器的 CORS 配置错误,则可能会为攻击者打开大门,让他们绕过 SOP 并访问敏感数据。
当网站未正确配置其跨域策略时,就会发生 CORS 错误,从而允许未经授权的域发出请求或访问敏感数据(例如目标 Web 应用程序的用户凭据或私人信息)。例如,如果存在漏洞的网站允许任意域或在其标头中使用通配符 ( ) ,*
则Access-Control-Allow-Origin
可能会将敏感信息泄露给非预期方。
发现 CORS 漏洞的奖励
漏洞赏金计划通常会奖励发现安全漏洞(包括 CORS 错误配置)的研究人员。发现 CORS 漏洞的奖励取决于漏洞的严重程度、网站的价值以及漏洞赏金计划本身。以下是您可以获得的粗略估计:
- 低风险漏洞:最高赔偿金额为 500 美元。这些漏洞可能不会导致数据泄露,但会带来某种风险。
- 中等风险漏洞:500 美元 — 3,000 美元。此类漏洞可能会导致部分数据泄露或在特定情况下发起攻击。
- 高风险漏洞:3,000 美元 — 10,000 美元或以上。导致敏感数据泄露、用户冒充或对 Web 应用程序安全造成重大影响的漏洞。
组织越大,数据越重要,支付的金额就可能越高。
如何查找 CORS 错误
1. 了解 CORS 标头
要查找 CORS 错误,您需要了解 CORS 标头的工作原理:
- Access-Control-Allow-Origin:定义允许哪些来源访问资源。此处的错误配置(例如允许
*
(所有来源))可能会带来严重的安全风险。 - Access-Control-Allow-Credentials:允许服务器在跨域请求中包含凭据(cookie、HTTP 身份验证)。如果与宽松的
Access-Control-Allow-Origin
设置结合使用,则可能会很危险。 - Access-Control-Allow-Methods:定义允许跨源请求的 HTTP 方法(GET、POST、PUT、DELETE)。
2. 常见的 CORS 配置错误
- 允许所有来源(
*
):当服务器允许所有来源(Access-Control-Allow-Origin: *
)并支持凭据(Access-Control-Allow-Credentials: true
)时,攻击者可以创建窃取敏感信息的恶意网站。 - 在 CORS 标头中反映用户输入:某些 Web 应用程序可能会反映用户提供的来源标头。例如,如果 Web 应用程序
Origin
从请求中读取标头并将其反映在Access-Control-Allow-Origin
标头中,攻击者就可以从恶意来源制作请求。 - 错误配置的预检请求:某些站点可能错误配置了其预检请求,允许跨源请求中不应允许的方法或标头。
查找 CORS 错误的工具
1. Burp Suite
Burp Suite 是用于 Web 应用程序安全测试的最强大的工具之一。它允许您拦截和修改 HTTP 请求和响应。对于 CORS 测试,Burp Suite 可以:
- 拦截HTTP请求,并修改
Origin
header,模拟恶意请求。 - 检查响应标头,查看是否暴露敏感数据或是否接受不安全的来源。
您可以使用Burp Suite 的CORS Misconfiguration Scanner插件来自动检测易受攻击的配置。
2. OWASP ZAP
OWASP ZAP 是一款开源安全工具,也可用于查找 CORS 漏洞。它具有与 Burp Suite 类似的拦截代理功能,您可以手动更改Origin
标头以查看服务器如何响应。
3. 科西
Corsy 是一款轻量级、简单的 Python 工具,专门用于扫描 CORS 错误配置。它可以快速检查域是否有不正确的Access-Control-Allow-Origin
设置,并报告是否允许通配符或不安全的跨源请求。
4. Postman
Postman 可用于手动制作带有自定义Origin
标头的 HTTP 请求。如果您想要模拟跨域请求并检查响应中是否存在与 CORS 相关的漏洞,此功能特别有用。
5. CURL
使用cURL
命令行是测试 CORS 错误的一种快速方法。您可以手动指定Origin
标头并查看服务器如何响应:
<span style="color:rgba(0, 0, 0, 0.8)"><span style="background-color:#ffffff"><span style="background-color:#f9f9f9"><span style="color:#242424">curl -H <span style="color:#c41a16">"来源:https://evil.com"</span> -I https://vulnerable-website.com</span></span></span></span>
如果服务器响应Access-Control-Allow-Origin: https://evil.com
,则表明存在 CORS 漏洞。
CORS 错误示例
示例 1:允许使用凭证通配符
网站允许Access-Control-Allow-Origin: *
并允许凭据(Access-Control-Allow-Credentials: true
)。在这种情况下,任何网站都可以向易受攻击的站点发出经过身份验证的请求并访问敏感的用户信息。
影响:攻击者可以建立恶意网站,诱骗用户访问,并从目标域窃取他们的会话数据、cookie 或其他私人信息。
示例 2:反射来源标头
Web 应用程序可能会Origin
从请求中获取标头并将其回显在Access-Control-Allow-Origin
标头中。这很危险,因为攻击者可以提供其恶意网站作为来源并访问敏感数据。
<span style="color:rgba(0, 0, 0, 0.8)"><span style="background-color:#ffffff"><span style="background-color:#f9f9f9"><span style="color:#242424">来源:https://malicious-website.com</span></span></span></span>
影响:服务器将https://malicious-website.com
在其Access-Control-Allow-Origin
响应头中反映出来,从而允许恶意网站访问数据。
如何利用 CORS 漏洞
利用 CORS 漏洞通常需要创建一个恶意网站,该网站会向存在漏洞的网站发送跨域请求。您可以使用 JavaScript 来执行以下操作:
- 代表已登录用户向存在漏洞的网站发出经过身份验证的请求。
- 访问敏感用户数据,例如个人信息或会话 cookie。
- 将数据泄露至攻击者控制的服务器。
防止 CORS 配置错误
- 避免使用通配符:如果您处理敏感信息或凭证,切勿
*
使用。Access-Control-Allow-Origin
- 验证来源:确保只有受信任的来源才被允许发出跨源请求。
- 禁用凭证:如果您的应用程序不需要在跨源请求中包含凭证,请禁用
Access-Control-Allow-Credentials
。