---
id: "CVE-2026-102895"
kind: "vulnerability"
aliases: ["CVE-2026-102895"]
title: "GPUStack: forged localhost header grants unauthenticated admin access and code execution"
severity: "critical"
cvss: 9.8
epss: null
exploited: false
status: "open"
category: "ai-tooling"
products: []
ecosystems: []
tags: ["ai-inference", "ai-tooling", "gpustack", "reverse-proxy", "self-hosted"]
not_affected_if: ["force_auth_localhost-true", "version-2.2.0-or-later"]
published_at: "2026-11-04T22:17:44+00:00"
first_seen_at: "2026-11-04T23:08:47+00:00"
updated_at: "2026-11-04T23:09:39+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-102895", "first_seen_at": "2026-11-04T23:08:47+00:00"}]
exploit_sources: []
---

# GPUStack: forged localhost header grants unauthenticated admin access and code execution

GPUStack, a GPU cluster manager for AI model serving, trusts requests that appear to come from localhost when force_auth_localhost is off, which is the default. A remote attacker can forge a loopback source using a reverse proxy peer or a spoofed X-GPUStack-Real-IP header, gaining administrator rights to change users and models, read worker and cloud secrets, and run code through the inference backend YAML endpoint.

_Summary, check and fix written by a model from the sources; labelled as such._

## How to check

- Check the GPUStack version with `gpustack --version`; versions below `2.2.0` are affected.
- Check whether `force_auth_localhost` is set to true in the GPUStack configuration; the default is false, so unset means exposed.
- Check whether GPUStack sits behind a reverse proxy on the same host, since that is the forged-peer path.

## Fix

- GPUStack: upgrade to `2.2.0`.

## Timeline

- 2026-11-04T23:08:47+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-102895

## Documents

- [advisory] Vendor advisory: github.com https://github.com/gpustack/gpustack/security/advisories/GHSA-gj9m-f8ph-pmhr
- [fix] Patch: github.com https://github.com/gpustack/gpustack/commit/53f42a6a553542974396d16a4ff6b12bcbedb48d
- [fix] Release notes: github.com https://github.com/gpustack/gpustack/releases/tag/v2.2.0

## From the sources

GPUStack is an open-source GPU cluster manager for AI model serving and GPU instance provisioning. Prior to 2.2.0, get_current_user in gpustack/api/auth.py treated a loopback request source as the built-in administrator when force_auth_localhost was false, which was the default. A remote request could appear to originate from 127.0.0.1 because client_ip_getter accepted a same-host reverse proxy peer or a client-supplied X-GPUStack-Real-IP loopback value. The bypass allowed unauthenticated administrative access, including user and model changes, persistent administrator API-key creation, disclosure of worker and cloud-provider secrets, and code execution through POST /v2/inference-backends/from-yaml. Exploitation was observed in the wild against a 2.1.1 deployment. This issue is fixed in version 2.2.0.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
