- несанкционированный удалённый контроль локальной машины
- перехват/повтор токенов сессии (access/refresh)
- утечка чувствительных данных через логи или запросы к модели
- злоупотребление локальным Anchor WebSocket/API
- поддерживаются passkey (WebAuthn), TOTP и basic-flow (в зависимости от провайдера/
AUTH_MODE) - access token и refresh token выдаются раздельно
- refresh-токены ротируются при обновлении сессии (
/auth/refresh) - серверная проверка сессии позволяет отзывать токены через
/auth/logout
- основной путь: device-code (
/auth/device/code->/auth/device/authorise->/auth/device/token) - Anchor получает
anchorAccessToken+anchorRefreshTokenи обновляет через/auth/device/refresh - поддерживается legacy JWT secret flow для обратной совместимости
- креды сохраняются в
~/.codex-remote/credentials.jsonс правами0600
По умолчанию локальный сокет Anchor не открыт для произвольного внешнего доступа.
- можно требовать явный токен через
ANCHOR_WS_TOKEN - без токена разрешаются только loopback/private адреса
ANCHOR_WS_ALLOW_PUBLIC=1снимает ограничение (рискованный режим)
- внешний трафик идёт по HTTPS/WSS
- Anchor инициирует исходящее подключение к control plane
- входящие порты на локальной машине для Orbit не требуются
- origin проверяется относительно
PASSKEY_ORIGIN/ALLOWED_ORIGIN localhostи127.0.0.1допускаются для dev-окружения- ответы Orbit включают
X-Content-Type-Options: nosniffиX-Frame-Options: DENY
- маршрутизация событий выполняется по
threadIdи подпискам сокетов - Cloudflare-провайдер использует Durable Object на пользователя
- состояние сессий хранится на стороне backend (D1 или KV, в зависимости от провайдера)
- web токены хранятся в
localStorage; компрометация устройства компрометирует сессию - токены в query string WebSocket (
?token=) потенциально могут попадать в инфраструктурные логи - нет сквозного E2E-шифрования между web client и Anchor (TLS завершается на edge/backend)
- credentials-файл Anchor содержит чувствительные токены/секреты в plaintext
- отдельный rate limiting для auth/ws endpoint’ов на уровне приложения не реализован
- автоматическое разрешение localhost-origin удобно для dev, но требует осторожности на shared-машинах
- регулярно ротируйте секреты (
CODEX_REMOTE_WEB_JWT_SECRET,CODEX_REMOTE_ANCHOR_JWT_SECRETпри legacy-flow) - используйте
codex-remote logout//auth/logoutпри смене устройства или подозрении на компрометацию - не включайте
ANCHOR_WS_ALLOW_PUBLIC=1без необходимости - не храните в переписке с агентом секреты и приватные ключи
- ограничивайте CORS origin’ы production-доменами
- добавить rate limiting на auth/device/ws endpoint’ы
- внедрить опциональное E2E-шифрование полезной нагрузки между клиентом и Anchor
- добавить централизованную маскировку секретов в логах