Summary
  • A remote request could look local and gain admin access with no login.
  • Attackers used the flaw in the wild against a 2.1.1 deployment.
  • Update to 2.2.2 or later to fix this flaw and a sibling SAML flaw.
  • After the update, test the admin path and rotate exposed secrets.

GPUStack is an open source GPU cluster manager. It serves AI models and provisions GPU instances. A flaw in its login check gave remote attackers admin access. No login was needed. Attacks were already seen in the wild.

The flaw

The record is CVE-2026-102895. Common Vulnerabilities and Exposures (CVE) is the public record system for flaws. GitHub, Inc. is the CNA for this record. CNA means CVE Numbering Authority. The score is 9.8 on the Common Vulnerability Scoring System (CVSS) version 3.1. That score comes from GitHub as CNA. The National Vulnerability Database (NVD) has not yet provided its own score. The vector is CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H. All builds before 2.2.0 are affected. Version 2.2.0 fixed the flaw.

The code sits in gpustack/api/auth.py. A function named get_current_user checked the request source. It treated a loopback request as the built in administrator. That happened when force_auth_localhost was false. False was the default setting. A remote request could look like it came from 127.0.0.1. The client_ip_getter code accepted a same host reverse proxy peer. It also accepted a client supplied X-GPUStack-Real-IP loopback value. Either path fooled the check. The weakness types are CWE-287, CWE-290, and CWE-346. CWE means Common Weakness Enumeration.

What attackers could do

Admin access opened the whole system. Attackers could change users and models. They could create a lasting admin API key. They could read worker secrets and cloud provider secrets. They could run code through POST /v2/inference-backends/from-yaml. That endpoint builds an inference backend from YAML input. YAML means Yet Another Markup Language, a plain text data format.

SecurityOnline reported on November 5, 2026 that researcher Javier Sixto of ulex.fr reported active attacks. Intruders used custom backends for reverse shells on worker hosts. A reverse shell gives an attacker a command line on the host. That turns a login flaw into full host control.

The NVD description states the key fact in plain words. It says, "Exploitation was observed in the wild against a 2.1.1 deployment". That sentence matters. It means patching is not a drill. It is a response to live attacks.

A second flaw in the same update path

A sibling flaw needs the same attention. The record is CVE-2026-102894. It scores 9.1. Its SAML callback trusted an unverified SAMLResponse. Security Assertion Markup Language (SAML) is a login standard for single sign on. The flaw allowed auth bypass and account takeover. Version 2.2.2 fixed it. Teams should update to 2.2.2 or later. That one update fixes both flaws.

What to do now

First, list every GPUStack deployment. Record the version on each one. Second, update each deployment to 2.2.2 or later. Third, test the fix on the live system. Send a remote request with no login. Confirm it no longer gains admin access. A ticket that says patched is not proof. A test on the live system is proof.

Fourth, hunt for signs of past access. Look for new admin users. Look for new API keys. Look for new inference backends. Look for odd processes on worker hosts. Fifth, rotate secrets that an attacker could have read. That includes worker secrets and cloud provider secrets. Rotate them even if the hunt finds nothing. A quiet break in leaves no log line to find.

This flaw has no listing in the Known Exploited Vulnerabilities (KEV) catalog in the sources checked for this story. KEV is run by the Cybersecurity and Infrastructure Security Agency (CISA). The lack of a KEV listing does not lower the risk. Live exploitation is already confirmed in the NVD record.

The governance lesson

The flaw came from a default. A local trust shortcut was left on. It treated a network claim as proof of identity. That is the lesson for every team. A default that grants admin access must be checked. Evidence must prove the fix works. A version number alone does not prove it. A dated test does.

Sources

Next step

Update every GPUStack deployment to 2.2.2 or later. Then test the admin path and file the dated proof.

Questions on this record
Which GPUStack versions are affected?
All builds before 2.2.0 are affected. Version 2.2.0 fixed this flaw. Version 2.2.2 or later also fixes the sibling SAML flaw.
Was the flaw exploited in the wild?
Yes. The National Vulnerability Database (NVD) record states that exploitation was observed in the wild against a 2.1.1 deployment.
What should teams do after updating?
Test that a remote request no longer gains admin access. Check for new admin accounts and keys. Rotate worker and cloud secrets that may have been exposed.

Related records

Guides and articles describe the work. The evidence that work produces is described in three proof pages and one architecture page.

proof.state
Proof of State. What the environment was, as of a date someone else picks: point-in-time records, content hashed and chained.
proof.change
Proof of Change. Who or what altered the environment, under what authority, with before and after state hashes.
proof.agency
Proof of Agency. What a machine was permitted to do before it acted, what it did, and what would have stopped it.
architecture
Architecture. How the chain is built and where it lives: inside your tenant, with no egress of evidence.

Further reading in this register

Verify the record this entry describes.

Published
Last updated
Unchanged since publication
Author
Leonard Esere