获取国际象棋对战网站Chess.com五千万用户信息

作者: 黑客网 分类: 正规黑客联系方式 发布时间: 2022-05-26 14:22

获取国际象棋对战网站Chess.com五千万用户信息

本篇Writeup漏洞涉及知名国际象棋在线对战网站Chess.com,漏洞情况非常简单,可以通过消息交互机制获取其他用户的session_id,实现对其他用户的账户劫持。关键在于其影响非常严重,通过该漏洞可获取Chess.com网站中来自全世界各地多达5000万的注册用户信息。

漏洞发现背景

对网站Chess.com的测试要追溯到2019年底了,当时我花了好多时间对其部署的原生WEB应用服务进行了分析,最后只发现了一个没啥特别的反射型XSS:

获取国际象棋对战网站Chess.com五千万用户信息

当时我对该反射型XSS的考虑是这样的,攻击者可以通过"Connect to Google"的URL链接,验证通过拥有的账户后,然后用XSS方式构造HTTP回调请求,把其账户与受害者的Chess.com账户绑定,以此实现账户后门化提权。

获取国际象棋对战网站Chess.com五千万用户信息

这应该算是XSS武器化应用的一个妙招了,但我却不满足止步于该发现,我努力尝试去发现一个更有影响力的高危漏洞。在那段时间,我时不时都会对Chess.com做一些测试,但都无功而返,没什么进展。

账户劫持漏洞

而在我用手机和BurpSuite完成了对另外一家公司的安全测试后,我才意识到,我竟然从来没有测试过Chess.com的APP应用。说做就做,经过对Chess.com APP应用的流量抓包,我发现了此前从没发现过的一个子域名api.chess.com:

获取国际象棋对战网站Chess.com五千万用户信息

"api.chess.com"用来执行验证过的API通信交互,可以确定的是,从该子域名的请求来看,这下貌似就有得搞头了。从请求路径看,每个请求都具备标准的形式化请求头,且都是有效的。测试范围瞬间感觉豁然开朗。刚开始的几个请求样式如下:

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

我试图对其请求进行篡改操控,但却发现"signed"是经验证的一个哈希,它即是整个请求的参数。根本无法对它进行篡改,貌似服务端以这种散列哈希执行某种密码形式的验证,来实现请求通信交互。所以,即使更改了其哈希值,最终的请求也无法成功。

好在,我们手机中的请求是经过验证的,所以理论上来说,是可以从这些请求中继续深挖发现隐藏的相关密码信息,或是进而编写脚本进行验证性请求生成测试的。在尝试对请求篡改之前,我又仔细地点击了Chess.com APP的各项功能,希望能有新的功能发现。

果不其然,当我与hikaru发消息后,我在请求中搜索用户名 "hikaru" 时,发现了一个非常有意思的HTTP请求,它看似是负责与其它用户的消息发送,以下是与用户hikaru相关的详细请求和响应信息:

请求:

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

响应:

{ "status": "success", "data": { "email": "REDACTED@REDACTED.COM", "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 } }

我第一眼查看响应内容时,觉得太好了,其中竟然包含了该用户的注册邮箱名,也就意味着,用这种方式可以获取任意用户的绑定邮箱了,而且这至少是一个中危漏洞。所以,即使我们无法对请求执行篡改,也可以通过查看其中的交互内容,发现一些有用的东西。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

标签云