{"version":"2.1.225","anchor":"device-bridge-websocket-urls-are-checked-against-a-host-allo","canonical_anchor":"device-bridge-websocket-urls-are-checked-against-a-host-allo","heading":"Device bridge websocket URLs are checked against a host allowlist","tier":"use","area":"Sessions","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.225\/e\/device-bridge-websocket-urls-are-checked-against-a-host-allo","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.225","markdown":"### Device bridge websocket URLs are checked against a host allowlist\n\nThe device bridge now only connects to approved hosts, with local overrides limited to localhost.\n\n**What**\n\nThe device-registration bridge validates its dial URL before connecting, so it cannot be pointed at an arbitrary websocket host.\n\n**Details**\n\n- new `isAllowedUrl` check requires `wss:`, no username or password in the URL, and a hostname in {bridge.claudeusercontent.com, bridge-staging.claudeusercontent.com}\n- an operator-overridden base URL is allowed only through a separate same-origin check, which permits `ws:` only for localhost, 127.0.0.1 and [::1]\n- no such check existed in 2.1.224\n- the bridge only runs when non-essential egress is allowed, the provider is first-party, and the `allow_remote_sessions` policy permits it; the base URL is overridable via `CLAUDE_REMOTE_TOOLS_BRIDGE_URL`\n\n**Evidence**\n\n`bridge-staging.claudeusercontent.com`\n\n- Area: Sessions\n- Names: `CLAUDE_REMOTE_TOOLS_BRIDGE_URL`\n- Tier: Use it now\n- Useful: 3\/5\n- Signal: 0\/5"}