Celah GPUStack CVE-2026-102895: Admin Tanpa Login Sudah Dieksploitasi, Upgrade ke 2.2.2
Oleh Tim APIPedia, Tim Engineering APIPedia · Terbit · 8 menit baca
GPUStack di bawah 2.2.0 memberi hak admin tanpa login lewat reverse proxy dan sudah dieksploitasi. Ini cara cek, upgrade, dan audit API key.

CVE-2026-102895 adalah celah bypass autentikasi di GPUStack yang memberi akses administrator penuh kepada siapa pun tanpa login, dengan skor CVSS 9.8. Semua versi di bawah 2.2.0 terdampak, celah ini sudah dieksploitasi di alam liar, dan CISA memasukkannya ke katalog Known Exploited Vulnerabilities pada 9 November 2026.
GPUStack adalah platform open source untuk mengelola klaster GPU dan menjalankan model AI sendiri (self-hosted LLM). Tim yang memasangnya di balik Nginx atau Caddy pada server yang sama adalah yang paling berisiko. Artikel ini membahas cara kerja celah, siapa yang terdampak, versi aman, skrip cek, langkah upgrade, dan audit setelahnya.
Ringkasan cepat
| Item | Detail |
|---|---|
| CVE | CVE-2026-102895 (advisory GHSA-gj9m-f8ph-pmhr) |
| Produk | GPUStack (paket PyPI gpustack dan image container resminya) |
| Jenis celah | Bypass autentikasi (CWE-287, CWE-290, CWE-346) |
| Skor CVSS 3.1 | 9.8 (kritis), lewat jaringan, tanpa login, tanpa interaksi pengguna |
| Versi terdampak | Semua versi sebelum 2.2.0 |
| Versi aman | 2.2.0 untuk celah ini. Disarankan 2.2.2 karena juga menambal CVE-2026-102894 |
| Status | Dieksploitasi aktif, masuk CISA KEV 9 November 2026, tenggat federal AS 12 November 2026 |
| Dampak | Akses admin penuh, pembuatan API key permanen, pembacaan rahasia, eksekusi kode di host worker |
Bagaimana celah GPUStack ini bekerja?
Celah ini bekerja karena GPUStack memutuskan siapa yang boleh menjadi admin berdasarkan asal jaringan request, bukan kredensial. Request yang tampak berasal dari loopback (127.0.0.1) langsung diperlakukan sebagai akun administrator bawaan selama opsi force_auth_localhost bernilai false, dan itu adalah nilai bawaannya sebelum 2.2.0.

Dua jalur yang membuat request tampak lokal
- Reverse proxy di host yang sama. Bila Nginx, Caddy, atau Traefik berjalan di mesin yang sama dan meneruskan ke
127.0.0.1, semua request dari internet terlihat datang dari loopback. Tidak perlu header atau trik apa pun. - Header alamat IP yang dipercaya. Pada mode gateway bawaan, header
X-GPUStack-Real-IPkiriman klien dipercaya, sehingga nilai loopback palsu berujung ke jalur yang sama.
Artikel ini tidak memuat contoh request serangan. Yang perlu Anda pahami: konfigurasi "aplikasi di balik reverse proxy satu server" yang sangat umum justru menjadi pemicunya.
Siapa yang terdampak?
Yang terdampak adalah semua instalasi GPUStack sebelum 2.2.0 yang API atau panelnya bisa dijangkau dari jaringan tidak tepercaya.
- Server GPUStack di balik reverse proxy pada host yang sama, dengan
force_auth_localhosttidak diset. - Instalasi yang memakai gateway bawaan dan terbuka langsung ke internet.
- Tim AI, lab kampus, dan startup yang membuka panel GPUStack ke publik agar mudah diakses dari mana saja.
- Semua worker yang terdaftar di server tersebut, karena hak admin bisa dipakai untuk menjalankan perintah di host worker.
Risikonya jauh lebih kecil bila GPUStack hanya bisa diakses lewat VPN atau jaringan internal, tetapi tetap perlu di-upgrade.
Seberapa serius celah ini?
Sangat serius: skornya 9.8 dari 10, tidak butuh akun, dan sudah dipakai dalam serangan nyata.

