本文分享的是作者通过测试星巴克官网时,在其测试环境中发现的,利用IDOR越权方式实现的账户劫持漏洞,获得了星巴克官方奖励$6000的奖励。
漏洞探测
当我浏览到新加坡星巴克网站时,偶然在其中发现了一个第三方网站,出于保密原因暂且叫他为example.com,随着对该网站的深入探测,我发现其路径example.com/starbucks下的页面和星巴克登录网站card.starbucks.com.sg一模一样:
此时我想到了两种可能性:
1、当前Web应用程序是card.starbucks.com.sg的测试环境;
2、可能是忘记删除的旧版测试环境。
这两种可能性都会导致漏洞,但我也并不确定这里的漏洞是否会对星巴克网站的生产环境形成影响。于是,我在card.starbucks.com.sg网站创建了一个用户,然后用该用户在example.com/starbucks来进行登录测试,BINGO!竟然可以的!也就是说example.com/starbucks和card.starbucks.com.sg采用了相同的用户认证机制,都能认证星巴克注册用户。
漏洞利用
为此,我在example.com/starbucks页面下发现了另一个路径,该路径发起的POST数据包中包含了注册用户的绑定邮箱:
email=hacker@hacker.com
基于账户劫持思路,为此,我在这里把绑定邮箱替换成受害者的,请求发出后,服务端的响应内容中只包含了受害者的部份信息。而且在更改密码的请求中,由于无效的CSRF token,所以最终账户劫持的尝试也没成功。
继续测试,我把包含受害者邮箱参数,在example.com/starbucks中生成的PHPSESSID cookie复制到了card.starbucks.com.sg的请求数据包中,哦哇,请求发出后,竟然可以成功获取到星巴克生产环境中受害者的个人信息,该请求中生成的有效CSRF token可以让我有权更改受害者密码,以此劫持了受害者账户。
漏洞影响
利用该漏洞不但可以看到其他用户的个人信息,还能劫持受害者账户,而且如果受害者用户账户中有累积积分,还可以通过移动APP去消费掉受害者的这些积分。
其它漏洞发现
我还在example.com上发现了其它两个测试环境页面,它们是:example.com/starbucks2和example.com/starbucks3,但是我在card.starbucks.com.sg注册的账户都不能登录该两个测试页面。另外,example.com/starbucks2页面不能注册新用户,但example.com/starbucks3页面可以注册新用户,这里就稍微有点乱了,但我尽量简单来说。
我觉得example.com/starbucks2 和 example.com/starbucks3两个测试环境页面调用的都是测试用户数据表,因此,在生产环境card.starbucks.com.sg中注册的用户是不能在该两个测试环境中登录的。
由于example.com/starbucks3页面可以注册新用户,且该用户可用来登录example.com/starbucks2,但不能登录card.starbucks.com.sg。然而,我从example.com/starbucks2请求包中复制的PHPSESSID cookie却能有效应用在card.starbucks.com.sg,因此,也就能间接使用该在example.com/starbucks3页面注册的新用户。为此,我画了一副以下漏洞利用逻辑图:
1、用受害者邮箱在example.com/starbucks3上注册新用户;
2、用该注册的受害者用户登录example.com/starbucks2;
3、复制第2步请求中的PHPSESSID cookie信息到生产环境网站card.starbucks.com.sg,进行登录,即能实现对受害者的账户劫持(如果该受害者邮箱在生产环境中有过用户注册,这里一样可以实现账户劫持)。
漏洞报送和处理进程
5.17 - 漏洞报送
5.18 - 漏洞分类
5.20 - 星巴克奖励$4000
6.17 - 星巴克额外奖励$2000
参考来源: