Skip to content

fix: validate Origin header on WebSocket /run_live endpoint#4951

Open
YouFoxGirl wants to merge 2 commits intogoogle:mainfrom
YouFoxGirl:fix-4947-websocket-origin
Open

fix: validate Origin header on WebSocket /run_live endpoint#4951
YouFoxGirl wants to merge 2 commits intogoogle:mainfrom
YouFoxGirl:fix-4947-websocket-origin

Conversation

@YouFoxGirl
Copy link

Fixes #4947

Summary

WebSocket upgrades are not protected by FastAPI's CORS middleware, so any webpage could establish a WebSocket connection to the local ADK dev server and chain it with /builder/save to achieve RCE.

The fix adds explicit Origin validation to the /run_live WebSocket handler:

  • When allow_origins is configured: accept only origins in the list or matching a regex pattern (consistent with CORS middleware behavior)
  • When allow_origins is not configured: accept only same-origin or no-Origin-header requests (non-browser clients), rejecting cross-origin

Changes

  • adk_web_server.py: Parse and store allow_origins at app creation time for WebSocket reuse
  • /run_live WebSocket handler: validate Origin header before accepting the connection, close with code 1008 if rejected

Security Impact

Prevents CSRF-to-RCE attack chain where a malicious webpage could: upload a malicious agent.py via /builder/save, create a session, and trigger code execution via WebSocket.

Added 4 unit tests covering same-origin, cross-origin, configured origins, and unlisted origins.

FoxClaw Bot added 2 commits March 22, 2026 10:30
Use except Exception: instead of bare except: in the live agent API
sample.
WebSocket upgrades are not protected by CORS middleware, so any webpage
could establish a WebSocket connection to the local ADK dev server and
chain it with /builder/save to achieve RCE.

The fix adds explicit Origin validation to the /run_live WebSocket handler:
- When allow_origins is configured: accept only origins in the list or
  matching a regex pattern (consistent with CORS middleware behavior)
- When allow_origins is not configured: accept only same-origin or
  no-Origin-header requests (non-browser clients), rejecting cross-origin

Fixes google#4947
@google-cla
Copy link

google-cla bot commented Mar 22, 2026

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

WebSocket /run_live endpoint lacks Origin validation, enabling CSRF-to-RCE

1 participant