挖洞经验 | 获取国际象棋对战网站Chess.com五千万用户信息
字数 1242 2025-08-15 21:33:59
Chess.com 会话劫持漏洞分析与复现指南
漏洞概述
本漏洞存在于知名国际象棋对战网站 Chess.com,通过其消息交互机制可获取其他用户的 session_id,实现账户劫持。该漏洞影响 Chess.com 全球约 5000 万注册用户,包括管理员账户。
漏洞发现背景
- 初始测试始于 2019 年底,最初仅发现一个反射型 XSS 漏洞
- 通过"Connect to Google"功能可利用 XSS 实现账户绑定后门
- 后续测试转向移动端应用,发现新的攻击面
漏洞技术细节
关键发现点
-
API 端点发现:
- 移动端应用使用
api.chess.com子域名进行通信 - 请求格式示例:
GET /v1/users/validate-username/test?signed=iOS3.9.7-047a13c395ee9c059f98f1af74bb11c802047d47 Host: api.chess.com
- 移动端应用使用
-
消息交互泄露:
- 与用户交互时(如发送消息给用户"hikaru")的请求:
GET /v1/users?loginToken=98a16127fb8cb4dc97a3a02103706890&username=hikaru&signed=iOS3.9.7-7b9f1383b669614302e9503ba7db81875e440d7e Host: api.chess.com - 响应中包含目标用户的注册邮箱
- 与用户交互时(如发送消息给用户"hikaru")的请求:
-
会话ID泄露:
- 在消息或对战交互的响应中发现其他用户的 session_id:
"session_id":"56c5257a0800d.....86d28934868a88" "session_id":"1f3d112b9a3f.....dbbf19438fcd8d" - 这些 session_id 与 PHPSESSID cookie 值一致
- 在消息或对战交互的响应中发现其他用户的 session_id:
漏洞利用流程
- 通过移动应用与目标用户进行消息交互或对战
- 捕获 API 响应,提取目标用户的 session_id
- 将获取的 session_id 设置为自己的 PHPSESSID cookie
- 访问目标账户(普通用户或管理员界面)
管理员账户劫持
- 获取管理员(如 Daniel Rensch)的 session_id
- 将 cookie 作用域设置为
.chess.com - 访问
https://admin.chess.com进入管理后台
漏洞影响
- 完全账户劫持能力
- 可修改用户个人信息和象棋积分排名
- 可访问管理后台(对管理员账户)
- 影响 Chess.com 全部约 5000 万用户
修复建议
- 服务端应对 session_id 进行严格隔离,确保不会在客户端交互中泄露
- 实现完善的会话管理机制,包括:
- 会话绑定 IP/设备指纹
- 会话超时设置
- 敏感操作重新认证
- API 响应中过滤敏感信息(session_id、邮箱等)
- 加强移动端 API 的请求签名验证
漏洞处理时间线
- 漏洞上报后 1 小时内得到响应
- 2 小时内完成修复
学习要点
- 测试范围扩展:从 Web 端转向移动端可能发现新的攻击面
- API 安全:移动应用通常依赖 API,这些接口可能包含 Web 端未暴露的功能
- 会话管理:session_id 等同于身份凭证,必须严格保护
- 信息泄露:即使是"无害"的信息泄露(如邮箱)也可能成为更大攻击链的一部分
复现注意事项
- Chess.com 已修复此漏洞,请勿在实际环境中测试
- 漏洞挖掘应遵循道德准则,仅在授权范围内进行测试
- Chess.com 设有官方漏洞众测项目,可通过合法渠道参与
扩展思考
- 如何自动化检测此类会话泄露漏洞?
- 除了 session_id,还有哪些敏感信息可能通过 API 泄露?
- 移动应用与 Web 应用在安全防护上有哪些差异需要考虑?
- 如何设计更安全的会话管理机制?