挖洞经验 | 获取国际象棋对战网站Chess.com五千万用户信息
字数 1242 2025-08-15 21:33:59

Chess.com 会话劫持漏洞分析与复现指南

漏洞概述

本漏洞存在于知名国际象棋对战网站 Chess.com,通过其消息交互机制可获取其他用户的 session_id,实现账户劫持。该漏洞影响 Chess.com 全球约 5000 万注册用户,包括管理员账户。

漏洞发现背景

  • 初始测试始于 2019 年底,最初仅发现一个反射型 XSS 漏洞
  • 通过"Connect to Google"功能可利用 XSS 实现账户绑定后门
  • 后续测试转向移动端应用,发现新的攻击面

漏洞技术细节

关键发现点

  1. API 端点发现

    • 移动端应用使用 api.chess.com 子域名进行通信
    • 请求格式示例:
      GET /v1/users/validate-username/test?signed=iOS3.9.7-047a13c395ee9c059f98f1af74bb11c802047d47
      Host: api.chess.com
      
  2. 消息交互泄露

    • 与用户交互时(如发送消息给用户"hikaru")的请求:
      GET /v1/users?loginToken=98a16127fb8cb4dc97a3a02103706890&username=hikaru&signed=iOS3.9.7-7b9f1383b669614302e9503ba7db81875e440d7e
      Host: api.chess.com
      
    • 响应中包含目标用户的注册邮箱
  3. 会话ID泄露

    • 在消息或对战交互的响应中发现其他用户的 session_id:
      "session_id":"56c5257a0800d.....86d28934868a88"
      "session_id":"1f3d112b9a3f.....dbbf19438fcd8d"
      
    • 这些 session_id 与 PHPSESSID cookie 值一致

漏洞利用流程

  1. 通过移动应用与目标用户进行消息交互或对战
  2. 捕获 API 响应,提取目标用户的 session_id
  3. 将获取的 session_id 设置为自己的 PHPSESSID cookie
  4. 访问目标账户(普通用户或管理员界面)

管理员账户劫持

  1. 获取管理员(如 Daniel Rensch)的 session_id
  2. 将 cookie 作用域设置为 .chess.com
  3. 访问 https://admin.chess.com 进入管理后台

漏洞影响

  • 完全账户劫持能力
  • 可修改用户个人信息和象棋积分排名
  • 可访问管理后台(对管理员账户)
  • 影响 Chess.com 全部约 5000 万用户

修复建议

  1. 服务端应对 session_id 进行严格隔离,确保不会在客户端交互中泄露
  2. 实现完善的会话管理机制,包括:
    • 会话绑定 IP/设备指纹
    • 会话超时设置
    • 敏感操作重新认证
  3. API 响应中过滤敏感信息(session_id、邮箱等)
  4. 加强移动端 API 的请求签名验证

漏洞处理时间线

  • 漏洞上报后 1 小时内得到响应
  • 2 小时内完成修复

学习要点

  1. 测试范围扩展:从 Web 端转向移动端可能发现新的攻击面
  2. API 安全:移动应用通常依赖 API,这些接口可能包含 Web 端未暴露的功能
  3. 会话管理:session_id 等同于身份凭证,必须严格保护
  4. 信息泄露:即使是"无害"的信息泄露(如邮箱)也可能成为更大攻击链的一部分

复现注意事项

  • Chess.com 已修复此漏洞,请勿在实际环境中测试
  • 漏洞挖掘应遵循道德准则,仅在授权范围内进行测试
  • Chess.com 设有官方漏洞众测项目,可通过合法渠道参与

扩展思考

  1. 如何自动化检测此类会话泄露漏洞?
  2. 除了 session_id,还有哪些敏感信息可能通过 API 泄露?
  3. 移动应用与 Web 应用在安全防护上有哪些差异需要考虑?
  4. 如何设计更安全的会话管理机制?
Chess.com 会话劫持漏洞分析与复现指南 漏洞概述 本漏洞存在于知名国际象棋对战网站 Chess.com,通过其消息交互机制可获取其他用户的 session_ id,实现账户劫持。该漏洞影响 Chess.com 全球约 5000 万注册用户,包括管理员账户。 漏洞发现背景 初始测试始于 2019 年底,最初仅发现一个反射型 XSS 漏洞 通过"Connect to Google"功能可利用 XSS 实现账户绑定后门 后续测试转向移动端应用,发现新的攻击面 漏洞技术细节 关键发现点 API 端点发现 : 移动端应用使用 api.chess.com 子域名进行通信 请求格式示例: 消息交互泄露 : 与用户交互时(如发送消息给用户"hikaru")的请求: 响应中包含目标用户的注册邮箱 会话ID泄露 : 在消息或对战交互的响应中发现其他用户的 session_ id: 这些 session_ id 与 PHPSESSID cookie 值一致 漏洞利用流程 通过移动应用与目标用户进行消息交互或对战 捕获 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 应用在安全防护上有哪些差异需要考虑? 如何设计更安全的会话管理机制?