Co se stalo
GPUStack je open-source nástroj pro správu clusterů s grafickými kartami (GPU), na kterých firmy a týmy provozují vlastní AI modely, například jazykové modely. Ve verzích před 2.2.0 obsahuje chybu v přihlašování. Útočník ze sítě se přes ni může stát administrátorem bez jména a hesla. Chyba má označení CVE-2026-102895.
Vývojáři projektu zveřejnili bezpečnostní upozornění na GitHubu 31. července 2026 a chybu opravili ve verzi 2.2.0. Do americké databáze zranitelností NVD se záznam dostal 4. listopadu 2026.
Nejde o teoretickou hrozbu. Podle upozornění vývojářů útočníci chybu zneužili proti instalaci ve verzi 2.1.1, kde si vytvořili vlastní „backendy“, které otevíraly vzdálený přístup k serveru (tzv. reverse shell). Zneužití nahlásil Javier Sixto (ulex.fr). Americká agentura CISA zařadila chybu 9. listopadu 2026 do katalogu aktivně zneužívaných zranitelností KEV a evropská databáze EUVD agentury ENISA ji od stejného dne vede jako zneužívanou.
Proč je to nebezpečné
Jde o chybu v ověřování totožnosti (autentizaci). GPUStack ve výchozím nastavení automaticky považoval každý požadavek, který zdánlivě přišel ze stejného počítače (adresa 127.0.0.1, tzv. localhost), za požadavek vestavěného administrátora. Je to jako vrátný, který pustí do trezoru každého, kdo tvrdí, že přišel zevnitř budovy, a průkaz nekontroluje.
Potíž je v tom, že tento „původ“ jde snadno podvrhnout. Pokud GPUStack běží za reverzní proxy (například nginx) na stejném serveru, což je běžný způsob nasazení, každý požadavek z internetu přichází do GPUStacku z adresy 127.0.0.1. Podle vývojářů pak útočník nepotřebuje nic zvláštního. Druhou cestou je podvržená hlavička v požadavku. Díky ní požadavek vypadá, jako by přišel z localhostu.
Útočník nepotřebuje žádné přihlášení ani spolupráci uživatele, stačí mu síťový přístup ke GPUStacku. Podle upozornění vývojářů pak může:
- prohlížet a měnit uživatele, modely, pracovní uzly (workery) a konfiguraci,
- vytvořit si trvalé administrátorské API klíče, které fungují z jakékoli IP adresy i později,
- číst přístupové údaje workerů a tajné klíče ke cloudovým a jiným poskytovatelům,
- přes administrátorské funkce (vytvoření vlastního inferenčního backendu) spustit vlastní kód na serverech s GPU.
Skóre CVSS 9,8 z 10 (podle CVSS 3.1) uvádí bezpečnostní upozornění projektu na GitHubu a znamená kritickou závažnost: útok přes síť, jednoduchý a bez přihlášení. Katalog CISA KEV zahrnuje chyby, o jejichž zneužívání má CISA důkazy. Skóre EPSS, tedy odhad pravděpodobnosti zneužití v příštích 30 dnech, je jen přibližně 0,33 %, ale u potvrzeného útoku má toto číslo menší váhu než samotný fakt, že chyba už zneužita byla.
Koho se to týká
Týká se to všech instalací GPUStack ve verzích před 2.2.0 (balíček gpustack). Zneužití bylo potvrzeno na verzi 2.1.1.
GPUStack najdete tam, kde si organizace provozuje vlastní AI modely na vlastním hardwaru, například na firemních serverech s grafickými kartami nebo v Kubernetes clusterech. Největší riziko mají instalace dostupné z internetu a ty, které jsou za reverzní proxy na stejném serveru. Takové nastavení vývojáři označují za běžnou podobu vlastní instalace.
CISA upozorňuje, že jde o open-source komponentu, která může být použita i v jiných produktech. Pokud vám AI řešení dodal externí dodavatel, zeptejte se ho, zda obsahuje GPUStack a v jaké verzi.
Netýká se to verzí 2.2.0 a novějších ani organizací, které GPUStack nepoužívají.
Jak zjistit, zda jste zasaženi
Verzi zjistíte na serveru, kde GPUStack běží. Všechny příkazy níže jen čtou údaje a nic nemění. Při instalaci přes pip:
pip show gpustack
U Dockeru se podívejte na obraz a jeho značku verze. Pokud je značka latest nebo nejasná, zjistěte verzi přímo v kontejneru:
docker ps --format '{{.Names}} {{.Image}}' | grep -i gpustack
docker exec NAZEV_KONTEJNERU pip show gpustack
V Kubernetes vypište obrazy nasazení:
kubectl get deploy,statefulset,daemonset -A -o wide | grep -i gpustack
Pokud je verze nižší než 2.2.0, jste zranitelní. Podívejte se také, zda je v konfiguraci nebo v parametrech spuštění nastaveno force_auth_localhost na true. Pokud ne, platí zranitelná výchozí hodnota. Riziko zvyšuje reverzní proxy na stejném serveru, která posílá požadavky na 127.0.0.1 nebo localhost. První příkaz vypíše parametry spuštění GPUStacku, druhý hledá takové nastavení v nginx. Pokud používáte jinou proxy, zkontrolujte její konfiguraci.
ps aux | grep -i '[g]pustack'
grep -rnE "proxy_pass[[:space:]]+https?://(127\.0\.0\.1|localhost)" /etc/nginx/ 2>/dev/null
Jak to opravit
Chyba je opravena ve verzi GPUStack 2.2.0. Podle vývojářů odstranila automatická administrátorská práva pro požadavky z localhostu a zpřísnila zpracování IP adresy klienta. Doporučené pořadí kroků:
- Pokud je GPUStack dostupný z internetu, okamžitě omezte přístup, například jen přes VPN nebo s ověřováním na vstupní bráně.
- Zálohujte databázi a konfiguraci GPUStacku.
- Aktualizujte server i všechny workery na verzi 2.2.0 nebo novější. Verze 2.2.0 kontroluje nesoulad verzí serveru a workerů, proto aktualizujte všechny části společně.
- Po aktualizaci ověřte verzi příkazy z předchozí sekce.
- Zkontrolujte, zda systém nebyl napaden, a vyměňte API klíče a přístupové údaje (viz následující sekce).
Při instalaci přes pip může aktualizace vypadat takto. U Dockeru nebo Kubernetes použijte obraz ve verzi 2.2.0 nebo novější a kontejnery znovu nasaďte.
pip install --upgrade "gpustack>=2.2.0"
Pokud nemůžete aktualizovat hned, vývojáři uvádějí tato dočasná opatření:
- nastavit
force_auth_localhost=true, aby GPUStack vyžadoval přihlášení i u požadavků z localhostu, - nastavit reverzní proxy nebo bránu tak, aby externí provoz nemohl vypadat jako lokální, a na vstupu odstraňovat hlavičku
X-GPUStack-Real-IP, kterou pošle klient, - nepouštět API GPUStacku do nedůvěryhodných sítí, ale držet ho za VPN nebo za ověřováním na okraji sítě.
Aktualizace ani dočasná opatření neodstraní API klíče, které si útočník už vytvořil. Americké federální úřady musí podle CISA chybu vyřešit do 12. listopadu 2026, což je dobré vodítko i pro vás.
Co když už jste mohli být napadeni
Pokud byl váš GPUStack před aktualizací dostupný z internetu nebo z nedůvěryhodné sítě, počítejte s tím, že ho už mohl někdo zneužít. Vývojáři popisují, že útočníci si vytvářeli vlastní inferenční backendy, které otevíraly vzdálený přístup k serveru. Zkontrolujte:
- seznam inferenčních backendů: vlastní (custom) backendy, které jste nevytvořili,
- API klíče: neznámé klíče, zejména s plnými právy,
- uživatele, modely, workery a konfiguraci: nečekané změny nebo nové administrátorské účty,
- servery s GPU: neznámé procesy a neobvyklá odchozí spojení,
- logy reverzní proxy: požadavky na
/v2/inference-backends/from-yamlz neznámých IP adres.
U nginx prohledá tento příkaz aktuální i starší komprimované logy. U jiné proxy hledejte stejnou cestu v jejích lozích.
zgrep -n "inference-backends/from-yaml" /var/log/nginx/access.log*
Útočník mohl číst přístupové údaje workerů a tajné klíče ke cloudovým poskytovatelům. Po aktualizaci je proto vyměňte, i když stopy útoku nenajdete.
Pokud najdete neznámý backend, klíč nebo podezřelý proces, odpojte dotčené servery od sítě, zachovejte logy a přizvěte odborníka na řešení bezpečnostních incidentů. Kód spuštěný na workerech mohl útočníkovi otevřít cestu dál do vaší sítě.