
T3 Code 61c3794c origin leftover. wsTicket 업그레이드는 Origin을 무시합니다. Cookie에 Origin이 없으면 허용됩니다. Cookie에 적대적 Origin이 있으면 거부됩니다. 루프백 랩.
URL에 담긴 소켓 티켓은 어떤 웹사이트가 그것을 요청했는지 신경 쓰지 않는다. 적대적인 Origin을 가진 쿠키 세션은 거부된다. Origin 헤더가 없는 쿠키 세션은 허용된다. Bearer 토큰은 의도적으로 Origin을 무시한다. 세션 쿠키는 SameSite=Lax이며, 이것이 현재 교차 사이트 쿠키 WebSocket을 막고 있는 이유다.
분류: Origin 잔여 결함
도달 범위: 로컬 / 티켓 보유자 (wsTicket에 대한 적대적 Origin, 쿠키에 대한 누락된 Origin)
T3 Code 61c3794c - Ping
| ID | 아직 CVE 없음 |
| 분류 | Origin 잔여 결함 |
| 도달 범위 | 로컬 (업그레이드 URL의 티켓, 또는 Origin을 생략하는 쿠키 클라이언트) |
| 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 또는 브라우저 세션 쿠키 |
| 라이선스 | GNU Affero GPL v3.0 |
| 실험 환경 | Effect 테스트 레이어의 프로덕션 authenticateWebSocketUpgrade |
활성 wsTicket 또는 브라우저가 첨부할 쿠키가 필요하다. 현재 브라우저에서는 Lax 쿠키가 교차 사이트 WebSocket 핸드셰이크에 첨부되지 않는다. 쿼리 문자열의 티켓은 Origin을 완전히 건너뛰는 경로다.
| 권한 | 메서드 / 싱크 | 정찰 / 무결성 / 가용성 | 실험실 입증 또는 추론 |
|---|---|---|---|
티켓과 적대적 Origin으로 /ws 업그레이드 인증 | authenticateWebSocketUpgrade, wsTicket 쿼리 | 무결성 (소켓상의 세션) | 실험실 입증. ticket-hostile-origin=accepted, Origin https://evil.example |
| Origin 없이 쿠키 업그레이드 인증 | isBrowserOriginAllowed를 통한 쿠키 폴백 (origin === undefined는 true 반환) | 무결성 | 실험실 입증. cookie-missing-origin=accepted |
| 적대적 Origin에서 Bearer 업그레이드 인증 | 동일 인증기, Authorization 헤더 | 무결성 | 실험실 입증. bearer-hostile-origin=accepted (제품 테스트, 쿠키 아님) |
| 음성 대조군: 쿠키 + 적대적 Origin | Origin http://192.168.1.50:8080 | 해당 없음 | 실험실 입증. ServerAuthInvalidCredentialError로 거부됨 |
| 음성 대조군: 쿠키 + 신뢰할 수 있는 Origin | 동일 호스트 Origin | 해당 없음 | 실험실 입증. 허용됨 |
이 잔여 결함에서 닫힌 상태로 유지되는 항목
| 축 | 메서드 / 싱크 | 닫힌 이유 |
|---|---|---|
| 무결성 | Origin 헤더를 가진 임의 웹사이트로부터의 쿠키 WebSocket | isBrowserOriginAllowed가 거부함; SameSite=Lax도 쿠키를 보류함 |
| 무결성 | 인증되지 않은 /ws | 자격 증명 누락 시 실패 |
| 무결성 | 현재 브라우저에서의 교차 사이트 쿠키 CSRF | apps/server/src/auth/http.ts의 Cookies.set sameSite: "lax" |
"업그레이드 경로 어디에도 Origin 검사가 없다"는 감사 문구는 너무 광범위하다. 이 핀에서는 적대적 Origin 쿠키가 거부된다. 잔여 결함은 티켓 경로와 Origin 누락 쿠키 분기다.
GET /ws는 authenticateWebSocketUpgrade를 호출한다. wsTicket이 존재하면 함수는 티켓을 검증하고 isBrowserOriginAllowed 이전에 반환한다. 쿠키 폴백은 이를 실제로 호출한다. EnvironmentAuth 테스트 레이어에서 티켓과 쿠키 세션을 발급하고 프로덕션 함수를 통해 Origin 매트릭스를 전송했다.
잘못된 방향: 쿠키 업그레이드에 대해 "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
티켓 경로에서도 isBrowserOriginAllowed를 실행하거나, 티켓을 이를 발급한 Origin에 바인딩하세요. 쿠키 자격 증명의 경우 누락된 Origin을 통과가 아닌 실패로 처리하세요. 업그레이드 시 명시적인 Origin 허용 목록(devOrigin, t3code://app, 구성된 터널 호스트)을 추가하세요. SameSite=Lax(또는 Strict)를 유지하세요.
61c3794c32b0eeebfac09add43e403618c65d2d7EnvironmentAuth.authenticateWebSocketUpgradeGNU Affero GPL v3.0. LICENSE를 참조하세요. 루프백 실험실 전용입니다. 보증하지 않습니다.
Abraxas Labs [email protected]
CVE는 Abraxas Labs에 크레딧을 부여해 주세요.