If you're running Ray with the dashboard exposed to any network (--dashboard-host=0.0.0.0), unauthenticated DELETE requests can kill your entire AI serving layer or wipe running jobs — no credentials needed, exploitable via DNS rebinding from any browser. Patch to Ray 2.54.0 immediately and restrict dashboard access to localhost or a dedicated management network. There is no legitimate reason to leave the dashboard network-exposed without authentication enabled.
Affected Systems
| Package | Ecosystem | Vulnerable Range | Patched |
|---|---|---|---|
| ray | pip | < 2.54.0 | 2.54.0 |
Do you use ray? You're affected.
Severity & Risk
Recommended Action
- 1. PATCH: Upgrade all Ray deployments to 2.54.0 immediately — the fix gates DELETE on the same browser-origin middleware as POST/PUT. 2. NETWORK: Remove --dashboard-host=0.0.0.0; bind to 127.0.0.1 or a restricted management interface. 3. AUTH: Enable dashboard token authentication via --dashboard-token-length or RAY_DASHBOARD_TOKEN environment variable. 4. KUBERNETES: Apply NetworkPolicies restricting ports 8265 and 52365 to authorized management pods and IPs only; audit existing NodePort or LoadBalancer services exposing Ray. 5. DETECTION: Alert on DELETE requests to /api/serve/applications/ and /api/jobs/* from unexpected source IPs in your API gateway or service mesh logs. 6. AUDIT: Verify no Ray dashboard ports are reachable from the internet or untrusted VLANs in any environment.
Classification
Compliance Impact
This CVE is relevant to:
Technical Details
NVD Description
### Summary Ray’s dashboard HTTP server blocks browser-origin POST/PUT but does not cover DELETE, and key DELETE endpoints are unauthenticated by default. If the dashboard/agent is reachable (e.g., --dashboard-host=0.0.0.0), a web page via DNS rebinding or same-network access can issue DELETE requests that shut down Serve or delete jobs without user interaction. This is a drive-by availability impact. ### Details - Middleware: python/ray/dashboard/http_server_head.py#get_browsers_no_post_put_middleware only checks POST/PUT via is_browser_request (UA/Origin/Sec-Fetch heuristics). DELETE is not gated. - Endpoints lacking browser protection/auth by default: - python/ray/dashboard/modules/serve/serve_head.py: @routes.delete("/api/serve/applications/") calls serve.shutdown(). - python/ray/dashboard/modules/job/job_head.py: @routes.delete("/api/jobs/{job_or_submission_id}"). - python/ray/dashboard/modules/job/job_agent.py: @routes.delete("/api/job_agent/jobs/{job_or_submission_id}") (not wrapped with deny_browser_requests either). - Dashboard token auth is optional and off by default; binding to 0.0.0.0 is common for remote access. ### PoC Prereqs: dashboard reachable (e.g., ray start --head --dashboard-host=0.0.0.0), no token auth. 1. Start Serve (or have jobs present). 2. From any browser-reachable origin (DNS rebinding or same-LAN page), issue a DELETE fetch: ``` fetch("http://<dashboard-host>:8265/api/serve/applications/", { method: "DELETE", headers: { "User-Agent": "Mozilla/5.0" } // browsers set this automatically }); ``` Result: Serve shuts down. 3) Similarly, delete jobs: ` fetch("http://<dashboard-host>:8265/api/jobs/<job_or_submission_id>", { method: "DELETE" });` ` fetch("http://<dashboard-agent>:52365/api/job_agent/jobs/<job_or_submission_id>", { method: "DELETE" });` Browsers will send the Mozilla UA and Origin/Sec-Fetch headers, but DELETE is not blocked by the middleware, so the requests succeed. ### Impact - Availability loss: Serve shutdown; job deletion. Triggerable via drive-by browser requests if the dashboard/agent ports are reachable and auth is disabled (default). - No code execution from this vector, but breaks isolation/trust assumptions for “developer-only” endpoints. ### Fix The fix for this vulnerability is to update to Ray 2.54.0 or higher. Fix PR: https://github.com/ray-project/ray/pull/60526
Exploitation Scenario
An attacker on the same corporate LAN — or executing a DNS rebinding attack from the internet — sets up a malicious web page. An employee visits the page while connected to a network where Ray's dashboard port 8265 is reachable. The page silently issues fetch('http://ray-cluster:8265/api/serve/applications/', {method:'DELETE'}). Ray Serve shuts down instantly, taking all AI inference endpoints offline. The attack requires zero credentials, leaves minimal traces, and executes in under 100ms. In the DNS rebinding variant, no LAN access is needed — any internet-connected employee who visits the malicious site while behind a corporate network with an exposed Ray dashboard can be the unwitting trigger, requiring no attacker presence on-premises.
Weaknesses (CWE)
CVSS Vector
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:L/A:H References
- github.com/advisories/GHSA-q5fh-2hc8-f6rq
- github.com/ray-project/ray/commit/0fda8b824cdc9dc6edd763bb28dfd7d1cc9b02a4
- github.com/ray-project/ray/pull/60526
- github.com/ray-project/ray/releases/tag/ray-2.54.0
- github.com/ray-project/ray/security/advisories/GHSA-q5fh-2hc8-f6rq
- nvd.nist.gov/vuln/detail/CVE-2026-27482