Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate to /api/devices registration
-
DeliveryRegister device with validation-passing endpoint
-
ExploitEndpoint returns HTTP redirect to internal host
-
ExecutionPinned client follows cross-origin redirect, opens TCP
-
ImpactDeliver WebSocket upgrade handshake to internal service
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V4 - API and Web Service URL allowlisting, SSRF prevention
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Credential Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires authenticated access to the device registration endpoint (/api/devices) and the ability to supply an attacker-controlled WebSocket server_url that satisfies Galaxy's URL validation policy but then issues an HTTP redirect (301/302/303/307/308, including same-origin and relative) to an internal address. Affects versions prior to 3.0.9 only. Limiting factors that reduce real-world risk: valid credentials are needed (not unauthenticated); the initial endpoint must pass URL validation before redirecting; the attack is blind with no response body, arbitrary HTTP method, completed AIP session, or cloud-metadata access; and the confirmed effect is limited to opening an internal TCP connection and sending a WebSocket upgrade handshake to reachable internal hosts. |
| Impact | This is a medium-severity (CVSS 6.4) server-side request forgery whose real-world priority is modest rather than urgent. The CVSS vector (AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N) indicates a network-reachable, low-complexity flaw, but PR:L means an attacker must first hold valid credentials for authenticated device registration - not an unauthenticated internet-facing bug. The scope change (S:C) reflects that the forged request crosses from the server into internal hosts, which is the genuinely concerning aspect, but the vendor explicitly bounds the confirmed impact to an internal TCP connection and WebSocket upgrade handshake: no arbitrary HTTP methods, no response-body disclosure, no completed AIP session, and no cloud metadata access. This makes it a blind SSRF usable primarily for internal host/port reachability discovery, which is why C and I are only Low and A is None. No EPSS score, KEV listing, or public POC was provided in the input: this is NOT in CISA KEV and no public exploit was identified at time of analysis. The combination of authentication requirement, blind/limited impact, and niche product footprint means this is a legitimate but lower-priority patch item, not an emergency - prioritize it where UFO/Galaxy is deployed with multiple semi-trusted registered users or internet-exposed registration. |
| Exploit ScenarioDerived | An attacker with credentials to register a device submits a server_url that passes Galaxy's URL validation but, once connected, returns an HTTP redirect (301/302/303/307/308) pointing at an internal address. The pinned websockets.connect() client follows the cross-origin redirect and opens a new TCP connection, delivering a WebSocket upgrade handshake to the internal service before post-handshake peer-IP validation runs. The attack is blind - no response body is returned - and no public exploit was identified at time of analysis. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 06, 2026
Authenticated device registration in Microsoft UFO versions prior to 3.0.9 can be abused to make the server open WebSocket connections to internal hosts, because pinned-address enforcement is applied only to the initial destination while the underlying websockets client still follows HTTP redirects. An attacker with valid credentials who can supply a device server_url that passes Galaxy's URL validation can then have that endpoint return a 301/302/303/307/308 redirect to an internal address, causing a cross-origin TCP connection and WebSocket upgrade handshake to be sent before peer-IP validation runs. The impact is limited to the internal connection and handshake request - no arbitrary HTTP methods, response-body disclosure, completed AIP session, or cloud metadata access - and this is a medium-severity (CVSS 6.4) SSRF whose real-world priority is modest rather than urgent; no public exploit identified at time of analysis and no confirmed active exploitation (CISA KEV).
RemediationAI
Upgrade to Microsoft UFO 3.0.9 or later (https://github.com/microsoft/UFO/releases/tag/v3.0.9), which contains the redirect guard introduced in commit f31fb5ef7d07b7825a03fe34b88f1f21cb5cfd35 ('Reject redirects before the legacy client opens another TCP connection'); see the vendor advisory GHSA-3pgm-xw75-hq27 for full details. If immediate upgrade is not possible, the most effective compensating control is to configure each device server_url to the final ws:// or wss:// endpoint that accepts the WebSocket upgrade directly - for example, where a proxy redirects ws:// to wss://, set the wss:// URL itself - so no redirect is issued; the trade-off is that any endpoint that legitimately relies on redirects (including relative or same-origin ones) will simply fail to connect with 'WebSocket redirects are not allowed for pinned connections', and raising max_retries will not work around it. Do not disable address pinning as a workaround, since that reintroduces the SSRF exposure. Additionally, restrict access to the /api/devices registration endpoint to trusted, authenticated operators (exploitation requires valid credentials, so reducing the population of accounts that can register devices lowers risk), and where feasible enforce an egress policy on the UFO server that blocks outbound WebSocket connections to internal RFC1918/link-local ranges - accepting that this may break legitimate device endpoints hosted on internal networks. Note that the fix only changes behavior for pinned connections; direct transport callers that pass no pinned_addresses retain the upstream library's redirect-following behavior and should be reviewed separately.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The flaw is a server-side request forgery (CWE-918) rooted in the interaction between UFO's AIP WebSocket transport (aip/transport/websocket.py) and the Python 'websockets' library's legacy client (websockets==12.0). Galaxy's device connection manager passes pinned_addresses so outbound device connections are pinned to validated IP addresses, but that pinning was only honored for the initial destination: the legacy websockets.connect() client transparently follows HTTP redirects during the handshake, opening a brand-new TCP connection to the redirect target. Post-handshake peer-IP validation is therefore insufficient, because a redirected server receives and can reject the upgrade request before any peer validation executes. The fix introduces a _PinnedWebSocketConnect subclass of websockets.legacy.client.Connect that overrides handle_redirect() to raise SecurityError, so 301, 302, 303, 307 and 308 responses with a Location header - cross-origin, same-origin, or relative - are refused before another TCP connection is opened, pushing the transport into TransportState.ERROR and raising a ConnectionError containing 'WebSocket redirects are not allowed for pinned connections'. Note that direct transport calls omitting pinned_addresses (or passing None) retain the library's default redirect behavior, and an empty address sequence is rejected.
Know when the next one hits your stack
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N
Authenticated device registration gives PR:L over a network vector with low complexity; the forged internal handshake crosses scope (S:C) but yields only low recon/request impact (C:L/I:L) with no availability effect.
Primary rating from Vendor (github).
CVSS VectorVendor: github
Lifecycle Timeline
2DescriptionCVE.org
Microsoft UFO is an open-source framework for intelligent automation across devices and platforms. Prior to 3.0.9, authenticated device registration through /api/devices can supply a permitted attacker-controlled WebSocket endpoint while aip/transport/websocket.py applies pinned_addresses only to the initial destination. The pinned websockets.connect() client follows cross-origin redirects and opens a new TCP connection before Galaxy performs its post-handshake peer-IP validation, allowing WebSocket upgrade requests to internal hosts reachable from the server. The confirmed impact is the internal connection and handshake request, and does not establish arbitrary HTTP methods, response-body disclosure, a completed AIP session, or cloud metadata access. This issue is fixed in version 3.0.9.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.
EUVD-2026-93407
NVD
CVE.org
EPSS
Vulnrichment
GitHub
VulDB
Exploit-DB