Čo sa stalo
GPUStack je open-source nástroj na správu klastrov s grafickými kartami (GPU), na ktorých firmy a tímy prevádzkujú vlastné AI modely, napríklad jazykové modely. Vo verziách pred 2.2.0 obsahuje chybu v prihlasovaní. Útočník zo siete sa cez ňu môže stať administrátorom bez mena a hesla. Chyba má označenie CVE-2026-102895.
Vývojári projektu zverejnili bezpečnostné upozornenie na GitHube 31. júla 2026 a chybu opravili vo verzii 2.2.0. Do americkej databázy zraniteľností NVD sa záznam dostal 4. novembra 2026.
Nejde o teoretickú hrozbu. Podľa upozornenia vývojárov útočníci chybu zneužili proti inštalácii vo verzii 2.1.1, kde si vytvorili vlastné „backendy“, ktoré otvárali vzdialený prístup k serveru (tzv. reverse shell). Zneužitie nahlásil Javier Sixto (ulex.fr). Americká agentúra CISA zaradila chybu 9. novembra 2026 do katalógu aktívne zneužívaných zraniteľností KEV a európska databáza EUVD agentúry ENISA ju od rovnakého dňa vedie ako zneužívanú.
Prečo je to nebezpečné
Ide o chybu v overovaní totožnosti (autentifikácii). GPUStack pri predvolenom nastavení automaticky považoval každú požiadavku, ktorá zdanlivo prišla z toho istého počítača (adresa 127.0.0.1, tzv. localhost), za požiadavku vstavaného administrátora. Je to ako vrátnik, ktorý pustí do trezoru každého, kto tvrdí, že prišiel zvnútra budovy, a preukaz nekontroluje.
Problém je, že tento „pôvod“ sa dá ľahko podvrhnúť. Ak GPUStack beží za reverznou proxy (napríklad nginx) na tom istom serveri, čo je bežný spôsob nasadenia, každá požiadavka z internetu prichádza do GPUStacku z adresy 127.0.0.1. Podľa vývojárov vtedy útočník nepotrebuje nič špeciálne. Druhou cestou je podvrhnutá hlavička v požiadavke. Vďaka nej požiadavka vyzerá, akoby prišla z localhostu.
Útočník nepotrebuje žiadne prihlásenie ani spoluprácu používateľa, stačí mu sieťový prístup ku GPUStacku. Podľa upozornenia vývojárov potom môže:
- prezerať a meniť používateľov, modely, pracovné uzly (workery) a konfiguráciu,
- vytvoriť si trvalé administrátorské API kľúče, ktoré fungujú z akejkoľvek IP adresy aj neskôr,
- čítať prístupové údaje workerov a tajné kľúče ku cloudovým a iným poskytovateľom,
- cez administrátorské funkcie (vytvorenie vlastného inferenčného backendu) spustiť vlastný kód na serveroch s GPU.
Skóre CVSS 9,8 z 10 (podľa CVSS 3.1) uvádza bezpečnostné upozornenie projektu na GitHube a znamená kritickú závažnosť: útok cez sieť, jednoduchý a bez prihlásenia. Katalóg CISA KEV zahŕňa chyby, o ktorých zneužívaní má CISA dôkazy. Skóre EPSS, teda odhad pravdepodobnosti zneužitia v najbližších 30 dňoch, je len približne 0,33 %, no pri potvrdenom útoku má toto číslo menšiu váhu ako samotný fakt, že sa chyba už zneužila.
Koho sa to týka
Týka sa to všetkých inštalácií GPUStack vo verziách pred 2.2.0 (balík gpustack). Zneužitie bolo potvrdené na verzii 2.1.1.
GPUStack nájdete tam, kde si organizácia prevádzkuje vlastné AI modely na vlastnom hardvéri, napríklad na firemných serveroch s grafickými kartami alebo v Kubernetes klastroch. Najväčšie riziko majú inštalácie dostupné z internetu a tie, ktoré sú za reverznou proxy na tom istom serveri. Takéto nastavenie vývojári označujú za bežnú podobu vlastnej inštalácie.
CISA upozorňuje, že ide o open-source komponent, ktorý môže byť použitý aj v iných produktoch. Ak vám AI riešenie dodal externý dodávateľ, opýtajte sa ho, či obsahuje GPUStack a v akej verzii.
Netýka sa to verzií 2.2.0 a novších ani organizácií, ktoré GPUStack nepoužívajú.
Ako zistiť, či ste zasiahnutí
Verziu zistíte na serveri, kde GPUStack beží. Všetky príkazy nižšie len čítajú údaje a nič nemenia. Pri inštalácii cez pip:
pip show gpustack
Pri Dockeri sa pozrite na obraz a jeho značku verzie. Ak je značka latest alebo nejasná, zistite verziu priamo v kontajneri:
docker ps --format '{{.Names}} {{.Image}}' | grep -i gpustack
docker exec NAZOV_KONTAJNERA pip show gpustack
V Kubernetes vypíšte obrazy nasadení:
kubectl get deploy,statefulset,daemonset -A -o wide | grep -i gpustack
Ak je verzia nižšia ako 2.2.0, ste zraniteľní. Pozrite sa aj, či je v konfigurácii alebo v parametroch spustenia nastavené force_auth_localhost na true. Ak nie je, platí zraniteľná predvolená hodnota. Riziko zvyšuje reverzná proxy na tom istom serveri, ktorá posiela požiadavky na 127.0.0.1 alebo localhost. Prvý príkaz vypíše parametre spustenia GPUStacku, druhý hľadá takéto nastavenie v nginx. Ak používate inú proxy, skontrolujte jej konfiguráciu.
ps aux | grep -i '[g]pustack'
grep -rnE "proxy_pass[[:space:]]+https?://(127\.0\.0\.1|localhost)" /etc/nginx/ 2>/dev/null
Ako to opraviť
Chyba je opravená vo verzii GPUStack 2.2.0. Podľa vývojárov odstránila automatické administrátorské práva pre požiadavky z localhostu a sprísnila spracovanie IP adresy klienta. Odporúčané poradie krokov:
- Ak je GPUStack dostupný z internetu, okamžite obmedzte prístup, napríklad len cez VPN alebo s overovaním na vstupnej bráne.
- Zálohujte databázu a konfiguráciu GPUStacku.
- Aktualizujte server aj všetky workery na verziu 2.2.0 alebo novšiu. Verzia 2.2.0 kontroluje nesúlad verzií servera a workerov, preto aktualizujte všetky časti spolu.
- Po aktualizácii overte verziu príkazmi z predchádzajúcej sekcie.
- Skontrolujte, či systém nebol napadnutý, a vymeňte API kľúče a prístupové údaje (pozri nasledujúcu sekciu).
Pri inštalácii cez pip môže aktualizácia vyzerať takto. Pri Dockeri alebo Kubernetes použite obraz vo verzii 2.2.0 alebo novšej a kontajnery znovu nasaďte.
pip install --upgrade "gpustack>=2.2.0"
Ak nemôžete aktualizovať hneď, vývojári uvádzajú tieto dočasné opatrenia:
- nastaviť
force_auth_localhost=true, aby GPUStack vyžadoval prihlásenie aj pri požiadavkách z localhostu, - nastaviť reverznú proxy alebo bránu tak, aby externá prevádzka nemohla vyzerať ako lokálna, a na vstupe odstraňovať hlavičku
X-GPUStack-Real-IP, ktorú pošle klient, - nepúšťať API GPUStacku do nedôveryhodných sietí, ale držať ho za VPN alebo za overovaním na okraji siete.
Ani aktualizácia, ani dočasné opatrenia neodstránia API kľúče, ktoré si útočník už vytvoril. Americké federálne úrady musia podľa CISA chybu vyriešiť do 12. novembra 2026, čo je dobrá orientácia aj pre vás.
Čo ak už ste mohli byť napadnutí
Ak bol váš GPUStack pred aktualizáciou dostupný z internetu alebo z nedôveryhodnej siete, počítajte s tým, že ho už mohol niekto zneužiť. Vývojári opisujú, že útočníci si vytvárali vlastné inferenčné backendy, ktoré otvárali vzdialený prístup k serveru. Skontrolujte:
- zoznam inferenčných backendov: vlastné (custom) backendy, ktoré ste nevytvorili,
- API kľúče: neznáme kľúče, najmä s plnými právami,
- používateľov, modely, workery a konfiguráciu: nečakané zmeny alebo nové administrátorské účty,
- servery s GPU: neznáme procesy a nezvyčajné odchádzajúce spojenia,
- logy reverznej proxy: požiadavky na
/v2/inference-backends/from-yamlz neznámych IP adries.
Pri nginx prehľadá tento príkaz aktuálne aj staršie skomprimované logy. Pri inej proxy hľadajte rovnakú cestu v jej logoch.
zgrep -n "inference-backends/from-yaml" /var/log/nginx/access.log*
Útočník mohol čítať prístupové údaje workerov a tajné kľúče ku cloudovým poskytovateľom. Po aktualizácii ich preto vymeňte, aj keď stopy útoku nenájdete.
Ak nájdete neznámy backend, kľúč alebo podozrivý proces, odpojte dotknuté servery od siete, zachovajte logy a prizvite odborníka na riešenie bezpečnostných incidentov. Kód spustený na workeroch mohol útočníkovi otvoriť cestu ďalej do vašej siete.