Jawaban langsung: CVE-2026-94290 membuat user Rancher dengan role user bawaan bisa mendapat hak cluster-admin di cluster local lewat Fleet. CVE-2026-88811 membuat sesi atau token APIAPIPintu resmi yang dipakai 2 sistem untuk saling mengirim data, tanpa orang menyalin data secara manual.Buka glosarium user terkirim ke host pihak ketiga lewat meta proxy. Hari ini, cek versi, update ke 2.15.3, 2.14.7, 2.13.11, atau 2.12.15, lalu ganti token.

Kedua CVE ini mendapat CVSS 3.1 9.1 dari CNA SUSE. Advisory Fleet memberi CVSS 4.0 9.4 dengan label critical. Empat CVE lain di rilis yang sama mendapat skor 6.3 sampai 7.9.

Kondisi utama: Anda memasang Rancher Manager sendiri, dan orang lain selain admin punya akun di Rancher itu. Batas: Artikel ini tidak memuat isi request, payload, atau urutan serangan.

Kami membaca advisory Fleet GHSA-qfmw-gw96-ffcr, advisory Rancher GHSA-x82x-2qj6-5rm2, catatan CVE-2026-94290, catatan CVE-2026-88811, catatan rilis v2.15.3, dan CISA KEV pada 3 November 2026, pukul 13.35 sampai 14.40 WIB. Kami menguji 3 skrip cek di container podman dengan image resmi rancher/rancher:v2.15.2 (rentan) dan v2.15.3 (aman). Container uji tidak menjalankan pod, jadi kami tidak menguji helm upgrade dan controller Fleet.

Masalah: 6 celah di panel pengelola Kubernetes Anda

Satu server Rancher biasanya memegang kunci ke semua cluster Kubernetes yang ia kelola.

Rancher Manager adalah panel open source dari SUSE untuk mengelola banyak cluster Kubernetes dari 1 tempat. Tim DevOps memasangnya di cluster sendiri, yang Rancher sebut cluster local. Cluster local menyimpan kubeconfig dan kredensial setiap cluster turunan.

Pada 29 Oktober 2026, SUSE merilis Rancher 2.15.3, 2.14.7, 2.13.11, 2.12.15, dan 2.11.19. Rilis ini menutup 6 CVE. Catatan CVE dengan skor CVSS 3.1 dari CNA SUSE baru terbit pada 30 Oktober dan 2 November 2026.

Linimasa: rilis 2.15.2 pada 23 September, RC pada 28 Oktober, 5 rilis patch dan 6 advisory pada 29 Oktober, catatan CVE pada 30 Oktober dan 2 November, belum KEV 3 November.
Titik abu-abu: rilis dan catatan lain. Titik teal: rilis yang menutup celah. Titik merah: publikasi advisory dan CVE. Titik amber: status saat artikel ini terbit. Sumber: rilis GitHub rancher/rancher, advisory GitHub, CVE.org, dan CISA KEV.

Jadi patch sudah ada 5 hari sebelum artikel ini terbit. Banyak tim belum tahu, karena skor kritis baru muncul di catatan CVE pada 2 November.

Cara kerja: Fleet dan meta proxy

Dua celah teratas ada di 2 bagian Rancher yang aktif sebagai bawaan: Fleet dan meta proxy.

Bagian ini memakai ringkasan resmi dari advisory. Tujuannya membantu Anda memilih langkah yang tepat, bukan menjelaskan cara menyerang.

Ringkasan CVE-2026-94290 (Fleet)

Fleet adalah alat GitOps bawaan Rancher. Menurut advisory Fleet GHSA-qfmw-gw96-ffcr, controller Fleet tidak membatasi secret kubeconfig mana yang boleh dipakai oleh objek cluster Fleet. Akibatnya user dengan role user bawaan, tanpa izin apa pun di cluster local, bisa mendapat cluster-admin di cluster local.

Hak itu membuka semua secret di cluster local, termasuk kredensial cluster turunan dan token API. Advisory menulis bahwa Fleet aktif sebagai bawaan, dan user biasa memang boleh membuat Fleet workspace. Jadi instalasi bawaan sudah terdampak.

Ringkasan CVE-2026-88811 (meta proxy)

Meta proxy adalah bagian Rancher yang meneruskan request UI ke API penyedia cloud, misalnya saat UI membaca daftar region EC2. Menurut advisory Rancher GHSA-x82x-2qj6-5rm2, proxy ini tidak selalu membuang kredensial Rancher milik user dari request yang ia teruskan.

Akibatnya sesi browser user terkirim ke host penyedia cloud saat user membuka form provisioning Amazon EC2, DigitalOcean, Linode, atau phoenixNAP. Token API juga bisa terkirim bila klien API memanggil proxy tanpa header pilihan kredensial. Pihak yang mengelola atau mengamati host tujuan, termasuk log dan proxy TLS di depannya, bisa membaca kredensial itu.

Skor 6 CVE

Skor berbeda per versi CVSS dan per sumber, jadi tabel ini menulis keduanya. CVSS 3.1 berasal dari catatan CVE CNA SUSE. CVSS 4.0 berasal dari advisory GitHub.

