Apa yang terjadi
get_current_user di gpustack/api/auth.py memperlakukan sumber loopback sebagai administrator bawaan ketika force_auth_localhost bernilai false (nilai default). Karena pengambil IP klien mempercayai peer reverse-proxy pada host yang sama atau nilai loopback X-GPUStack-Real-IP yang disediakan klien, permintaan yang sepenuhnya dari jarak jauh dapat menyamar sebagai localhost. Ini memberikan akses administrator penuh tanpa autentikasi, termasuk pengungkapan rahasia dan RCE melalui endpoint inference-backends-from-yaml.
Mengapa penting
GPUStack digunakan untuk melayani dan menyediakan model AI pada armada GPU. Aktor jarak jauh tanpa autentikasi dapat mengambil alih bidang kontrol klaster penyajian AI, membaca kredensial cloud/worker, dan mengeksekusi kode pada manajer — mengubah satu port terbuka menjadi kompromi penuh infrastruktur penyajian model AI.
Vektor serangan
Permintaan jarak jauh dapat dibuat tampak berasal dari 127.0.0.1 karena client_ip_getter menerima peer reverse-proxy pada host yang sama atau nilai loopback X-GPUStack-Real-IP yang disediakan klien. Penyerang tanpa autentikasi kemudian mencapai get_current_user-sebagai-admin, memungkinkan perubahan pengguna/model, pembuatan kunci API admin yang persisten, pengungkapan rahasia worker dan penyedia cloud, serta eksekusi kode melalui POST /v2/inference-backends/from-yaml.
Sistem yang terdampak
GPUStack < 2.2.0 (juga CVE-2026-102894 bypass SAML di 0.7.1–2.2.2 dan CVE-2026-103002 celah authz cluster_apiserver_proxy di 2.2.0–2.2.2)
Mitigasi
Tingkatkan ke GPUStack 2.2.0 (atau 2.2.2 untuk masalah SAML/proxy); lihat GHSA-gj9m-f8ph-pmhr dan tag v2.2.0. Tinjau kunci API admin dan rahasia worker/cloud yang dibuat sebelum peningkatan.