用途
hunt-websocket 是一个 WebSocket 安全测试技能,用于系统性地发现和验证 WebSocket 相关漏洞。它面向渗透测试与漏洞挖掘场景,围绕握手层、消息层和协议层(socket.io/Engine.IO、SignalR、Phoenix Channels)组织测试流程。
主要能力
技能覆盖以下漏洞类别:
- CSWSH(跨站 WebSocket 劫持):当握手通过环境 Cookie 认证、握手缺少不可预测的每连接令牌、且服务器不强制校验 Origin 时,攻击者页面可以以受害者身份打开 WebSocket 并读取其消息、PII 或令牌。若流中携带会话/刷新/CSRF 令牌,可升级为账户接管(ATO)。
- 消息级认证缺失:握手已认证但单个 WS 帧未重新授权,导致特权消息(如 deleteUser、getSecretConfig)被接受。
- 消息篡改:在交易、游戏、结账类应用中修改传输中的帧(价格、数量、userId、金额),造成财务欺诈。
- socket.io 命名空间/房间越权:连接到特权命名空间或加入他人房间而缺少权限检查,导致跨租户实时数据泄露。
- 握手层 Upgrade 走私:构造畸形的 Upgrade/Connection/Sec-WebSocket-* 握手,使前端代理与源站对是否发生升级产生分歧,形成请求走私隧道。
技能还包含签名消息重放、业务逻辑滥用(状态机跳过、速率限制绕过)等测试方向。
使用方式
技能按阶段推进:
- 发现 WebSocket 端点:通过 grep JS 文件、爬取 URL、探测握手(101 表示支持升级)、socket.io 轮询握手、扫描非标准端口等方式枚举端点。
- CSWSH 验证:需同时满足三个条件(Cookie 认证握手、无每连接令牌、不强制 Origin)。用 wscat 探测 Origin 强制情况,再在攻击者源上托管 PoC 页面,在受害者已登录的浏览器中打开,确认攻击者 JS 能收到受害者数据。
- 消息级认证测试:用无 Cookie 或低权限会话发送高权限动作,验证是否产生真实效果。
- 消息篡改:在 Burp 中拦截并编辑帧,确认篡改值在服务端持久化。
- 命名空间/房间越权:通过 socket.io CONNECT 包(如 40/admin,)加入特权命名空间,再发送 EVENT 包(42)加入他人房间。
- 握手层 Upgrade 走私:使用 Burp Repeater 或 HTTP Request Smuggler 扩展,逐一切换握手变量,比较前端与源站行为。
- socket.io/Engine.IO 细节:指纹识别版本并检查对应版本的安全公告,注意命名空间选择是协议消息而非 URL 参数。
工具方面,技能推荐使用 wscat(npm install -g wscat)、websocat(brew install websocat)、Burp Suite Pro(WebSockets 历史、HTTP Request Smuggler 扩展、Collaborator 用于带外证明)以及 Burp MCP 相关接口。
适用场景
适用于对使用 WebSocket 的 Web 应用进行安全评估,尤其是实时协作、聊天、通知、交易、游戏、结账等场景。技能提供了链式影响表,说明各类发现可升级到的危害等级(如 CSWSH + 流中令牌 → ATO 严重;无消息级认证 → 权限提升严重;消息篡改 → 财务欺诈严重)。
限制
技能强调误报排除:仅收到 101 响应不构成 CSWSH 发现;需验证收到的数据属于不同账户,并通过 OAST 监听器带外记录接收证据。特权动作必须产生真实效果,被接受但静默忽略的帧不算发现。若握手携带每连接令牌,则 CSWSH 不可跨站利用。握手走私需通过时序/差分探针证明失步并展示真实影响,不能仅凭单个模糊响应确认。技能中仅明确断言了四个 CVE 编号(CVE-2020-7662、CVE-2024-37890 等),其余不确定标识符的情况要求仅描述技术而不引用编号。