CVEAreaCVSS 3.1CVSS 4.0AksesAman di
CVE-2026-94290Fleet: user dengan role user bawaan bisa mendapat cluster-admin di cluster local9.19.4Akun Rancher biasa2.12.15, 2.13.11, 2.14.7, 2.15.3
CVE-2026-88811Meta proxy: sesi atau token API user terkirim ke host pihak ketiga9.18.8Pemakaian normal UI atau API2.11.19 sampai 2.15.3
CVE-2026-104615Fleet: identitas cluster saat registrasi tidak terikat ke token7.97.3Token registrasi workspace2.12.15 sampai 2.15.3
CVE-2026-88809Meta proxy: allowlist dicek terlambat, request bisa ke layanan internal7.67.1Akun Rancher2.11.19 sampai 2.15.3
CVE-2026-88810WebhookWebhookPesan otomatis yang sebuah sistem kirim ke sistem lain tepat saat sesuatu terjadi, misalnya pesan WhatsApp masuk.Buka glosarium: field inheritedNamespacedRules di GlobalRole tidak dicek7.26.4Hak kelola global role2.15.3 (hanya 2.15.2 terdampak)
CVE-2026-104623Shell cluster local: cek izin tidak ada di setiap rute API6.35.3Akun Rancher2.11.19 sampai 2.15.3
Tiga kartu: CVE-2026-94290 Fleet skor 9.1 dan 9.4, CVE-2026-88811 meta proxy skor 9.1, dan 4 CVE lain skor 6.3 sampai 7.9. Versi aman: 2.15.3, 2.14.7, 2.13.11, 2.12.15.
(1) Kartu merah: 2 celah dengan skor tertinggi. (2) Kartu amber: 4 celah lain. (3) Panel amber: syarat celah. (4) Kotak teal: versi aman. Sumber: advisory GitHub Rancher dan Fleet, serta catatan CVE dari CNA SUSE.

Empat CVE lain butuh akun Rancher atau token registrasi yang sah: GHSA-gx8v-2929-9q95 (registrasi Fleet), GHSA-f9gf-wh3x-jx3v (allowlist meta proxy), GHSA-f898-2c8h-r7jc (validasi GlobalRole), dan GHSA-8x6f-2v58-x6p7 (shell cluster local). Semuanya tertutup di rilis yang sama.

Status eksploitasi per 3 November 2026

Kami tidak menemukan laporan serangan, kode eksploit publik, atau entri CISA KEV untuk 6 CVE ini. CISA menulis "Exploitation: none" pada catatan CVE-2026-94290 dan catatan CVE-2026-88811.

Analisa Rama Digital: CVE-2026-88811 tidak butuh aksi penyerang di Rancher. Kredensial keluar saat pemakaian normal. Jadi anggap token lama sudah terbuka, walaupun belum ada laporan serangan.

Siapa yang paling berisiko

Risiko bergantung pada siapa yang punya akun Rancher dan berapa lama token berlaku, bukan hanya pada versi.

Tabel ini merangkum advisory Fleet GHSA-qfmw-gw96-ffcr dan advisory Rancher GHSA-x82x-2qj6-5rm2.

Kondisi RancherRisikoAlasan
Banyak tim, klien, atau developer punya akun dengan role user bawaanTertinggi1 akun biasa sudah bisa memakai CVE-2026-94290
Token API admin berumur panjang di skrip, Terraform, atau CITinggiToken yang bocor lewat CVE-2026-88811 tetap berlaku sampai Anda menghapusnya
Tim membuat node lewat form EC2, DigitalOcean, Linode, atau phoenixNAPTinggiForm ini memakai meta proxy pada pemakaian normal
Ada node driver custom atau ProxyEndpoint tambahanPeriksaDaftar host yang menerima request proxy jadi lebih panjang
Hanya 1 sampai 2 admin yang login ke RancherPeriksaRisiko CVE-2026-94290 turun, tetapi CVE-2026-88811 tetap berlaku
Sudah versi aman dan token sudah digantiRendahTetap cari tanda dari waktu sebelum update
Enam kartu risiko: banyak user biasa, token API admin berumur panjang, dan form provisioning cloud merah; driver tambahan dan hanya admin amber; sudah aman abu-abu.
Kartu merah: risiko tertinggi. Kartu amber: periksa konfigurasi. Kartu abu-abu: risiko rendah. Kotak bawah: status eksploitasi per 3 November 2026. Sumber: advisory GitHub Rancher dan Fleet, CISA KEV, dan analisa Rama Digital.

Cluster local Rancher sering berjalan di VM yang sama dengan layanan lain. Patch kernel juga penting di host itu, misalnya untuk celah TCP kernel Linux CVE-2026-98432. Tim yang memakai LXD atau Incus untuk node Kubernetes juga perlu membaca celah sertifikat LXD dan Incus CVE-2026-112816.

Versi rentan dan versi aman

Fleet ikut di dalam Rancher, jadi update Rancher juga menaikkan Fleet. Pakai tabel ini untuk menentukan tindakan.

Versi RancherStatus per 3 November 2026TindakanFleet sesudah update
2.15.0 sampai 2.15.2Rentan 6 CVE (88810 hanya di 2.15.2)Update ke 2.15.30.16.3
2.14.0 sampai 2.14.6Rentan 5 CVEUpdate ke 2.14.70.15.8
2.13.0 sampai 2.13.10Rentan 5 CVEUpdate ke 2.13.110.14.12
2.12.0 sampai 2.12.14Rentan 5 CVEUpdate ke 2.12.150.13.17
2.11.0 sampai 2.11.18Rentan, termasuk CVE-2026-88811Update ke 2.11.19, lalu rencanakan naik ke 2.12.15 atau lebih baruFleet 0.12, tanpa patch
2.10 dan lebih lamaTanpa rilis 29 OktoberNaik ke 2.12.15 atau lebih baru-
Tabel 6 lini rilis Rancher: 2.12 sampai 2.15 rentan dan punya patch, 2.11 hanya sebagian aman di 2.11.19, 2.10 dan lebih lama tanpa patch.
Merah: rentan atau tanpa patch. Amber: sebagian aman. Kotak bawah: 2 perintah cek versi. Sumber: advisory GitHub Rancher dan Fleet, serta rilis GitHub rancher/rancher.

