跨站WebSocket劫持
在这一节,我们将讲解跨站WebSocket劫持(CSWSH),描述攻击的影响,并阐明如何执行跨站WebSocket劫持攻击。
什么是跨站WebSocket劫持?
跨站WebSocket劫持(也被称为跨域WebSocket劫持)涉及WebSocket握手上的跨站请求伪造漏洞。当WebSocket握手请求仅依赖于HTTP Cookies进行会话处理,且不包含任何CSRF令牌或其他不可预测的值时,就会出现跨站WebSocket劫持。
攻击者可以在自己的域上创建一个恶意网页,该页面与易受攻击的应用程序建立跨站WebSocket连接。应用程序将在受害用户与应用程序的会话环境中处理该连接。
然后,攻击者的页面就可以通过这个连接向服务器发送任意消息,并读取从服务器返回的消息内容。这意味着,与常规的CSRF不同,攻击者能够与被攻击的应用程序进行双向交互。
跨站WebSocket劫持有什么影响?
一次成功的跨站WebSocket劫持攻击通常会使攻击者能够:
**以受害用户的身份执行未经授权的操作。**如同常规的CSRF,攻击者可以向服务器端应用程序发送任意消息。如果应用程序使用客户端生成的WebSocket消息来执行敏感操作,那么攻击者就可以跨域生成适当的消息并触发这些操作。
**获取用户可以访问的敏感数据。**与常规CSRF不同,跨站WebSocket劫持使攻击者可以通过被劫持的WebSocket与易受攻击的应用程序进行双向交互。如果应用程序使用服务器生成的WebSocket消息返回敏感数据给用户,那么攻击者就可以拦截这些消息并获取受害用户的数据。
执行跨站WebSocket劫持攻击
由于跨站WebSocket劫持攻击本质上是WebSocket握手上的CSRF漏洞,因此,执行攻击的第一步是检查应用程序执行的WebSocket握手,并确定它们是否受到CSRF保护。
就CSRF攻击的正常条件而言,你通常需要找到一个握手消息,该消息仅依赖于HTTP Cookies进行会话处理,并且在请求参数中不使用任何令牌或其他不可预测的值。
例如,以下的WebSocket握手请求很可能会受到CSRF的攻击,因为唯一的会话令牌是在Cookie中传输的:
注意
Sec-WebSocket-Key
标头包含一个随机值,用于防止来自缓存代理的错误,不用于认证或会话处理。
如果WebSocket握手请求易受CSRF攻击,那么攻击者的网页就可以执行跨站请求,以在易受攻击的站点上打开一个WebSocket。接下来的攻击步骤完全取决于应用程序的逻辑以及它使用WebSocket的方式。攻击可能包括:
发送WebSocket消息以代表受害用户执行未授权的操作。
发送WebSocket消息以获取敏感数据。
有时候,仅等待包含敏感数据的传入消息到达。
LAB
Last updated