Tuskira AdvisoryReported, unconfirmedLast updatedNovember 5, 2026

CVE-2026-102895

GPUStack auth bypass gives unauthenticated admin through a same-host reverse proxy or a forged header; vendor reports exploitation

If you run GPUStack older than 2.2.0, an attacker who can reach the server over the network can become the built-in administrator without credentials. GPUStack's advisory says admin access "leads to code execution on worker hosts." The most common way in is a reverse proxy on the same host, which makes every outside request look like it came from the server itself. A forged header is a second way in.

GPUStack's advisory says "This vulnerability has been observed exploited in the wild against a v2.1.1 deployment (attacker-created custom backends running reverse shells)." It is not on CISA's KEV. The fix shipped in 2.2.0 on June 18, the advisory went up July 31, and the CVE was added to NVD on November 4. Upgrade to 2.2.2, which also fixes the companion SAML bypass, CVE-2026-102894.

Vendor
GPUStack
Product
GPUStack
Affected versions
GPUStack before 2.2.0 (GitHub advisory GHSA-gj9m-f8ph-pmhr). Companion CVE-2026-102894 affects 0.7.1 up to 2.2.2
Vulnerable component
Authentication in gpustack/api/auth.py (get_current_user and client_ip_getter); code execution through POST /v2/inference-backends/from-yaml
CVSS
9.8 (GitHub as CNA, CVSS 3.1); NVD has not added its own score
CVSS vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H (GitHub)
CWE
CWE-287 Improper Authentication; CWE-290 Authentication Bypass by Spoofing; CWE-346 Origin Validation Error (GitHub)
Exploitation
Reported, unconfirmed
CISA KEV added
Patch
GPUStack 2.2.0 (June 18, 2026) fixes CVE-2026-102895; 2.2.2 (July 24, 2026) also fixes CVE-2026-102894, so upgrade to 2.2.2

Is it reachable for you?

What's affected. GPUStack before 2.2.0, per GitHub advisory GHSA-gj9m-f8ph-pmhr and NVD. A server is reachable if it runs a version below 2.2.0, force_auth_localhost is false (the default before 2.2.0), and an attacker can reach it over the network.

How it works. Before 2.2.0, GPUStack treated any request it believed came from the server itself (loopback, 127.0.0.1) as the built-in administrator. The advisory gives two ways to make a remote request look like that.

  1. Check for a same-host reverse proxy. This is the common case. Per the advisory, when GPUStack sits "behind a same-host reverse proxy with proxy_pass http://127.0.0.1:<port>," "every remote request arrives at GPUStack with TCP peer 127.0.0.1, so the loopback auto-admin branch fires. No header or credential is required." Look at the nginx, Caddy or other proxy config on the GPUStack host for a backend of 127.0.0.1 or localhost. If you find one and you are below 2.2.0, treat every request through that proxy as admin.
  2. Check whether your edge strips the X-GPUStack-Real-IP header. The advisory says "A forged X-GPUStack-Real-IP: 127.0.0.1 header can cause the request source to be treated as loopback." If your edge passes this header through from clients, any request can claim to be loopback.
  3. Check the force_auth_localhost setting. Both paths work only when force_auth_localhost is false, which the advisory calls the default. Look for --force-auth-localhost or force_auth_localhost in your start flags or config. GPUStack's current docs list the flag as "(Deprecated, no-op) Localhost callers are always authenticated," which describes the fixed versions, not older ones.
  4. Check the version. Anything below 2.2.0 is affected.

What an attacker gets. Per the advisory, admin access lets an attacker change users, models, workers and configuration, "mint persistent admin API keys (scope ["*"], valid from any source IP thereafter)," "read worker credentials and cloud/provider secrets," and, through POST /v2/inference-backends/from-yaml, run code on worker hosts.

Companion: CVE-2026-102894 (SAML). GitHub, as CNA, scores it 9.1. Per NVD, from 0.7.1 until 2.2.2 the /auth/saml/callback endpoint created a session "without calling OneLogin_Saml2_Auth.process_response to verify the signature," so "Any network client could submit an identity for an existing user, including an administrator ... even when SAML was not configured." It is fixed in 2.2.2, so upgrading only to 2.2.0 leaves it open.

Exploitation, as reported. GPUStack's advisory says "This vulnerability has been observed exploited in the wild against a v2.1.1 deployment (attacker-created custom backends running reverse shells)." It credits Javier Sixto (ulex.fr) with reporting the exploitation. It is not on CISA KEV.

Compensating controls (test them, don't assume them)

These come from GPUStack's advisory. Each works only under the condition at the end of its line.

  • Delivery. "Keep the API off untrusted networks (VPN / edge authentication)." This only helps if no untrusted client can reach the proxy or the GPUStack port.
  • Exploitation. "Set force_auth_localhost=true to require authentication even for loopback requests." This only helps if you confirm the setting took effect on your running version, and it does nothing for CVE-2026-102894.
  • Exploitation. "Ensure the reverse proxy / gateway cannot cause GPUStack to treat external traffic as loopback, and strip any client-supplied X-GPUStack-Real-IP header at the edge." This only helps if you do both, since stripping the header alone does not close the same-host proxy path.

Upgrading to 2.2.2 is the only fix for both CVEs.

What to look for in logs

GPUStack's advisory publishes no indicators or compromise checks. The reported attack used "attacker-created custom backends running reverse shells."

If you patched late. Patching does not remove access an attacker already has, and the advisory says admin API keys created through the bug stay "valid from any source IP thereafter." Our reading (Tuskira), not vendor guidance: review inference backends, users and API keys you did not create, and rotate worker and cloud-provider credentials.

How Tuskira helps

Tuskira is an agentic cyber defense platform that connects to the 200+ security and IT tools you already run. When a new critical vulnerability lands, Tuskira answers three questions.

Is there a reachable path? For example, whether a GPUStack server below 2.2.0 sits behind a same-host reverse proxy or accepts a client-supplied X-GPUStack-Real-IP header from a network attackers can reach.

Would your controls stop it? Tuskira tests the controls you already run, such as your WAF, firewall rules and EDR, against the path.

Can you close the gap now? Quell stages the compensating control change through your existing tools, with your approval, then re-tests to confirm the path is closed.

The vendor patch is the complete fix. Quell reduces exposure and proves your controls work in the meantime.

See how Quell handles emerging threats

FAQ

Am I exposed to CVE-2026-102895?

Yes, if you run GPUStack below 2.2.0 with force_auth_localhost false (the default) and an attacker can reach it, most often through a reverse proxy on the same host.

Is CVE-2026-102895 being exploited?

GPUStack's advisory says it "has been observed exploited in the wild against a v2.1.1 deployment." It is not on CISA KEV as of November 5, 2026.

Do I need to log in or send a special header to exploit it?

No. Behind a same-host reverse proxy, the advisory says "No header or credential is required." The forged header is a second way in.

Which version fixes it?

2.2.0 fixes CVE-2026-102895. 2.2.2 also fixes the SAML bypass CVE-2026-102894, so upgrade to 2.2.2.

How do I mitigate CVE-2026-102895 without patching?

Keep GPUStack off untrusted networks, set force_auth_localhost=true, and make sure your proxy can't make outside traffic look local, per GPUStack. These reduce exposure but are not a fix.

Updates

Nov 5, 2026. First published. GPUStack reports exploitation in the wild; not on CISA KEV.

Sources

We publish an advisory when a vulnerability is Critical or on CISA KEV, has one identifiable component to check, and has a public proof of concept or reported exploitation. Advisories are updated as exploitation status changes.