CISA's addition of CVE-2026-102895 to the Known Exploited Vulnerabilities (KEV) catalog on November 9, 2026, confirms what many of us in the incident response community have feared: GPUStack, the open-source GPU cluster management platform increasingly deployed to orchestrate AI/ML workloads, is under active attack.
This is not a vulnerability that requires sophisticated exploit chains or insider knowledge. It is an improper authentication flaw that grants unauthenticated attackers the keys to the kingdom — full administrative access to your GPU orchestration plane. From there, they can create persistent administrative API keys, exfiltrate cloud provider secrets, manipulate inference models, and execute arbitrary code via the POST /v2/inference-backends/from-yaml endpoint.
For Federal Civilian Executive Branch (FCEB) agencies, BOD 26-04 mandates immediate action. For private sector organizations — particularly those in AI development, healthcare research, financial modeling, and any sector leveraging GPU clusters for sensitive inference workloads — this vulnerability represents a critical exposure that demands emergency change windows and immediate threat hunting.
Technical Analysis
Affected Products and Platforms
CVE-2026-102895 affects GPUStack, an open-source platform designed to manage GPU resources across distributed clusters, typically deployed on Linux infrastructure (Ubuntu, CentOS, RHEL) and increasingly common in Kubernetes environments supporting AI/ML pipelines. The vulnerability impacts the platform's authentication layer, specifically failing to enforce proper authentication checks on administrative API endpoints.
Critical Note: While the summary does not specify exact version numbers, defenders should assume all GPUStack versions prior to the vendor's security update are vulnerable. GPUStack's typical deployment model — often running with elevated privileges to manage GPU drivers and containerized workloads — significantly amplifies the blast radius of this flaw.
Vulnerability Mechanics
The core issue lies in GPUStack's API server failing to properly validate authentication tokens before processing requests to sensitive administrative functions. Specifically:
- Authentication Bypass: The vulnerability allows remote, unauthenticated attackers to interact with administrative APIs that should require valid session tokens or API keys.
- Administrative Privilege Escalation: Attackers can create persistent administrator API keys, effectively establishing a foothold that survives service restarts and credential rotations.
- Secret Disclosure: The flaw exposes worker node credentials and cloud provider secrets (AWS access keys, Azure service principals, GCP service accounts) stored within GPUStack for auto-scaling and distributed inference operations.
- Remote Code Execution: The
POST /v2/inference-backends/from-yamlendpoint processes YAML configurations without proper authentication, allowing attackers to define malicious inference backends that execute arbitrary code on the host or within containerized inference environments.
Attack Chain
From a defender's perspective, the attack flow typically follows this pattern:
- Discovery: Attackers scan for exposed GPUStack management interfaces (typically TCP port 80/443 or 8080, depending on deployment configuration).
- Initial Access: Unauthenticated API calls to administrative endpoints to enumerate users, models, and existing API keys.
- Persistence: Creation of new administrative API keys via the vulnerable endpoint to ensure continued access even if the original vulnerability is patched.
- Credential Harvesting: Extraction of cloud provider secrets and worker node credentials stored in GPUStack's configuration.
- Execution: Deployment of malicious inference backends via YAML deserialization, leading to code execution within the context of the GPUStack service or associated containers.
- Lateral Movement: Use of harvested cloud credentials to pivot into adjacent cloud infrastructure or deployment of cryptominers and persistence mechanisms on GPU-enabled nodes.
Exploitation Status
This vulnerability is confirmed actively exploited in the wild. Its inclusion in CISA's KEV catalog means federal agencies are under Binding Operational Directive (BOD) 26-04 requirements to remediate immediately. The exploit requires no authentication and can be executed remotely against any exposed management interface. Given GPUStack's role in managing high-value GPU resources, this vulnerability is particularly attractive to:
- Cryptocurrency mining operations seeking free GPU compute
- Nation-state actors targeting AI research and development
- Ransomware affiliates looking for high-value infrastructure to encrypt or extort
Detection & Response
Effective detection requires monitoring both the network layer (API interactions) and the host layer (process execution and file system changes). Given GPUStack's Linux-heavy deployment model, our detection strategy focuses on Sysmon for Linux, auditd, and cloud-native logging.
Sigma Rules
The following Sigma rules target the specific behaviors described in the attack chain: unauthenticated API access patterns, suspicious child processes from the GPUStack service, and potential persistence mechanisms.
---
title: GPUStack Unauthorized API Access Attempt
id: 8a7b9c4d-3e2f-4a1b-9c8d-7e6f5a4b3c2d
status: experimental
description: Detects unauthenticated access attempts to GPUStack administrative endpoints, particularly the inference-backends YAML endpoint.
references:
- https://www.cisa.gov/known-exploited-vulnerabilities-catalog
- https://attack.mitre.org/techniques/T1190/
author: Security Arsenal
date: 2026/11/09
tags:
- attack.initial_access
- attack.t1190
- attack.persistence
logsource:
category: webserver
product: linux
detection:
selection:
cs-uri-stem|contains:
- '/v2/inference-backends/from-yaml'
- '/v2/users'
- '/v2/api-keys'
sc-status:
- 200
- 201
condition: selection
falsepositives:
- Legitimate administrative API usage from authorized IPs
level: high
---
title: GPUStack Service Spawning Suspicious Processes
id: 9b8c7d6e-5f4a-3b2c-1d0e-9f8a7b6c5d4e
status: experimental
description: Detects GPUStack worker or server processes spawning shell interpreters or unexpected command-line tools, indicating potential code execution via malicious YAML configurations.
references:
- https://attack.mitre.org/techniques/T1059/
author: Security Arsenal
date: 2026/11/09
tags:
- attack.execution
- attack.t1059
- attack.privilege_escalation
logsource:
category: process_creation
product: linux
detection:
selection_parent:
ParentImage|contains:
- 'gpustack'
- 'gpu-stack'
- '/usr/local/bin/gpustack'
- '/opt/gpustack'
selection_child:
Image|endswith:
- '/bash'
- '/sh'
- '/python'
- '/python3'
- '/curl'
- '/wget'
- '/nc'
- '/netcat'
condition: selection_parent and selection_child
falsepositives:
- Legitimate GPUStack administrative scripts
- Health check scripts
level: high
---
title: GPUStack API Key Creation Anomaly
id: 1c2d3e4f-5a6b-7c8d-9e0f-1a2b3c4d5e6f
status: experimental
description: Detects API key creation events outside of normal administrative change windows or from unexpected source IPs.
references:
- https://attack.mitre.org/techniques/T1136/
author: Security Arsenal
date: 2026/11/09
tags:
- attack.persistence
- attack.t1136
logsource:
category: application
product: linux
detection:
selection:
Message|contains:
- 'API key created'
- 'admin key generated'
- 'POST /v2/api-keys'
filter:
SourceIP|cidr:
- '10.0.0.0/8'
- '172.16.0.0/12'
- '192.168.0.0/16'
condition: selection and not filter
falsepositives:
- Legitimate external administrative access
- CI/CD pipeline automation
level: medium
KQL (Microsoft Sentinel / Defender)
For organizations ingesting GPUStack logs into Microsoft Sentinel via Syslog/CEF or monitoring Linux endpoints with Defender for Endpoint, the following queries identify suspicious API interactions and process executions.
// Hunt for unauthenticated access to GPUStack administrative endpoints
Syslog
| where TimeGenerated > ago(7d)
| where ProcessName contains "gpustack" or ProcessName contains "gpu-stack"
| where SyslogMessage contains "/v2/inference-backends/from-yaml" or SyslogMessage contains "/v2/api-keys"
| where SyslogMessage contains "401" or SyslogMessage contains "403" // Failed auth (reconnaissance)
| summarize Attempts=count(), UniqueIPs=dcount(Computer) by SyslogMessage, Computer
| order by Attempts desc
// Detect successful exploitation - process spawning from GPUStack context
DeviceProcessEvents
| where TimeGenerated > ago(7d)
| where InitiatingProcessFileName contains "gpustack" or InitiatingProcessCommandLine contains "gpustack"
| where FileName in ("bash", "sh", "python", "python3", "curl", "wget", "nc", "netcat")
| project TimeGenerated, DeviceName, InitiatingProcessFileName, FileName, ProcessCommandLine, AccountName
| order by TimeGenerated desc
// Network connections from GPUStack processes to suspicious destinations
DeviceNetworkEvents
| where TimeGenerated > ago(7d)
| where InitiatingProcessFileName contains "gpustack" or InitiatingProcessCommandLine contains "gpustack"
| where RemoteIPType == "Public" and RemotePort != 443 and RemotePort != 80
| project TimeGenerated, DeviceName, RemoteIP, RemotePort, InitiatingProcessFileName
| order by TimeGenerated desc
Velociraptor VQL
For DFIR teams actively hunting through GPUStack infrastructure, this VQL artifact identifies processes with suspicious parent-child relationships and network connections indicative of post-exploitation activity.
-- Hunt for GPUStack processes with suspicious command lines or child processes
SELECT
Pid,
Ppid,
Name,
Exe,
CommandLine,
Username,
CreateTime,
parent().Name as ParentName,
parent().CommandLine as ParentCommandLine
FROM pslist()
WHERE
(Name =~ "gpustack" OR Exe =~ "gpustack" OR CommandLine =~ "gpustack")
OR
(ParentName =~ "gpustack" AND (
Name =~ "bash|sh|python|curl|wget|nc|perl|ruby"
OR CommandLine =~ "base64|eval|exec|download|http://|https://"
))
-- Check for network connections from GPUStack processes
SELECT
Pid,
Name,
netstat().LocalAddr as LocalIP,
netstat().LocalPort as LocalPort,
netstat().RemoteAddr as RemoteIP,
netstat().RemotePort as RemotePort,
netstat().State as ConnectionState
FROM pslist()
WHERE Name =~ "gpustack" OR Exe =~ "gpustack"
Remediation Script
This Bash script checks for vulnerable GPUStack versions, applies immediate mitigations, and verifies the integrity of the installation. Run this on all GPUStack management nodes immediately.
#!/bin/bash
# CVE-2026-102895 GPUStack Emergency Mitigation Script
# Run with root privileges on GPUStack management nodes
set -e
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo -e "${YELLOW}[*] CVE-2026-102895 GPUStack Security Assessment${NC}"
echo "=================================================="
# Check if GPUStack is installed
if ! command -v gpustack &> /dev/null && [ ! -d "/opt/gpustack" ] && [ ! -d "/usr/local/gpustack" ]; then
echo -e "${GREEN}[+] GPUStack not found on this system. No action required.${NC}"
exit 0
fi
echo -e "${YELLOW}[!] GPUStack installation detected. Beginning security checks...${NC}"
# 1. Immediate service isolation (if patching is delayed)
echo -e "${YELLOW}[*] Checking network exposure...${NC}"
GPUSTACK_PORTS=$(netstat -tlnp 2>/dev/null | grep -E ':(80|443|8080|5000)' | grep -E 'gpustack|python' || true)
if [ ! -z "$GPUSTACK_PORTS" ]; then
echo -e "${RED}[!] GPUStack appears to be listening on network interfaces:${NC}"
echo "$GPUSTACK_PORTS"
read -p "Do you want to immediately restrict GPUStack to localhost only? (y/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
# Backup config
cp /etc/gpustack/config.yaml /etc/gpustack/config.yaml.bak.$(date +%Y%m%d_%H%M%S) 2>/dev/null || true
# Update config to bind to localhost (adjust based on actual config location)
if [ -f "/etc/gpustack/config.yaml" ]; then
sed -i 's/host: 0.0.0.0/host: 127.0.0.1/' /etc/gpustack/config.yaml
echo -e "${GREEN}[+] Updated GPUStack to listen on localhost only${NC}"
systemctl restart gpustack 2>/dev/null || echo "Please restart GPUStack service manually"
fi
fi
fi
# 2. Check for suspicious API keys
echo -e "${YELLOW}[*] Checking for suspicious API keys...${NC}"
if [ -f "/var/lib/gpustack/data.db" ] || [ -f "/opt/gpustack/data/gpustack.db" ]; then
# This assumes SQLite backend - adjust for your deployment
echo -e "${YELLOW}[!] Review API keys manually. Check for keys created after $(date -d '7 days ago' +%Y-%m-%d):${NC}"
# sqlite3 /path/to/db "SELECT * FROM api_keys WHERE created_at > date('now', '-7 days');" 2>/dev/null || echo "Manual DB inspection required"
fi
# 3. Check for unauthorized inference backends
echo -e "${YELLOW}[*] Checking for unauthorized inference backend configurations...${NC}"
find /etc/gpustack /opt/gpustack /var/lib/gpustack -name "*.yaml" -o -name "*.yml" 2>/dev/null | while read yaml; do
if grep -q "inference-backends" "$yaml" 2>/dev/null; then
echo -e "${YELLOW}[!] Found inference backend config: $yaml${NC}"
echo " Last modified: $(stat -c %y "$yaml" 2>/dev/null || stat -f %Sm "$yaml" 2>/dev/null)"
fi
done
# 4. Check for suspicious processes
echo -e "${YELLOW}[*] Checking for suspicious child processes...${NC}"
ps auxf | grep -E "(gpustack|python).*\-\>.*(bash|sh|curl|wget|nc)" | grep -v grep || echo "No suspicious process trees detected"
# 5. Version check and update instructions
echo -e "${YELLOW}[*] Version Assessment${NC}"
if command -v gpustack &> /dev/null; then
VERSION=$(gpustack version 2>/dev/null || gpustack --version 2>/dev/null || echo "Unknown")
echo "Current GPUStack version: $VERSION"
# Check if vulnerable (assume all versions prior to vendor patch are vulnerable)
echo -e "${RED}[!] If your version is not the latest security release, you are vulnerable.${NC}"
echo -e "${YELLOW}[!] Please update immediately using:${NC}"
echo " # For pip installations:"
echo " pip install --upgrade gpustack"
echo " # For Docker deployments:"
echo " docker pull gpustack/gpustack:latest"
echo " # For systemd services:"
echo " systemctl stop gpustack && curl -sfL https://get.gpustack.ai | sh -"
fi
# 6. Credential rotation reminder
echo -e "${YELLOW}[*] CRITICAL: Credential Rotation Required${NC}"
echo "If this system was exposed to the internet, you MUST rotate:"
echo " - All GPUStack API keys"
echo " - Cloud provider credentials (AWS, Azure, GCP) stored in GPUStack"
echo " - Any database credentials used by GPUStack"
echo " - SSH keys or service account tokens accessible to the GPUStack service account"
echo -e "${GREEN}[+] Assessment complete. Review findings above and apply patches immediately.${NC}"
Remediation
Immediate Actions (Next 24 Hours)
-
Isolate GPUStack Management Interfaces
- Ensure GPUStack is not exposed to the public internet. If remote access is required, place it behind a VPN or zero-trust gateway with strong authentication.
- Bind GPUStack services to localhost (127.0.0.1) or internal management networks only.
- Implement network segmentation to restrict access to the management plane to authorized administrator IPs only.
-
Apply Vendor Patches
- Monitor the official GPUStack repository and security advisories for the patched version addressing CVE-2026-102895.
- For containerized deployments: Pull the latest image tagged with the security fix.
- For binary installations: Download the patched release from the official vendor site.
- CISA BOD 26-04 Deadline: Federal agencies must remediate or disconnect by the date specified in the KEV entry (typically 3 weeks from KEV addition, but verify current guidance).
-
Credential Rotation
- Assume compromise if the instance was internet-facing.
- Rotate all GPUStack administrative API keys immediately.
- Rotate all cloud provider credentials (AWS IAM keys, Azure Service Principals, GCP Service Accounts) stored within or accessible to GPUStack.
- Review and rotate any database credentials or SSH keys used by GPUStack workers.
-
Audit for Persistence
- Review all existing API keys for unauthorized entries created after November 1, 2026 (or your first exposure date).
- Audit user accounts for unauthorized additions or privilege escalations.
- Review inference backend configurations for unauthorized YAML uploads.
Long-Term Hardening
-
Network Architecture
- Deploy GPUStack in a dedicated management VLAN with strict ingress/egress filtering.
- Implement Web Application Firewall (WAF) rules to inspect API traffic to
/v2/endpoints. - Use mTLS or API gateway authentication for all administrative API access.
-
Monitoring and Logging
- Enable verbose API access logging and ship logs to a centralized SIEM.
- Monitor for the Sigma rules and KQL queries provided above.
- Set up alerts for any process spawning from GPUStack service contexts.
-
Least Privilege
- Run GPUStack services with dedicated service accounts with minimal permissions.
- Use short-lived credentials (e.g., AWS IAM Roles for Service Accounts, Azure Managed Identities) instead of static keys where possible.
- Regularly audit cloud provider permissions granted to GPUStack workers.
-
Configuration Management
- Implement Infrastructure as Code (IaC) for GPUStack deployments to ensure consistent security configurations.
- Use admission controllers (e.g., OPA Gatekeeper, Kyverno) if running in Kubernetes to prevent unauthorized inference backend deployments.
Verification
After patching, verify remediation by:
- Confirming the GPUStack version matches the patched release.
- Testing unauthenticated access to
/v2/inference-backends/from-yaml— it should return 401 Unauthorized. - Reviewing network connections to ensure no unexpected outbound traffic from GPUStack nodes.
- Running the provided Bash script to confirm no suspicious API keys or processes remain.
Related Resources
Security Arsenal Penetration Testing Services AlertMonitor Platform Book a SOC Assessment vulnerability-management Intel Hub
Is your security operations ready?
Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.