原文:
https://mikekitckchan.medium.com/cors-misconfig-that-worths-usd200-4696eda5ab4c
这个错误是在一个私人应用中发现的。所以,这篇文章不会透露任何关于目标的信息。为了不透露任何关于目标的信息,本文中提到的所有端点、参数、令牌名称都是编造的。这篇文章将目标命名为redacted.com。
该漏洞允许攻击者利用CORS错误配置从受害者那里窃取令牌。因此,攻击者可以利用该令牌来代表受害者利用目标的未授权服务。
背景
我已经为这个目标工作了将近一个星期。我已经测试了大部分请求和响应,但没有什么对我感兴趣的。所以,我重新检查了Burpsuite中的所有请求和响应,我发现下面的一个请求很容易受到CORS的影响:
GET /token HTTP/1.1
Host: subdomain.redacted.com
Origin: www.redacted.com
Connection: close
Accept: */*
Cookies: some-Cookies=xxxxxxxxxxxx;
响应像这样:
{"some_token":"xxxxxxxxxxxxxxxxxxxxxx"}
即使我把Origin头改为www.evil.com,这个端点也会给出200响应。所以,攻击者可以偷取受害者的代币。然而,如果我只是报告这是一个bug,它很可能被关闭为无影响。所以,我需要弄清楚这个令牌是什么以及如何使用它来对目标产生真正的影响。
进一步利用
所以,我花了几个小时搜索js文件,web应用程序,请求/响应以及历史关于令牌的url,子域名等。最后,我发现了一个JS文件,相关的令牌生成在web应用程序和一个JSON如下所示的文件:
{"unique_service":"subdomain.redacted.com"}
因此,我猜令牌必须链接到这里提到的“unique_service”。我花了一些时间阅读目标的文档,发现unique_service有一个利用率限制。用户在使用该服务时,需要支付超过免费限额的费用。该服务可以通过subdomain2.redacted.com/service访问。所提供的令牌在请求中充当如下所示的授权令牌:
POST /service HTTP/1.1
Host: subdomain2.redacted.com
Authorization: Bearer <some_token>
我还发现subdomain2只检查授权令牌,而不检查用户的会话。因此,如果攻击者可以窃取令牌,他们可以代表用户使用服务,并消耗他们对web应用程序的所有自由限制。
最终攻击
要利用,攻击者可以简单地把下面的脚本到个人的网站主机。
<html>
<body>
<script>history.pushState('', '', '/')</script>
<form action="https://subdomain.redacted.com/token">
<input type="submit" value="Submit request" />
</form>
</body>
</html>
假设我的网站是evil.com,攻击者可以简单地欺骗受害者点击evil.com,在同一浏览器如果存在redacted.com的正确的登录会话。
那么evil.com将向https://subdomain.redacted.com/token发送请求,请求获得令牌。
由于受害者在同一浏览器中登录,它的会话cookie也将被发送以进行验证。
由于目标不检查请求的来源,它将把令牌返回给evil.com。然后,攻击者可以使用令牌来消耗受害者的服务自由限制。
结果
我已经快速做了一个POC,并向厂商报告了这个bug。这个bug很快在几天内被修复,并奖励了我200美元。
译者:
非常标准的一次cors攻击,AWVS狂喜 😃
本文迁移自知识星球“火线Zone”