- Eksploitasi terkonfirmasi. Advisory vendor menyatakan celah ini teramati dieksploitasi terhadap instalasi versi 2.1.1. Penyerang membuat backend inferensi sendiri untuk menjalankan reverse shell di host.
- Masuk CISA KEV 9 November 2026 dengan tenggat 12 November untuk instansi sipil federal AS.
- Akses bertahan setelah patch. API key admin yang dibuat penyerang tetap berlaku walau server sudah di-upgrade. Upgrade saja tidak cukup.
- Rahasia ikut terbuka. Kredensial worker dan penyedia cloud yang tersimpan di GPUStack bisa dibaca.
- Ada celah kedua, CVE-2026-102894 (CVSS 9.1) di jalur login SAML, yang memengaruhi 0.7.1 sampai sebelum 2.2.2. Celah itu belum dilaporkan dieksploitasi.
Versi mana yang aman?
Versi yang aman dari CVE-2026-102895 adalah 2.2.0 ke atas, dan target upgrade yang disarankan adalah 2.2.2 ke atas.
| Versi GPUStack | CVE-2026-102895 (loopback) | CVE-2026-102894 (SAML) | Tindakan |
|---|---|---|---|
| Di bawah 2.2.0 | Rentan | Rentan (mulai 0.7.1) | Upgrade segera ke 2.2.2+ |
| 2.2.0 dan 2.2.1 | Sudah ditambal | Rentan | Upgrade ke 2.2.2+ |
| 2.2.2 ke atas | Sudah ditambal | Sudah ditambal | Lanjut ke audit |
Bagaimana cara cek apakah server saya terdampak?
Cek versi GPUStack dan nilai force_auth_localhost. Jalankan skrip berikut di dalam container atau lingkungan tempat GPUStack terpasang. Skrip hanya membaca, dan logika perbandingan versinya sudah diuji di sandbox dengan keluaran tiruan untuk 0.7.1, 2.1.1, 2.2.0, dan 2.2.2.
#!/bin/sh
# Cek paparan CVE-2026-102895 di GPUStack. Hanya membaca.
ver=$(gpustack version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -n1)
[ -z "$ver" ] && ver=$(pip show gpustack 2>/dev/null | awk '/^Version:/{print $2}')
[ -z "$ver" ] && { echo "GPUStack tidak ditemukan di lingkungan ini"; exit 0; }
echo "Versi GPUStack : $ver"
env | grep -i FORCE_AUTH_LOCALHOST || echo "force_auth_localhost tidak diset di environment (cek juga file konfigurasi server)"
maj=$(echo "$ver" | cut -d. -f1); min=$(echo "$ver" | cut -d. -f2); pat=$(echo "$ver" | cut -d. -f3)
if [ "$maj" -lt 2 ] || { [ "$maj" -eq 2 ] && [ "$min" -lt 2 ]; }; then
echo "HASIL: RENTAN CVE-2026-102895. Upgrade ke 2.2.2 atau lebih baru."
elif [ "$maj" -eq 2 ] && [ "$min" -eq 2 ] && [ "$pat" -lt 2 ]; then
echo "HASIL: aman dari CVE-2026-102895, tetapi naikkan ke 2.2.2 untuk celah SAML CVE-2026-102894."
else
echo "HASIL: versi sudah memuat kedua perbaikan."
fi
Untuk instalasi container, jalankan dari host:
docker ps --format '{{.Names}}\t{{.Image}}' | grep -i gpustack
docker exec NAMA_CONTAINER gpustack version
Bagaimana cara update dengan aman?
Urutan amannya: tutup jalur serangan dulu, upgrade ke 2.2.2 atau lebih baru, lalu audit. Jangan melewatkan audit, karena upgrade tidak mencabut akses yang sudah dibuat penyerang.
Langkah 1: mitigasi sementara
- Set
force_auth_localhost=truedi konfigurasi server, lalu restart GPUStack. - Buang header
X-GPUStack-Real-IPkiriman klien di reverse proxy. - Batasi akses ke panel dan API hanya dari VPN atau jaringan internal.
# Nginx: kosongkan header kiriman klien sebelum diteruskan ke GPUStack
location / {
proxy_set_header X-GPUStack-Real-IP "";
proxy_pass http://127.0.0.1:PORT_GPUSTACK;
}
Mitigasi ini hanya menutup CVE-2026-102895. Celah SAML baru tertutup di 2.2.2.
Langkah 2: upgrade dan verifikasi
# instalasi pip
pip install --upgrade 'gpustack>=2.2.2'
# instalasi container: tarik tag 2.2.2 atau lebih baru, lalu BUAT ULANG container
docker pull IMAGE_GPUSTACK:TAG_BARU
docker stop NAMA_CONTAINER && docker rm NAMA_CONTAINER
# jalankan lagi dengan perintah/compose yang sama, memakai tag baru
# verifikasi
docker exec NAMA_CONTAINER gpustack version
Menarik image baru saja tidak mengganti proses yang sedang berjalan. Container harus dibuat ulang. Ikuti panduan upgrade resmi GPUStack untuk langkah migrasi data sesuai cara instalasi Anda.
Bagaimana cara mendeteksi tanda pembobolan?
Belum ada daftar IOC resmi, jadi deteksi dilakukan dengan mengaudit apa yang bisa dibuat seorang admin. Periksa hal berikut:
- User dan API key. Cari akun admin dan API key yang tidak Anda buat, terutama key dengan cakupan penuh.
- Backend inferensi. Bandingkan daftar backend dengan catatan Anda. Backend asing adalah tanda paling kuat.
- Host worker. Cari koneksi keluar yang tidak wajar dan proses shell yang lahir dari proses backend inferensi.
- Log proxy dan server. Cari request API yang berhasil tanpa header autentikasi, serta request yang membawa header
X-GPUStack-Real-IP.
# request dari luar yang membawa header alamat IP (bila proxy mencatat header)
grep -i "x-gpustack-real-ip" /var/log/nginx/*.log 2>/dev/null | tail -n 20
# pemanggilan endpoint pembuatan backend inferensi
grep -h "inference-backends" /var/log/nginx/access.log* 2>/dev/null | grep POST | tail -n 20
# di host worker: koneksi keluar aktif dan proses shell yang mencurigakan
ss -tnp | grep -v "127.0.0.1" | head -n 30
ps -eo pid,ppid,user,etime,cmd --sort=start_time | grep -E "sh -c|bash -i" | grep -v grep
Kalau menemukan tanda pembobolan?
- Putus akses publik ke GPUStack dan isolasi host worker yang mencurigakan.
- Hapus API key, user, dan backend inferensi yang tidak dikenal.
- Rotasi semua kredensial yang tersimpan di GPUStack: token worker, kunci penyedia cloud, dan token registry model.
- Periksa akun cloud untuk resource yang tidak Anda buat, misalnya instans GPU baru.
- Bangun ulang host worker yang pernah menjalankan backend asing dari image bersih.
Pertanyaan yang sering diajukan
Apa itu GPUStack?
GPUStack adalah platform open source untuk mengelola klaster GPU dan menyajikan model AI seperti LLM lewat API. Banyak tim memakainya untuk menjalankan model sendiri di server atau cloud pribadi.
Server saya tidak memakai reverse proxy. Apakah tetap rentan?
Bisa. Pada mode gateway bawaan, header alamat IP kiriman klien dipercaya, sehingga jalur kedua tetap terbuka. Semua versi sebelum 2.2.0 dianggap rentan.
Apakah cukup upgrade ke 2.2.0?
Cukup untuk CVE-2026-102895, tetapi belum untuk celah SAML CVE-2026-102894. Langsung naik ke 2.2.2 atau lebih baru agar keduanya tertutup.
Kalau sudah upgrade, apakah API key lama aman?
Tidak otomatis. Key yang dibuat penyerang sebelum upgrade tetap berlaku. Audit daftar key dan cabut yang tidak dikenal.
GPUStack saya hanya di jaringan internal. Perlu upgrade?
Perlu. Risiko dari internet memang lebih kecil, tetapi siapa pun di jaringan internal bisa menjadi admin tanpa login. Itu masalah bila ada perangkat yang sudah terinfeksi.
Baca juga celah lain yang masuk KEV pekan ini: celah update WordPress CVE-2026-119977. Untuk risiko khas layanan AI, lihat LLMjacking: API key AI dicuri dan Node-RED tanpa login yang dibajak.
Sumber
Topik: #keamanan #cve #gpustack #ai #llm #cisa kev
${c.about}
Tim APIPedia — Tim Engineering APIPedia
Tim engineering di balik APIPedia yang membangun dan memelihara API data Indonesia - ongkir, OCR KTP, data wilayah, BMKG, hingga server MCP - dan menulis panduan integrasinya dari pengalaman langsung.