
T3 Código 61c3794c origem remanescente. A atualização do wsTicket ignora a Origem. Cookie sem Origem é aceito. Cookie com Origem hostil é rejeitado. Laboratório de loopback.
Um ticket de socket na URL não se importa com qual site o solicitou. Sessões por cookie com Origin hostil são rejeitadas. Sessões por cookie sem cabeçalho Origin são aceitas. Bearer tokens ignoram Origin de propósito. O cookie de sessão é SameSite=Lax, que é o que atualmente impede um WebSocket por cookie entre sites.
Classe: Origin remanescente
Alcance: Local / portador do ticket (Origin hostil em wsTicket; Origin ausente em cookies)
T3 Code 61c3794c - Ping
| ID | ainda sem CVE |
| Classe | Origin remanescente |
| Alcance | Local (ticket na URL de upgrade, ou um cliente por cookie que omite Origin) |
| CWE | CWE-346 / CWE-200 |
| CVSS | Baixo: 3.1 CVSS:3.1/AV:N/AC:H/PR:L/UI:R/S:U/C:L/I:L/A:N |
| Produto | T3 Code |
| Afetado | 61c3794c32b0eeebfac09add43e403618c65d2d7 |
| Autenticação | wsTicket válido ou cookie de sessão do navegador |
| Licença | GNU Affero GPL v3.0 |
| Laboratório | authenticateWebSocketUpgrade de produção na camada de teste Effect |
Requer um wsTicket ativo ou um cookie que o navegador anexará. Cookies Lax não são anexados a um handshake WebSocket entre sites nos navegadores atuais. Um ticket na query string é o caminho que ignora o Origin por completo.
| Privilégio | Método / sink | Reconhecimento / integridade / disponibilidade | Comprovado em laboratório ou inferido |
|---|---|---|---|
Autenticar um upgrade /ws com um ticket e um Origin hostil | authenticateWebSocketUpgrade, query wsTicket | Integridade (sessão no socket) | Comprovado em laboratório. ticket-hostile-origin=accepted, Origin https://evil.example |
| Autenticar um upgrade por cookie sem Origin | fallback de cookie via isBrowserOriginAllowed (origin === undefined retorna true) | Integridade | Comprovado em laboratório. cookie-missing-origin=accepted |
| Autenticar um upgrade Bearer a partir de um Origin hostil | mesmo autenticador, cabeçalho Authorization | Integridade | Comprovado em laboratório. bearer-hostile-origin=accepted (teste do produto; não é cookie) |
| Controle negativo: cookie + Origin hostil | Origin http://192.168.1.50:8080 | n/a | Comprovado em laboratório. rejeitado ServerAuthInvalidCredentialError |
| Controle negativo: cookie + Origin confiável | Origin do mesmo host | n/a | Comprovado em laboratório. aceito |
Permanece fechado neste remanescente
| Eixo | Método / sink | Por que está fechado |
|---|---|---|
| Integridade | WebSocket por cookie a partir de um site aleatório com cabeçalho Origin | isBrowserOriginAllowed rejeita; SameSite=Lax também retém o cookie |
| Integridade | /ws não autenticado | credencial ausente falha |
| Integridade | CSRF por cookie entre sites nos navegadores atuais | Cookies.set sameSite: "lax" em apps/server/src/auth/http.ts |
A linha de auditoria "nenhuma verificação de Origin em qualquer lugar do caminho de upgrade" é ampla demais. Origin hostil com cookie é rejeitado neste pin. O remanescente é o caminho do ticket e o ramo de cookie sem Origin.
GET /ws chama authenticateWebSocketUpgrade. Se wsTicket estiver presente, a função verifica o ticket e retorna antes de isBrowserOriginAllowed. O fallback de cookie chama essa função. Eu emiti um ticket e uma sessão por cookie na camada de teste EnvironmentAuth e enviei a matriz de Origin pela função de produção.
Caminhos errados: relatar "nenhuma verificação de Origin" para upgrades por cookie (Origin hostil é rejeitado).
python3 t3code-websocket-ticket-origin-Abraxas-Labs.py
ou:
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
Execute isBrowserOriginAllowed também no caminho do ticket, ou vincule os tickets à Origin que os emitiu. Trate uma Origin ausente como falha para credenciais de cookie em vez de aprovação. Adicione uma lista de permissões explícita de Origin no upgrade (devOrigin, t3code://app, hosts de túnel configurados). Mantenha SameSite=Lax (ou Strict).
61c3794c32b0eeebfac09add43e403618c65d2d7EnvironmentAuth.authenticateWebSocketUpgradeGNU Affero GPL v3.0. Consulte LICENSE. Apenas laboratório em loopback. Sem garantias.
Abraxas Labs [email protected]
Por favor, credite o CVE ao Abraxas Labs.