Data versi berasal dari 6 advisory GitHub dan catatan rilis v2.15.3. Advisory Fleet tidak menulis versi Rancher 2.11 yang aman. Cek tanggal akhir dukungan lini Anda di halaman siklus produk SUSE.

Prasyarat sebelum mulai

  • Akses kubectl ke cluster local Rancher dengan hak admin.
  • Akses helm ke namespace cattle-system, bila Anda memasang Rancher dengan Helm.
  • Backup Rancher yang baru, misalnya dari operator Rancher Backups atau snapshot etcd.
  • Daftar skrip, pipeline CI, dan alat Terraform yang memakai token API Rancher.
  • Jendela maintenance 30 sampai 60 menit. Semua user harus login lagi sesudah langkah 3.

Langkah 1: Cek versi Rancher dan Fleet

Simpan skrip ini sebagai cek-versi-rancher.sh. Skrip membaca setting server-version dan fleet-version dengan kubectl, atau membaca /rancherversion dari alamat Rancher.

#!/usr/bin/env bash
# Cek versi Rancher Manager dan Fleet terhadap 6 CVE dari rilis keamanan 29 Oktober 2026.
# Data: advisory GitHub rancher/rancher, rancher/fleet, rancher/webhook, dan catatan CVE dari CNA SUSE.
# Pakai dengan kubectl ke cluster local Rancher: bash cek-versi-rancher.sh
# Pakai dengan alamat Rancher: bash cek-versi-rancher.sh https://rancher.contoh.co.id
# Pakai untuk versi yang Anda salin: bash cek-versi-rancher.sh v2.15.2 v2.14.7 v2.10.12
# Skrip hanya membaca. Skrip tidak mengubah apa pun.

# lebih_kecil A B: benar bila versi A di bawah versi B.
lebih_kecil() { [ "$1" != "$2" ] && [ "$(printf '%s\n%s\n' "$1" "$2" | sort -V | head -n1)" = "$1" ]; }

cek() {
  local v="${1#v}" aman=""
  if ! [[ $v =~ ^2\.[0-9]+\.[0-9]+$ ]]; then
    printf '%-9s TIDAK DIKENAL, cocokkan manual dengan advisory Rancher\n' "$1"
    return
  fi
  case "${v%.*}" in
    2.15) aman=2.15.3 ;; 2.14) aman=2.14.7 ;; 2.13) aman=2.13.11 ;; 2.12) aman=2.12.15 ;; 2.11) aman=2.11.19 ;;
  esac
  if [ -z "$aman" ]; then
    if lebih_kecil "$v" 2.11.0; then
      printf '%-9s RENTAN, rilis ini lewat masa dukungan dan tidak mendapat patch\n' "v$v"
      printf '%-9s -> naik ke v2.12.15 atau lebih baru\n' ""
    else
      printf '%-9s TIDAK DIKENAL, cek advisory untuk rilis ini\n' "v$v"
    fi
    return
  fi
  if lebih_kecil "$v" "$aman"; then
    if [ "${v%.*}" = 2.11 ]; then
      printf '%-9s RENTAN, termasuk CVE-2026-88811 (meta proxy)\n' "v$v"
    else
      printf '%-9s RENTAN, termasuk CVE-2026-94290 (Fleet) dan CVE-2026-88811 (meta proxy)\n' "v$v"
    fi
    printf '%-9s -> update ke v%s atau lebih baru\n' "" "$aman"
  elif [ "${v%.*}" = 2.11 ]; then
    printf '%-9s AMAN untuk CVE-2026-88811, tetapi Fleet 0.12 tidak punya patch\n' "v$v"
  else
    printf '%-9s AMAN untuk 6 CVE ini\n' "v$v"
  fi
  if [ "${v%.*}" = 2.11 ]; then
    printf '%-9s CATATAN: advisory Fleet tidak menulis patch untuk 2.11. Rencanakan naik ke v2.12.15 atau lebih baru.\n' ""
  fi
}

# cek_fleet NILAI: NILAI adalah setting fleet-version, contoh 110.0.2+up0.16.2.
cek_fleet() {
  local f="${1##*up}" aman=""
  case "${f%.*}" in
    0.16) aman=0.16.3 ;; 0.15) aman=0.15.8 ;; 0.14) aman=0.14.12 ;; 0.13) aman=0.13.17 ;;
  esac
  if ! [[ $f =~ ^0\.[0-9]+\.[0-9]+$ ]] || [ -z "$aman" ]; then
    printf 'Fleet     %s: cocokkan manual dengan advisory Fleet\n' "${1:-tidak terbaca}"
  elif lebih_kecil "$f" "$aman"; then
    printf 'Fleet     %s RENTAN CVE-2026-94290 -> Fleet %s ikut dengan update Rancher\n' "$f" "$aman"
  else
    printf 'Fleet     %s AMAN untuk CVE-2026-94290\n' "$f"
  fi
}

