条件竞争漏洞:一张无限金额的星巴克礼品卡

  • A+
所属分类:WEB安全

这是一个关于“如何动脑筋让自己的星巴克礼品卡显示为无限金额,然后从此过上终身免费喝咖啡日子“的故事。 

黑客@homakov 最近购买了三张面值5美元的星巴克礼品卡。 

starbucks.com有个人账号体系,可以添加礼品卡、查询余额,以及不同卡之间转账。 

对于涉及金钱等有限资源的网站,有个漏洞很常见,叫做“条件竞争”(国内也有称呼竞态条件)。它的特征是:因为数据库的处理速度跟不上程序的请求速度,如果网站的防护做的不够,发起的多个购买或转账请求可以同时生效。 

@homakov 研究发现,资金从卡1转到卡2是有状态的。第一个请求,卡1转钱到卡2并保存金额值;第二个请求,确认交易并清除会话。 

会话的存在,对hack造成了些困难。不过这种保护还是可以绕过的:使用同一个账号,在两个不同浏览器上同时进行转账操作(cookie不同)。 

“条件竞争”的难处在于,许多开发人员都会限制每个ip/账号/动作的请求数,以预防网络延迟和非正常请求造成错误。@homakov 尝试了好些次,最后终于成功绕过限制,将卡1的钱两次转移到卡2。现在的三张卡变成0美元、15美元、5美元。 

他走进附近的星巴克店,买了16.7美元东西。 

后来,@homakov 给自己信用卡充了10美元,并将这个漏洞反馈给了星巴克官方。 

后记:类似的情况在国内也有,比如乌云上有位童鞋因网络不好,向自如网多点了几次退款按钮,然后生成了两单退款申请,并收到了两笔款项。 

参考: 
WooYun: 自如网自如空间设计不当存在账户余额多倍提现漏洞(有入账证明) 
乌云知识库:并发请求导致的业务处理安全风险及解决方案 
DigitalOcean的条件竞争漏洞 

来源:sakurity.com

1#疯狗 | 2015-05-22 14:53

“如何动脑筋让自己的星巴克礼品卡显示为无限金额,然后从此过上终身免费喝咖啡日子”——大众喜闻乐见啊

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: