URL 中的 socket ticket 并不关心是哪个网站请求了它。带有恶意 Origin 的 Cookie 会话会被拒绝。没有 Origin 头的 Cookie 会话会被接受。Bearer token 有意忽略 Origin。会话 Cookie 为 SameSite=Lax,这正是目前阻止跨站 Cookie WebSocket 的原因。
类别: Origin 遗留问题
可达性: 本地 / ticket 持有者(wsTicket 上的恶意 Origin;Cookie 上缺失 Origin)
T3 Code 61c3794c - Ping
| ID | 暂无 CVE |
| 类别 | Origin 遗留问题 |
| 可达性 | 本地(升级 URL 中的 ticket,或省略 Origin 的 Cookie 客户端) |
| CWE | CWE-346 / CWE-200 |
| CVSS | 低:3.1 CVSS:3.1/AV:N/AC:H/PR:L/UI:R/S:U/C:L/I:L/A:N |
| 产品 | T3 Code |
| 受影响版本 | 61c3794c32b0eeebfac09add43e403618c65d2d7 |
| 认证 | 有效的 wsTicket 或浏览器会话 Cookie |
| 许可证 | GNU Affero GPL v3.0 |
| 实验环境 | Effect 测试层上的生产 authenticateWebSocketUpgrade |
需要有效的 wsTicket,或浏览器会附带的 Cookie。在当前浏览器中,Lax Cookie 不会附加到跨站 WebSocket 握手。查询字符串中的 ticket 是完全绕过 Origin 的路径。
| 权限 | 方法 / 汇聚点 | 侦察 / 完整性 / 可用性 | 实验验证或推断 |
|---|---|---|---|
使用 ticket 和恶意 Origin 认证 /ws 升级 | authenticateWebSocketUpgrade、wsTicket 查询参数 | 完整性(socket 上的会话) | 实验验证。ticket-hostile-origin=accepted,Origin 为 https://evil.example |
| 使用无 Origin 的 Cookie 升级进行认证 | 通过 isBrowserOriginAllowed 的 Cookie 回退(origin === undefined 返回 true) | 完整性 | 实验验证。cookie-missing-origin=accepted |
| 从恶意 Origin 使用 Bearer 升级进行认证 | 同一认证器,Authorization 头 | 完整性 | 实验验证。bearer-hostile-origin=accepted(产品测试;非 Cookie) |
| 阴性对照:Cookie + 恶意 Origin | Origin http://192.168.1.50:8080 | 不适用 | 实验验证。被拒绝,ServerAuthInvalidCredentialError |
| 阴性对照:Cookie + 受信任 Origin | 同主机 Origin | 不适用 | 实验验证。被接受 |
在此遗留问题上保持关闭
| 维度 | 方法 / 汇聚点 | 为何关闭 |
|---|---|---|
| 完整性 | 来自随机网站且带 Origin 头的 Cookie WebSocket | isBrowserOriginAllowed 拒绝;SameSite=Lax 也会扣留 Cookie |
| 完整性 | 未认证的 /ws | 缺少凭据则失败 |
| 完整性 | 当前浏览器中的跨站 Cookie CSRF | apps/server/src/auth/http.ts 中 Cookies.set 的 sameSite: "lax" |
审计结论“升级路径上任何地方都没有 Origin 检查”过于宽泛。在此版本上,Cookie 的恶意 Origin 会被拒绝。遗留问题是 ticket 路径和缺失 Origin 的 Cookie 分支。
GET /ws 调用 authenticateWebSocketUpgrade。如果存在 wsTicket,该函数会验证 ticket 并在 isBrowserOriginAllowed 之前返回。Cookie 回退确实会调用它。我在 EnvironmentAuth 测试层上铸造了 ticket 和 Cookie 会话,并将 Origin 矩阵通过生产函数发送。
弯路:针对 Cookie 升级报告“没有 Origin 检查”(恶意 Origin 会被拒绝)。
python3 t3code-websocket-ticket-origin-Abraxas-Labs.py
或:
cd lab
./run.sh
IOC cookie-missing-origin=accepted
IOC cookie-hostile-origin=rejected
IOC cookie-trusted-origin=accepted
IOC ticket-hostile-origin=accepted
IOC bearer-hostile-origin=accepted
IOC samesite=lax
SUCCESS T3-F04-WSORIGIN t3f04o6n1
在 ticket 路径上也运行 isBrowserOriginAllowed,或将 ticket 绑定到签发它的 Origin。对于 cookie 凭据,将缺失 Origin 视为失败而非通过。在升级时添加显式的 Origin 允许列表(devOrigin、t3code://app、已配置的隧道主机)。保留 SameSite=Lax(或 Strict)。
61c3794c32b0eeebfac09add43e403618c65d2d7EnvironmentAuth.authenticateWebSocketUpgradeGNU Affero GPL v3.0。参见 LICENSE。仅限回环实验室环境。不提供任何担保。
Abraxas Labs [email protected]
请将 CVE 归功于 Abraxas Labs。