if (( $# > 0 )) && [[ $1 != http* ]]; then
  for x in "$@"; do cek "$x"; done
  exit 0
fi

if (( $# > 0 )); then
  # Banyak Rancher memakai sertifikat sendiri, jadi skrip memakai -k. Skrip hanya membaca versi.
  json=$(curl -fsSk --max-time 10 "${1%/}/rancherversion") || { echo "Tidak bisa membaca ${1%/}/rancherversion"; exit 1; }
  v=$(sed -nE 's/.*"Version":"([^"]+)".*/\1/p' <<<"$json")
  echo "Sumber: ${1%/}/rancherversion"
  cek "${v:-tidak-terbaca}"
  exit 0
fi

if ! kubectl get settings.management.cattle.io server-version >/dev/null 2>&1; then
  echo "kubectl tidak bisa membaca setting Rancher."
  echo "Pakai kubeconfig cluster local, atau jalankan: bash cek-versi-rancher.sh https://alamat-rancher"
  exit 1
fi
nilai() {
  local v
  v=$(kubectl get settings.management.cattle.io "$1" -o jsonpath='{.value}' 2>/dev/null)
  [ -n "$v" ] || v=$(kubectl get settings.management.cattle.io "$1" -o jsonpath='{.default}' 2>/dev/null)
  echo "$v"
}
echo "Sumber: setting server-version dan fleet-version di cluster local"
cek "$(nilai server-version)"
cek_fleet "$(nilai fleet-version)"
# Dengan kubectl ke cluster local Rancher
bash cek-versi-rancher.sh
# Dengan alamat Rancher, tanpa kubectl
bash cek-versi-rancher.sh https://rancher.example.com
# Cek versi yang Anda salin dari server lain
bash cek-versi-rancher.sh v2.15.2 v2.14.6 v2.13.11 v2.11.18 v2.10.12
# Cara manual tanpa skrip
curl -sk https://rancher.example.com/rancherversion
kubectl get settings.management.cattle.io server-version fleet-version
Terminal: skrip cek versi membaca Rancher v2.15.2 dan Fleet 0.16.2 sebagai RENTAN. Mode manual: 2.14.6 dan 2.11.18 rentan, 2.13.11 aman, 2.10.12 tanpa patch.
Container uji menjalankan image resmi Rancher v2.15.2. Mode alamat membaca /rancherversion dari Rancher di container yang sama. Sumber: uji Rama Digital di container podman rancher/rancher:v2.15.2, 3 November 2026.

Endpoint /rancherversion menjawab tanpa login, jadi mode alamat cocok untuk tim yang tidak punya akses kubectl. Mode itu hanya membaca versi Rancher, bukan versi Fleet.

Cek hasil: "RENTAN" berarti lanjut ke langkah 2 dan 3 hari ini. "AMAN" tetap berarti jalankan langkah 3b dan 5, karena token lama mungkin sudah terbuka.

Langkah 2: Cek Fleet workspace, proxy, dan token

Tiga pengaturan ini menentukan seberapa besar dampak kedua celah di instalasi Anda.

Simpan skrip ini sebagai cek-pengaturan-rancher.sh. Skrip membaca global role yang boleh membuat Fleet workspace, host tujuan meta proxy, dan umur sesi serta token.

#!/usr/bin/env bash
# Cek pengaturan Rancher yang menentukan dampak CVE-2026-94290 (Fleet) dan CVE-2026-88811 (meta proxy).
# Data: advisory GitHub rancher/fleet GHSA-qfmw-gw96-ffcr dan rancher/rancher GHSA-x82x-2qj6-5rm2.
# Pakai dengan kubectl ke cluster local Rancher: bash cek-pengaturan-rancher.sh
# Skrip hanya membaca. Skrip tidak mengubah apa pun.

k() { kubectl "$@" 2>/dev/null; }
nilai() {
  local v
  v=$(k get settings.management.cattle.io "$1" -o jsonpath='{.value}')
  [ -n "$v" ] || v=$(k get settings.management.cattle.io "$1" -o jsonpath='{.default}')
  echo "$v"
}
k get settings.management.cattle.io server-version >/dev/null || { echo "kubectl tidak bisa membaca cluster local Rancher."; exit 1; }

echo "== 1. Hak membuat Fleet workspace (CVE-2026-94290)"
k get globalroles.management.cattle.io -o jsonpath='{range .items[*]}{.metadata.name}{"|"}{.newUserDefault}{"|"}{.rules}{"\n"}{end}' |
  grep -E '"fleetworkspaces"[^]]*\],"verbs":\[[^]]*"(create|\*)"' |
  while IFS='|' read -r nama baru _; do
    [ "$nama" = admin ] && continue
    jumlah=$(k get globalrolebindings.management.cattle.io -o jsonpath='{range .items[*]}{.globalRoleName}{"\n"}{end}' | grep -cx "$nama")
    if [ "$baru" = true ]; then
      printf '  %-12s boleh membuat Fleet workspace, %s binding, otomatis untuk setiap user baru\n' "$nama" "$jumlah"
    else
      printf '  %-12s boleh membuat Fleet workspace, %s binding\n' "$nama" "$jumlah"
    fi
  done
echo "  Fleet workspace sekarang: $(k get fleetworkspaces.management.cattle.io -o jsonpath='{.items[*].metadata.name}')"

echo "== 2. Host tujuan meta proxy (CVE-2026-88811)"
echo "  whitelist-domain: $(nilai whitelist-domain)"
k get nodedrivers.management.cattle.io -o jsonpath='{range .items[?(@.spec.active==true)]}{.metadata.name}{" "}{.spec.whitelistDomains}{"\n"}{end}' |
  while read -r nama domain; do
    [ -z "$domain" ] && continue
    n=$(grep -o '"[^"]*"' <<<"$domain" | wc -l)
    contoh=$(grep -o '"[^"]*"' <<<"$domain" | head -n1 | tr -d '"')
    printf '  node driver %-13s %s domain, contoh %s\n' "$nama" "$n" "$contoh"
  done
pe=$(k get proxyendpoints.management.cattle.io -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}')
bawaan=$(grep -c '^rancher-' <<<"$pe")
tambahan=$(grep -v '^rancher-' <<<"$pe" | grep -c .)
echo "  ProxyEndpoint: $bawaan bawaan, $tambahan tambahan admin"
cc=$(k -n cattle-global-data get secrets -o name | grep -c '/cc-')
echo "  Cloud credential: $cc (form provisioning memakai meta proxy)"

echo "== 3. Umur sesi dan token"
echo "  auth-user-session-ttl-minutes: $(nilai auth-user-session-ttl-minutes) menit"
echo "  auth-token-max-ttl-minutes:    $(nilai auth-token-max-ttl-minutes) menit"
total=$(k get tokens.management.cattle.io -o name | wc -l)
lama=$(k get tokens.management.cattle.io -o jsonpath='{range .items[*]}{.ttl}{"\n"}{end}' | awk '$1 == 0 || $1 > 2592000000' | wc -l)
echo "  Token: $total, berlaku lebih dari 30 hari atau tanpa batas: $lama"
bash cek-pengaturan-rancher.sh
Terminal: role user bawaan boleh membuat Fleet workspace untuk setiap user baru. whitelist-domain forums.rancher.com, 3 ProxyEndpoint bawaan, umur token maksimal 129600 menit.
Semua nilai adalah nilai bawaan Rancher v2.15.2 sesudah instalasi baru. Workspace tim-dev adalah data dummy untuk langkah 5. Sumber: uji Rama Digital di container podman rancher/rancher:v2.15.2, 3 November 2026.

Di uji kami, role user bawaan boleh membuat Fleet workspace dan otomatis berlaku untuk setiap user baru. Umur token maksimal bawaan adalah 129600 menit, yaitu 90 hari.

Cek hasil: catat jumlah binding role user, jumlah ProxyEndpoint tambahan, dan jumlah token berumur lebih dari 30 hari. Angka ini menentukan prioritas langkah 3b dan 4.

Langkah 3: Update ke versi aman

Hanya update yang menutup 6 celah ini. Perintah ini mengikuti panduan upgrade Rancher untuk instalasi Helm.

# 1. Buat backup lebih dulu, misalnya dengan operator Rancher Backups atau snapshot etcd cluster local.
# 2. Simpan nilai Helm yang sekarang
helm get values rancher -n cattle-system -o yaml > nilai-rancher.yaml
# 3. Ambil chart terbaru. Cek nama repo Anda dengan: helm repo list
helm repo update
# 4. Update ke versi aman di lini Anda: 2.15.3, 2.14.7, 2.13.11, atau 2.12.15
helm upgrade rancher rancher-stable/rancher -n cattle-system -f nilai-rancher.yaml --version 2.15.3
kubectl -n cattle-system rollout status deploy/rancher
# 5. Cek lagi. Fleet naik bersama chart bawaan Rancher.
bash cek-versi-rancher.sh
Terminal: skrip cek versi menulis v2.15.3 AMAN untuk 6 CVE ini dan Fleet 0.16.3 AMAN. Lalu 1 token sesi terhapus, dan 1 API key tersisa untuk diganti.
Uji tidak menjalankan helm upgrade, karena container uji memakai image v2.15.3 secara langsung. Token berasal dari login uji di container itu. Sumber: uji Rama Digital di container podman rancher/rancher:v2.15.3, 3 November 2026.
  1. Buat backup lebih dulu. Backup adalah jalan kembali tercepat bila update gagal.
  2. Pilih versi di lini yang sama dengan versi Anda sekarang. Contoh: 2.14.x ke 2.14.7.
  3. Jalankan lagi cek-versi-rancher.sh. Hasil yang benar: "AMAN untuk 6 CVE ini" untuk Rancher dan Fleet.
  4. Bila Anda memasang Rancher di 1 container Docker, ikuti panduan upgrade Docker di dokumentasi Rancher.

3b. Ganti token dan putus semua sesi sesudah update

advisory Rancher GHSA-x82x-2qj6-5rm2 meminta admin menganggap kredensial yang mungkin sudah terkirim sebagai bocor. Hapus token API lama dan putus semua sesi login sesudah update.

# Putus semua sesi login. Semua user, termasuk Anda, harus login lagi.
kubectl get tokens.management.cattle.io -o jsonpath='{range .items[?(@.isDerived==false)]}{.metadata.name}{"\n"}{end}' | xargs -r kubectl delete tokens.management.cattle.io
# Lihat API key yang tersisa
kubectl get tokens.management.cattle.io -o custom-columns=NAME:.metadata.name,DESCRIPTION:.description,TTL:.ttl,LAST-USED:.lastUsedAt
# Buat key baru di menu Account & API Keys, pasang di skrip atau CI, lalu hapus key lama
kubectl delete tokens.management.cattle.io token-lama

Kami menguji perintah hapus sesi dan daftar token di container v2.15.3. Rancher 2.12 ke atas juga punya API token baru tokens.ext.cattle.io. Cek juga dengan kubectl get tokens.ext.cattle.io.

Perubahan yang perlu Anda tahu

  • Label secret kubeconfig Fleet: cluster Fleet yang Anda daftarkan sendiri dengan kubeConfigSecretNamespace ke namespace lain tidak lagi di-import. Tambah label fleet.cattle.io/kubeconfig-referenceable-from ke secret itu.
  • Header proxy: klien API yang meneruskan header Authorization sendiri lewat meta proxy kini harus memakai header X-API-Auth-Header. UI Rancher sudah memakai header ini.
  • Allowlist proxy: Rancher kini menolak tujuan di luar allowlist sebelum koneksi dibuat.
Tangga 7 baris: cek versi, cek pengaturan, update, ganti token dan sesi, 2 langkah berlabel tidak membuat aman (cabut hak Fleet workspace, turunkan umur token), lalu cari tanda.
(1) sampai (3b): urutan perbaikan. (4a) dan (4b): langkah sementara. Label merah mengingatkan bahwa hanya update yang menutup celah. Sumber: advisory GitHub Rancher dan Fleet, dokumentasi upgrade Rancher, dan analisa Rama Digital.

Cek hasil: skrip versi menulis "AMAN", semua user bisa login lagi, dan pipeline CI berjalan dengan API key baru.

Langkah 4: Kurangi dampak sampai update selesai

Langkah ini mengurangi dampak, tetapi tidak menutup celah.

Advisory menulis bahwa tidak ada workaround lengkap selain update. Analisa Rama Digital: kami memilih 2 langkah dari bagian Workarounds di kedua advisory. Kondisi: update belum bisa jalan hari ini. Batas: user yang sudah punya akun tetap bisa memakai celah lain di rilis ini.

4a. Cabut hak membuat Fleet workspace dari user biasa

Di UI Rancher, buka Users & Authentication › Role Templates › Global. Clone role Standard User, hapus verb create pada fleetworkspaces, lalu jadikan role baru itu bawaan untuk user baru. Pindahkan user lama ke role baru satu per satu.

advisory Fleet GHSA-qfmw-gw96-ffcr juga menyarankan policy admission, misalnya Kubewarden, yang menolak cluster Fleet dengan kubeConfigSecretNamespace ke namespace lain. Kami tidak menguji langkah UI dan policy ini, karena container uji tidak menjalankan UI dan webhook.

4b. Turunkan umur sesi dan token

Umur yang pendek membuat token yang bocor cepat tidak berlaku. Nilai di contoh ini adalah pilihan kami: 4 jam untuk sesi dan 1 hari untuk token.

# Turunkan umur sesi login ke 4 jam dan umur token maksimal ke 1 hari
kubectl patch settings.management.cattle.io auth-user-session-ttl-minutes --type=merge -p '{"value":"240"}'
kubectl patch settings.management.cattle.io auth-token-max-ttl-minutes --type=merge -p '{"value":"1440"}'
bash cek-pengaturan-rancher.sh
# Batal: kembalikan ke nilai bawaan
# kubectl patch settings.management.cattle.io auth-user-session-ttl-minutes --type=merge -p '{"value":""}'
# kubectl patch settings.management.cattle.io auth-token-max-ttl-minutes --type=merge -p '{"value":""}'
Terminal: 2 perintah kubectl patch mengubah umur sesi ke 240 menit dan umur token maksimal ke 1440 menit. Skrip pengaturan membaca nilai baru itu.
Nilai baru hanya berlaku untuk sesi dan token baru. Token lama tetap berlaku sampai Anda menghapusnya di langkah 3. Sumber: uji Rama Digital di container podman rancher/rancher:v2.15.2, 3 November 2026.

Buat cloud credential, node template, dan machine config lewat API atau kubectl, bukan lewat form provisioning EC2, DigitalOcean, Linode, dan phoenixNAP. Hapus juga host di whitelist-domain dan ProxyEndpoint tambahan yang tidak Anda pakai.

Cek hasil: skrip pengaturan menulis umur sesi dan token yang baru, dan role user biasa tidak lagi muncul di bagian 1.

Langkah 5: Cari tanda pemakaian

Celah ini ada sebelum Anda update, jadi cari tanda dari waktu sebelum update juga.

Simpan skrip ini sebagai cek-tanda-rancher.sh. Skrip membaca binding cluster-admin, cluster Fleet, Fleet workspace, deployment fleet-agent, dan token. Skrip mencetak nama objek dan tanggal, bukan isi secret.

#!/usr/bin/env bash
# Cari tanda bahwa CVE-2026-94290 (Fleet) atau CVE-2026-88811 (meta proxy) sudah dipakai.
# Data: bagian Workarounds di advisory GitHub rancher/fleet GHSA-qfmw-gw96-ffcr dan rancher/rancher GHSA-x82x-2qj6-5rm2.
# Pakai dengan kubectl ke cluster local Rancher: bash cek-tanda-rancher.sh [TANGGAL-MULAI]
# Contoh: bash cek-tanda-rancher.sh 2026-09-01
# Skrip hanya membaca. Skrip mencetak nama objek dan tanggal, bukan isi secret.

SEJAK="${1:-2026-09-01}"
k() { kubectl "$@" 2>/dev/null; }
k get settings.management.cattle.io server-version >/dev/null || { echo "kubectl tidak bisa membaca cluster local Rancher."; exit 1; }
tanda=0
periksa=0
ada=0
kosong() { (( ada == 0 )) && echo "  tidak ada"; ada=0; }
echo "Cek objek yang dibuat atau dipakai sejak $SEJAK"

echo "== 1. Binding cluster-admin baru di cluster local"
while IFS='|' read -r waktu nama subjek; do
  [[ $waktu < $SEJAK ]] || [ "$nama" = cluster-admin ] && continue
  catatan=""; [[ $nama == globaladmin-* ]] && catatan=" (admin global Rancher)"
  printf '  PERIKSA %s %s -> %s%s\n' "${waktu%%T*}" "$nama" "$subjek" "$catatan"
  periksa=$((periksa + 1)); ada=1
done < <(k get clusterrolebindings -o jsonpath='{range .items[?(@.roleRef.name=="cluster-admin")]}{.metadata.creationTimestamp}{"|"}{.metadata.name}{"|"}{.subjects[*].name}{"\n"}{end}')
kosong

echo "== 2. Cluster Fleet yang memakai kubeconfig dari namespace lain"
while IFS='|' read -r ns nama sns; do
  [ -z "$sns" ] || [ "$sns" = "$ns" ] && continue
  if [ "$sns" = fleet-default ]; then
    printf '  PERIKSA %s/%s memakai secret di %s (bisa sah, cek pemiliknya)\n' "$ns" "$nama" "$sns"
    periksa=$((periksa + 1))
  else
    printf '  TANDA   %s/%s memakai secret di %s\n' "$ns" "$nama" "$sns"
    tanda=$((tanda + 1))
  fi
  ada=1
done < <(k get clusters.fleet.cattle.io -A -o jsonpath='{range .items[*]}{.metadata.namespace}{"|"}{.metadata.name}{"|"}{.spec.kubeConfigSecretNamespace}{"\n"}{end}')
kosong

echo "== 3. Fleet workspace baru buatan user"
while IFS='|' read -r waktu nama pembuat; do
  [[ $waktu < $SEJAK ]] && continue
  printf '  PERIKSA %s %s, dibuat oleh %s\n' "${waktu%%T*}" "$nama" "${pembuat:-tidak tercatat}"
  periksa=$((periksa + 1)); ada=1
done < <(k get fleetworkspaces.management.cattle.io -o jsonpath='{range .items[*]}{.metadata.creationTimestamp}{"|"}{.metadata.name}{"|"}{.metadata.annotations.field\.cattle\.io/creatorId}{"\n"}{end}' | grep -vE '\|fleet-(default|local)\|')
kosong

echo "== 4. Agent Fleet di cluster local di luar namespace sistem"
while read -r ns; do
  [ -z "$ns" ] || [ "$ns" = cattle-fleet-local-system ] && continue
  printf '  TANDA   deployment fleet-agent di namespace %s\n' "$ns"
  tanda=$((tanda + 1)); ada=1
done < <(k get deploy -A -o jsonpath='{range .items[?(@.metadata.name=="fleet-agent")]}{.metadata.namespace}{"\n"}{end}')
kosong

echo "== 5. Token yang dipakai sejak tanggal itu (ganti sesudah update)"
while IFS='|' read -r nama user ttl pakai; do
  [ -z "$pakai" ] || [[ $pakai < $SEJAK ]] && continue
  if [ "$ttl" = 0 ]; then umur="tanpa masa berlaku"
  elif (( ttl >= 172800000 )); then umur="berlaku $((ttl / 86400000)) hari"
  else umur="berlaku $((ttl / 3600000)) jam"; fi
  printf '  GANTI   %s milik %s, %s, terakhir dipakai %s\n' "$nama" "$user" "$umur" "${pakai%%T*}"
  ada=1
done < <(k get tokens.management.cattle.io -o jsonpath='{range .items[*]}{.metadata.name}{"|"}{.userId}{"|"}{.ttl}{"|"}{.lastUsedAt}{"\n"}{end}')
kosong

echo "Hasil: TANDA $tanda, PERIKSA $periksa."
if (( tanda > 0 )); then
  echo "Ikuti respons insiden di langkah 5."
fi
bash cek-tanda-rancher.sh 2026-09-01
Terminal: skrip tanda menemukan 1 TANDA (cluster Fleet tim-dev/uji-a memakai secret di fleet-local) dan 4 PERIKSA, lalu 2 token yang harus diganti.
Workspace tim-dev, 2 cluster Fleet, user u-dummy01, dan binding uji-tim-dev-admin adalah data dummy. Controller Fleet tidak berjalan di container uji. Sumber: uji Rama Digital di container podman rancher/rancher:v2.15.2, 3 November 2026.
Dua kolom tanda: di cluster local (cluster Fleet lintas namespace, Fleet workspace baru, fleet-agent baru, cluster-admin baru) dan di token serta log audit.
Kolom amber: tanda di cluster local. Kolom merah: tanda di token dan log. Kotak bawah: langkah bila Anda menemukan 1 tanda saja. Sumber: bagian Workarounds di advisory GitHub Rancher dan Fleet, dan analisa Rama Digital.

Bagian 1 sampai 4 berasal dari tanda yang advisory Fleet GHSA-qfmw-gw96-ffcr sebut di bagian Workarounds. Cluster Fleet di workspace selain fleet-default memang sah memakai secret di fleet-default, jadi skrip menulis PERIKSA untuk kasus itu. Secret dari fleet-local berarti kredensial cluster local, jadi skrip menulis TANDA.

Cek hasil: skrip menulis "TANDA 0", setiap PERIKSA punya pemilik yang Anda kenal, dan setiap token di bagian 5 sudah diganti. Log bisa dihapus penyerang, jadi tidak ada tanda belum berarti aman.

Bila ada 1 tanda saja, simpan log audit Rancher dan Kubernetes sebagai bukti. Hapus binding, Fleet workspace, dan cluster Fleet yang asing. Hapus semua token Rancher, lalu ganti kredensial cloud dan kubeconfig setiap cluster turunan, karena kredensial itu tersimpan di cluster local.

Bila cluster menyimpan data pelanggan, UU 27/2022 tentang Pelindungan Data Pribadi mewajibkan pemberitahuan tertulis paling lambat 3 kali 24 jam sesudah kebocoran data pribadi. Baca juga panduan security, privacy, dan UU PDP untuk perusahaan.

Contoh: 1 pagi respons untuk 3 instalasi Rancher

Simulasi ini memakai data dummy. Nama instalasi, waktu, dan hasil bukan data pelanggan.

Waktu (WIB)Instalasi dummyYang dicekHasilTindakan
08.00rancher-prod (2.14.6, 40 user)Langkah 1 dan 2RENTAN, role user aktif untuk 38 bindingLangkah 4a, lalu update malam ini
08.30rancher-dev (2.15.2, EC2 provisioning)Langkah 1 dan 2RENTAN, 4 cloud credential, token CI 90 hariUpdate siang ini, lalu langkah 3b
09.00rancher-lama (2.10.12)Langkah 1RENTAN, tanpa patchRencanakan naik lini, langkah 4 sampai saat itu
09.30rancher-prodLangkah 5TANDA 1: cluster Fleet memakai secret fleet-localRespons insiden, ganti semua kredensial

Pelajaran dari simulasi: versi aman tidak membuktikan cluster bersih. Langkah 5 tetap perlu di setiap instalasi.

Siapa yang memasang patch

Tanggung jawab patch berbeda per jenis layanan, jadi tabel ini membantu Anda tahu siapa yang bergerak hari ini.

Jenis layananPemegang patchYang Anda kerjakan
Rancher yang Anda pasang sendiri dengan HelmTim AndaLangkah 1 sampai 5
Rancher Prime dengan dukungan SUSETim Anda, dengan bantuan SUSEBuka tiket SUSE bila update gagal, lalu langkah 3b dan 5
Rancher yang dikelola vendor atau MSPVendor, sesuai kontrakMinta bukti versi tertulis, lalu ganti token Anda sendiri
Rancher di atas EKS, AKS, atau GKETim Anda. Penyedia cloud hanya menambal KubernetesLangkah 1 sampai 5 tetap berlaku

Rekomendasi Rama Digital: perlakukan Rancher seperti kunci utama semua cluster. Batasi siapa yang punya akun, pakai token berumur pendek, dan update panel lain di pipeline yang sama, misalnya untuk peringatan GitLab CVE-2026-97229. Tim yang mengelola VPS dengan panel hosting juga perlu membaca peringatan Control Web Panel CVE-2026-77876.

Checklist hari ini

  1. Buat daftar semua instalasi Rancher. Pemilik: tim platform. Bukti: daftar alamat dan versi.
  2. Cek versi dengan langkah 1. Pemilik: admin Rancher. Bukti: output skrip.
  3. Cek pengaturan dengan langkah 2. Pemilik: admin Rancher. Bukti: output skrip.
  4. Pasang langkah 4 di setiap instalasi yang belum bisa update hari ini. Pemilik: admin Rancher. Bukti: output skrip pengaturan.
  5. Buat backup, lalu update ke versi aman. Pemilik: admin Rancher. Bukti: output skrip sesudah update.
  6. Hapus sesi dan ganti API key. Pemilik: admin Rancher dan pemilik pipeline. Bukti: daftar token baru.
  7. Cari tanda dengan langkah 5. Pemilik: admin Rancher dan tim keamanan. Bukti: output skrip.

Tanya jawab

Apakah celah ini sudah dipakai menyerang?

Per 3 November 2026, kami tidak menemukan laporan serangan, dan 6 CVE ini belum masuk CISA KEV. Tetapi CVE-2026-88811 mengirim kredensial pada pemakaian normal, jadi tetap ganti token.

Saya satu-satunya user Rancher. Apakah saya tetap harus update?

Ya. Risiko CVE-2026-94290 turun, tetapi sesi Anda tetap bisa terkirim lewat meta proxy. Update, lalu ganti API key Anda.

Apakah update Rancher juga menaikkan Fleet?

Ya. Fleet ikut di chart bawaan Rancher. Jalankan langkah 1 sesudah update untuk melihat versi Fleet yang baru.

Apakah cluster turunan juga harus di-update?

Patch ada di Rancher dan Fleet di cluster local. Tetapi kredensial cluster turunan tersimpan di cluster local, jadi ganti kredensial itu bila langkah 5 menemukan tanda.

Rancher saya masih 2.11. Apa yang saya kerjakan?

Update ke 2.11.19 untuk menutup celah meta proxy. Advisory Fleet tidak menulis patch untuk 2.11, jadi rencanakan naik ke 2.12.15 atau lebih baru.

Apakah menurunkan umur token bisa menggantikan update?

Tidak. Langkah itu hanya mempersingkat waktu token yang bocor tetap berlaku. Update tetap wajib.

Apakah skrip cek mengubah sesuatu di cluster saya?

Tidak. Ketiga skrip hanya membaca. Perintah yang mengubah sesuatu hanya ada di langkah 3 dan 4, dan setiap perintah ditulis terpisah.

Langkah berikutnya

Batas yang tetap berlaku: langkah 4 tidak menutup celah, dan update tidak menghapus akses yang sudah dipakai penyerang. Bila Rancher Anda menunjukkan tanda di langkah 5, atau Anda butuh bantuan audit dan pemulihan, pakai Vibe Code Rescue. Untuk 1 masalah mendesak hari ini, jadwalkan sesi 30 menit.

Sumber