入侵Chess.com并获得5千万条客户数据

  • A+
所属分类:安全新闻

开头:我们在这里发现的错误非常简单。有趣的是漏洞本身的影响。


我之所以真正想写这本书的原因是因为我们发现它有多有趣。我想我@sshell_大概在一个小时前就在语音通话中笑了这个错误,然后才意识到我们需要实际报告它。


很多人不知道的是,Chess.com在自己的网站上有一个漏洞赏金计划(就像许多其他公司一样),可以接受通过电子邮件提交的信息。他们的程序页面位于这里,我真的建议您检查一下它们。


背景

当我于2019年11月首次开始对其进行黑客攻击时,我花费了大量时间来寻找通用的Web漏洞。


我能够找到一个不同的反射XSS,但没什么有趣的。

入侵Chess.com并获得5千万条客户数据

通过提取“连接到Google” URL,使用您拥有的帐户对其进行身份验证,然后使用XSS挂钩发送带有回调的HTTP请求以将攻击者的Gmail帐户绑定到XSS,可以将XSS升级为帐户后门受害者的Chess.com帐户。

入侵Chess.com并获得5千万条客户数据

我猜想这是对XSS进行武器整理的巧妙方法,但确实不能满足我对应用程序进行黑客攻击的好奇心。我真的很想找到一个严重性更高的问题。


我会不时地回来攻击它们,但似乎从未真正取得任何进展。每次我回来查看时,感觉就像我在看相同的功能,却从未发现任何新的东西。


帐户接管漏洞

当我意识到自己在拦截HTTP流量时甚至从未打开过chess.com应用程序时,正通过我的iPhone和Burp Suite入侵另一家公司。当我这样做的时候,有一个我从未见过的新子域。

入侵Chess.com并获得5千万条客户数据

已将签名的API请求发送到“ api.chess.com”。


应用程序使用此域的事实对我来说非常有趣,因为我之前曾尝试过手动向网站手动发送HTTP请求,但从未遇到任何运气。应用本身发送的每个标题都有正确的标题,并且可以正常工作。


前几个请求看起来像这样:

GET /v1/users/validate-username/test?signed=iOS3.9.7-047a13c395ee9c059f98f1af74bb11c802047d47 HTTP/1.1Host: api.chess.com

在尝试篡改请求之后,很明显,“ signed”参数被用作所有请求参数的哈希值。如果应用程序使用某种秘密对整个请求进行签名,那么您就无法篡改HTTP请求的任何部分而没有提供未经授权的错误。这意味着,如果您进行了任何更改,则应用程序将不允许您发送它。


由于我们是通过手机签署请求的人,因此理论上可以提取秘密并编写脚本以任意签署请求。


但是,在尝试实际篡改该应用程序之前,我只是简单地单击了一下以查看不同的功能。


当我搜索用户名“ hikaru”向其发送消息时,出现了一个非常有趣的HTTP请求。以下是应用程序尝试获取有关用户的信息时的HTTP请求和响应:

GET /v1/users?loginToken=98a16127fb8cb4dc97a3a02103706890&username=hikaru&signed=iOS3.9.7-7b9f1383b669614302e9503ba7db81875e440d7e HTTP/1.1Host: api.chess.com


{"status": "success","data": {"email": "[email protected]","premium_status": 3,"id": 15448422,"uuid": "REDACTED","country_id": 2,"avatar_url": "https://images.chesscomfiles.com/uploads/v1/user/15448422.90503d66.200x200o.f323efa57fd0.jpeg","last_login_date": REDACTED,"session_id": "REDACTED","location": "Sunrise, Florida","username": "Hikaru","points": 52,"chess_title": "GM","first_name": "Hikaru Nakamura","last_name": null,"country_name": "United States","member_since": REDACTED,"about": "","is_blocked": false,"is_tracked": false,"are_friends": false,"friend_request_exists": true,"is_able_to_change_username": null,"flair_code": "diamond_traditional","show_ads": true,"is_fair_play_agreed": true  }}

当我第一次看到此HTTP响应时,我感到非常高兴,因为它正在返回用户的电子邮件地址!这意味着可以任意检索任何人的电子邮件地址,这可能是中等严重性的错误。


即使我们没有签名HTTP请求的方法,我们也可以简单地通过移动应用程序搜索特定用户,拦截流量,最后能够看到包含受害者电子邮件地址的HTTP响应。

入侵Chess.com并获得5千万条客户数据

在我开始编写报告以提交给他们的安全团队之前,我搜索了个人资料字段,并尝试查看是否还有其他内容被泄漏。总的来说,这看起来很无聊,但是在搜索了两个单独的用户之后,我意识到了一些事情:

"session_id":"56c5257a0800d.....86d28934868a88","session_id":"1f3d112b9a3f.....dbbf19438fcd8d",

每个用户的“ session_id”值都不同。由于返回的是用户对象,这意味着它们可能属于用户,而不是属于我的会话。


问题是它们的用途是什么,是否敏感。


我在桌面上登录该网站并检查了我的cookie。他们使用“ PHPSESSID”作为会话令牌,当我搜索自己的用户名时,它在“ session_id”字段中返回了我自己的“ PHPSESSID”!

入侵Chess.com并获得5千万条客户数据

HTTP/1.1 200 OKDate: Sat, 9 Dec 2020 05:52:47 GMTContent-Type: application/json
... "session_id":"3947398c39ef15a.....56523b5a4533" ...

由于PHPSESSID是授权用户的唯一方法,因此这意味着我们可以从任何用户提取此值并劫持他们的会话。


头奖,任何chess.com用户的完全任意帐户接管!


为了展示最大的影响力,我继续检索了Chess.com管理员Daniel Rensch的PHPSESSID cookie 。


授权参加他的会议后,我有些失望。没有管理界面。

入侵Chess.com并获得5千万条客户数据

我在应用程序周围单击,直到我想起早期测试中的内容:有一个“ admin.chess.com”子域。


我将泄漏的管理PHPSESSID cookie的范围限定为“ .chess.com”,然后打开了一个新选项卡,以查看是否可以访问它。当我加载页面时,它没有像过去那样将我踢出局。我们进入了管理员仪表板!

入侵Chess.com并获得5千万条客户数据

在这一点上,我们在应用程序上调出了自己的个人资料:

入侵Chess.com并获得5千万条客户数据

如果我们是恶意行为者,那么它可能会被滥用来完全接管任何人的帐户。最糟糕的是,我们可以更新我们的个人资料,假装我们的身价超过400 ELO。

入侵Chess.com并获得5千万条客户数据

此时,我们在4:00 AM左右的某个时间编写并提交了该错误。他们在一小时内回复了电子邮件,并在两个小时内将其修补。


感谢您的阅读和节日快乐!


时间线

12/12/2020,12:34 AM-报告

12/12/2020,03:17 AM-已验证

12/12/2020,07:42 AM-已修复

2020/12/16下午02:40-奖励


原文链接:https://samcurry.net/hacking-chesscom/


参考越权类漏洞获取漏洞:

https://www.seebug.org/vuldb/ssvid-95052

https://blog.csdn.net/angry_program/article/details/108133756

https://www.freebuf.com/column/188068.html

入侵Chess.com并获得5千万条客户数据

本文始发于微信公众号(Ots安全):入侵Chess.com并获得5千万条客户数据

发表评论

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