开头:我们在这里发现的错误非常简单。有趣的是漏洞本身的影响。
我之所以真正想写这本书的原因是因为我们发现它有多有趣。我想我@sshell_大概在一个小时前就在语音通话中笑了这个错误,然后才意识到我们需要实际报告它。
很多人不知道的是,Chess.com在自己的网站上有一个漏洞赏金计划(就像许多其他公司一样),可以接受通过电子邮件提交的信息。他们的程序页面位于这里,我真的建议您检查一下它们。
背景
当我于2019年11月首次开始对其进行黑客攻击时,我花费了大量时间来寻找通用的Web漏洞。
我能够找到一个不同的反射XSS,但没什么有趣的。
通过提取“连接到Google” URL,使用您拥有的帐户对其进行身份验证,然后使用XSS挂钩发送带有回调的HTTP请求以将攻击者的Gmail帐户绑定到XSS,可以将XSS升级为帐户后门受害者的Chess.com帐户。
我猜想这是对XSS进行武器整理的巧妙方法,但确实不能满足我对应用程序进行黑客攻击的好奇心。我真的很想找到一个严重性更高的问题。
我会不时地回来攻击它们,但似乎从未真正取得任何进展。每次我回来查看时,感觉就像我在看相同的功能,却从未发现任何新的东西。
帐户接管漏洞
当我意识到自己在拦截HTTP流量时甚至从未打开过chess.com应用程序时,正通过我的iPhone和Burp Suite入侵另一家公司。当我这样做的时候,有一个我从未见过的新子域。
已将签名的API请求发送到“ api.chess.com”。
应用程序使用此域的事实对我来说非常有趣,因为我之前曾尝试过手动向网站手动发送HTTP请求,但从未遇到任何运气。应用本身发送的每个标题都有正确的标题,并且可以正常工作。
前几个请求看起来像这样:
GET /v1/users/validate-username/test?signed=iOS3.9.7-047a13c395ee9c059f98f1af74bb11c802047d47 HTTP/1.1
Host: api.chess.com
在尝试篡改请求之后,很明显,“ signed”参数被用作所有请求参数的哈希值。如果应用程序使用某种秘密对整个请求进行签名,那么您就无法篡改HTTP请求的任何部分而没有提供未经授权的错误。这意味着,如果您进行了任何更改,则应用程序将不允许您发送它。
由于我们是通过手机签署请求的人,因此理论上可以提取秘密并编写脚本以任意签署请求。
但是,在尝试实际篡改该应用程序之前,我只是简单地单击了一下以查看不同的功能。
当我搜索用户名“ hikaru”向其发送消息时,出现了一个非常有趣的HTTP请求。以下是应用程序尝试获取有关用户的信息时的HTTP请求和响应:
GET /v1/users?loginToken=98a16127fb8cb4dc97a3a02103706890&username=hikaru&signed=iOS3.9.7-7b9f1383b669614302e9503ba7db81875e440d7e HTTP/1.1
Host: 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响应。
在我开始编写报告以提交给他们的安全团队之前,我搜索了个人资料字段,并尝试查看是否还有其他内容被泄漏。总的来说,这看起来很无聊,但是在搜索了两个单独的用户之后,我意识到了一些事情:
"session_id":"56c5257a0800d.....86d28934868a88",
"session_id":"1f3d112b9a3f.....dbbf19438fcd8d",
每个用户的“ session_id”值都不同。由于返回的是用户对象,这意味着它们可能属于用户,而不是属于我的会话。
问题是它们的用途是什么,是否敏感。
我在桌面上登录该网站并检查了我的cookie。他们使用“ PHPSESSID”作为会话令牌,当我搜索自己的用户名时,它在“ session_id”字段中返回了我自己的“ PHPSESSID”!
HTTP/1.1 200 OK
Date: Sat, 9 Dec 2020 05:52:47 GMT
Content-Type: application/json
... "session_id":"3947398c39ef15a.....56523b5a4533" ...
由于PHPSESSID是授权用户的唯一方法,因此这意味着我们可以从任何用户提取此值并劫持他们的会话。
头奖,任何chess.com用户的完全任意帐户接管!
为了展示最大的影响力,我继续检索了Chess.com管理员Daniel Rensch的PHPSESSID cookie 。
授权参加他的会议后,我有些失望。没有管理界面。
我在应用程序周围单击,直到我想起早期测试中的内容:有一个“ admin.chess.com”子域。
我将泄漏的管理PHPSESSID cookie的范围限定为“ .chess.com”,然后打开了一个新选项卡,以查看是否可以访问它。当我加载页面时,它没有像过去那样将我踢出局。我们进入了管理员仪表板!
在这一点上,我们在应用程序上调出了自己的个人资料:
如果我们是恶意行为者,那么它可能会被滥用来完全接管任何人的帐户。最糟糕的是,我们可以更新我们的个人资料,假装我们的身价超过400 ELO。
此时,我们在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
本文始发于微信公众号(Ots安全):入侵Chess.com并获得5千万条客户数据
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论