跨域资源共享配置错误
跨源资源共享(Cross-Origin Resource Sharing, CORS)是一种基于浏览器的机制,它指示浏览器在其web服务器域之外加载资源的允许来源。除了提供比同源策略(SOP)更强的灵活性外,CORS还通过控制如何从外部域请求和加载资源来确保安全性。
然而,有几个因素可能导致CORS实现容易受到网络攻击。其中一个原因是 CORS 策略配置不当,该策略通常用于跨域攻击,其中威胁参与者向 Web 服务器的域发送恶意请求,作为迈向更深入的系统级攻击的第一步。
什么是CORS错误配置?
当 Web 服务器允许第三方域通过合法用户的浏览器执行特权任务时,会发生跨源资源共享错误配置。由于 CORS 机制依赖于 HTTP 标头,因此浏览器会向跨域资源发出预检请求,并检查浏览器是否有权为实际请求提供服务。因此,不正确的 CORS 标头配置允许恶意域访问和利用 Web 服务器的 API 端点。虽然多个标头定义了 CORS 策略,但以下三个标头对于管理安全性非常重要:
ACAO (access - control - allow - origin) -指定可以访问web服务器资源的外部域。如果服务器动态生成此标头,或者如果网站允许使用通配符的域,服务器可能允许访问任何域,包括攻击者控制的网站的域。
访问控制允许凭据 – 指定客户端的浏览器是否在请求中包含 Cookie、TLS 证书或授权标头。如果此标头设置为 true,则浏览器会发送包含请求的凭据,攻击者可以使用恶意脚本在传输过程中检索这些凭据。
访问控制允许方法 – 此标头指定用于跨域访问的HTTP方法。如果标头包含不安全的 HTTP 方法,则攻击者可以通过中继包含不受信任的脚本、二进制文件和图像的请求来访问受限资源。
如何利用 CORS 错误配置?
攻击者利用CORS错误配置滥用web服务器、客户端浏览器和受信任域之间的信任链。针对 CORS 错误配置的常见攻击包括:
起源反射
假设这样一个场景:允许域名cross- orig-website.com访问来自服务器origin-website.com的内容;外部域是在originalwebsite.com web服务器的CORS配置中使用ACAO头指定的,如下所示:
由于CORS配置不允许开发人员在静态列表中指定允许的域,所以开发人员要么动态生成ACAO标头,要么使用通配符*(如果要允许多个域)。
动态生成标头时,Web 服务器会读取请求的源标头,然后将其写入响应中的访问控制允许源标头。虽然这些授予对所有域的访问权限,但黑客可以利用该方法。一种常见的漏洞利用方法是从自定义源发送 HTTP 请求,并检查服务器是否允许对源进行访问控制,如下所示。
这样的攻击被称为起源反射利用,web服务器在响应的访问控制-允许-起源标头中反映请求的起源标头。此外,响应还公开Access-control-allow-credentials报头被设置为true。在这种情况下,攻击者-controlled-domain.com可以使用受害者的凭据向original-website.com发送请求,允许攻击者通过编写恶意脚本检索凭据。为了通过攻击者控制的网站获取受害者的凭据,攻击者还可以在发送给毫无戒心的用户的页面中嵌入类似以下内容的JavaScript:
零源漏洞利用
一些开发人员将他们的web服务器配置为允许通过一种称为null origin的特殊起源方法进行跨起源访问。在这种情况下,web服务器返回如下所示的类似响应:
攻击者利用这一点,创建一个描述本地HTML文件的沙箱iFrame来获取空源。沙盒iFrame看起来类似于:
使用上述有效负载发送的请求具有空源,可用于检索用户凭据和其他敏感信息。
扩展源码漏洞
由于源标头的正则表达式实现不佳,Web 服务器可能无法验证原始源的扩展地址。例如,Web 服务器可以配置为接受以 original-website.com 结尾的所有域,例如 apps.original-website.com 和 mail.original-website.com.但是,由于实现 RegEx 定位器时出错,这些域可能会无意中允许来自任何以 original-website.com 结尾的域(包括 attackers-original-website.com)的请求。
攻击者可以利用这种错误配置来创建类似以下内容的格式错误的请求:
Web 服务器最终会提供一个包含受害者凭证信息的响应,类似于:
跨域资源共享配置错误影响
CORS机制主要是为了放宽同源政策的限制性要求而建立的。当 CORS 标头中的策略过于宽松并允许对任何源进行跨域访问时,就会出现漏洞。开发团队经常忽略 CORS 错误配置,这使得攻击者通常利用这种风险来编排增强攻击。尽管 CORS 是一项强大的技术,但错误配置很容易被利用,因为对手只需要对标头规范有基本了解,并在执行漏洞测试时多一些耐心。
成功利用CORS错误配置的影响包括:
操纵或窃取受害者的cookie
创建和执行无效请求
在易受攻击的web服务器中执行恶意代码
接触敏感信息
安装恶意软件
跨站点脚本攻击
CORS漏洞(A05:2021)被分类在OWASP前10个漏洞列表的“安全错误配置”中。这组漏洞的平均加权影响为6.56(中等),平均加权利用为8.12(高),平均发生率为4.52%(中等)。
CORS 和 CSRF 漏洞有什么区别?
在 CORS 标头配置不正确的情况下,攻击者可以使用恶意域来利用组织的 Web 服务器的资源。CORS 漏洞通常被用于基于浏览器的攻击,这些攻击利用放宽同源策略来访问受限制的数据和功能。
另一方面,跨站请求伪造(CSRF)是一种Web 漏洞利用,它让毫无戒心的用户从受信任的Web应用程序提交未经授权的命令。由于大多数浏览器在提交请求时自动包含用户的会话信息,网站无法区分合法和伪造请求,最终执行攻击者发起的额外的操作。
防止 CORS 配置错误漏洞的实践有哪些?
对访问控制允许凭据配置设置为 true 的资源执行身份验证
对访问控制允许源标头使用白名单而不是通配符
对需要访问资源的所有域和子域实施筛选器和验证
进行持续漏洞扫描和安全漏洞测试