
T3 Code 61c3794c origin leftover. Обновление wsTicket игнорирует Origin. Cookie без Origin принимается. Cookie с враждебным Origin отклоняется. Лаборатория loopback.
Тикет сокета в URL не заботится о том, какой сайт его запросил. Cookie-сессии с враждебным Origin отклоняются. Cookie-сессии без заголовка Origin принимаются. Bearer-токены намеренно игнорируют Origin. Сессионная cookie имеет SameSite=Lax, и именно это сейчас блокирует межсайтовый cookie WebSocket.
Класс: Origin leftover
Доступ: Локальный / держатель тикета (враждебный Origin на wsTicket; отсутствующий Origin на cookie)
T3 Code 61c3794c - Ping
| ID | пока нет CVE |
| Класс | Origin leftover |
| Доступ | Локальный (тикет в URL апгрейда или cookie-клиент, опускающий 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 или сессионная cookie браузера |
| Лицензия | GNU Affero GPL v3.0 |
| Лаборатория | production authenticateWebSocketUpgrade на тестовом слое Effect |
Требуется живой wsTicket или cookie, которую браузер прикрепит. Lax-cookie не прикрепляются к межсайтовому рукопожатию WebSocket в текущих браузерах. Тикет в строке запроса — это путь, который полностью обходит Origin.
| Привилегия | Метод / sink | Разведка / целостность / доступность | Доказано в лаборатории или выведено |
|---|---|---|---|
Аутентифицировать апгрейд /ws с тикетом и враждебным Origin | authenticateWebSocketUpgrade, запрос wsTicket | Целостность (сессия на сокете) | Доказано в лаборатории. ticket-hostile-origin=accepted, Origin https://evil.example |
| Аутентифицировать cookie-апгрейд без Origin | cookie-фолбэк через isBrowserOriginAllowed (origin === undefined возвращает true) | Целостность | Доказано в лаборатории. cookie-missing-origin=accepted |
| Аутентифицировать Bearer-апгрейд с враждебного Origin | тот же аутентификатор, заголовок Authorization | Целостность | Доказано в лаборатории. bearer-hostile-origin=accepted (тест продукта; не cookie) |
| Негативный контроль: cookie + враждебный Origin | Origin http://192.168.1.50:8080 | н/д | Доказано в лаборатории. отклонено ServerAuthInvalidCredentialError |
| Негативный контроль: cookie + доверенный Origin | Origin того же хоста | н/д | Доказано в лаборатории. принято |
Остаётся закрытым на этом leftover
| Ось | Метод / sink | Почему закрыто |
|---|---|---|
| Целостность | Cookie WebSocket с произвольного сайта с заголовком Origin | isBrowserOriginAllowed отклоняет; SameSite=Lax также не передаёт cookie |
| Целостность | Неаутентифицированный /ws | отсутствие учётных данных приводит к ошибке |
| Целостность | Межсайтовый cookie CSRF в текущих браузерах | Cookies.set sameSite: "lax" в apps/server/src/auth/http.ts |
Строка аудита «нигде на пути апгрейда нет проверки Origin» слишком широка. Враждебный Origin для cookie отклоняется на этом пине. Остаток — это путь тикета и ветка cookie без Origin.
GET /ws вызывает authenticateWebSocketUpgrade. Если присутствует wsTicket, функция проверяет тикет и возвращается до isBrowserOriginAllowed. Cookie-фолбэк действительно вызывает её. Я выпустил тикет и cookie-сессию на тестовом слое EnvironmentAuth и прогнал матрицу Origin через production-функцию.
Неверные пути: сообщение об «отсутствии проверки Origin» для cookie-апгрейдов (враждебный 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 ошибкой для cookie-учётных данных, а не успехом. Добавьте явный список разрешённых Origin при апгрейде (devOrigin, t3code://app, настроенные хосты туннелей). Сохраните SameSite=Lax (или Strict).
61c3794c32b0eeebfac09add43e403618c65d2d7EnvironmentAuth.authenticateWebSocketUpgradeGNU Affero GPL v3.0. См. LICENSE. Только для локальной лаборатории. Без гарантий.
Abraxas Labs [email protected]
Пожалуйста, указывайте авторство CVE за Abraxas Labs.