High

SSRF Backslash-At URL Authority Confusion

A flaw in vLLM versions before 0.17.0 lets attackers sneak a URL past the server's allow-list check by putting a backslash right before the '@' symbol. The validator and the actual HTTP client disagree about where the hostname starts, so a request that looks safe on paper actually gets sent to an internal address.

How the attack works

An attacker crafts a URL (or embeds one in a request body) where a backslash, or its encoded form %5C or %255C, sits directly in front of an '@' character. vLLM's URL validator parses this string one way and decides the destination is an approved external host. The underlying HTTP client library parses the same string differently and dials whatever comes after the '@', which points at loopback, private network ranges, link-local addresses, cloud metadata endpoints, obfuscated IP formats, or internal hostnames. The result is the server making an outbound request to an internal resource that should have been blocked.

Netzilo detection

Netzilo reports this behaviour when it is observed.

Signature ID
7c1f4a2e-9b83-4d16-a5f0-2e6c8d31b4af
Severity
High

Why it matters

An attacker can use the vulnerable server as a proxy to reach internal services, including cloud metadata endpoints that often hand out credentials, or other machines on the internal network that are not meant to be reachable from outside.

What you can do

  • Upgrade vLLM to version 0.17.0 or later, where this parsing mismatch is fixed.
  • If upgrading is not immediately possible, block outbound requests to loopback, RFC1918, link-local, and cloud metadata addresses at the network layer rather than relying on application-side URL validation.
  • Review any outbound HTTP requests containing a backslash immediately before '@' in the URL, and treat those hitting internal or metadata addresses as suspicious unless tied to known test or fuzzing activity.
  • Log and alert on requests to cloud metadata endpoints (e.g. 169.254.169.254) from application servers, since this is a common target for this class of bypass.

Known benign look-alikes

  • Authorised SSRF regression tests, red-team tooling or security fuzzing corpora deliberately POSTing backslash-@ payloads at a local or internal model server - expected to fire; correlate with the change/test ticket.
  • A URL whose userinfo password legitimately contains a percent-encoded backslash (https://user:p%5Cssw@host/). The script suppresses this by requiring a hard private/metadata/obfuscated IP target whenever a credential (colon-bearing) segment precedes the '@'; a bare internal hostname alone will not fire in that case.
  • Internal service URLs using a single-label hostname where a client library emits a stray escaped backslash in the authority - rare, and still worth reviewing because the parse is genuinely ambiguous.
  • Documentation, SSRF cheat-sheets or CVE write-ups transmitted as an HTTP body to an internal wiki. Suppressed unless the payload's own effective host is internal, but a payload list that names 169.254.169.254 will match by design.

References