Jawaban langsung: CVE-2026-115731 membuat setiap pemegang sertifikat agentAgent AIProgram AI yang mengerjakan langkah pekerjaan sendiri, misalnya membaca pesan, menyiapkan balasan, lalu mencatat hasilnya.Buka glosarium Puppet bisa menjalankan kode di server Puppet lewat laporan agent. CVE-2026-115732 membuat 1 node bisa menyamar jadi node lain lewat nama sertifikat yang mirip. Hari ini, cek versi, update ke OpenVox 8.18.0, Puppet Core 8.22.2, atau PE 2025.12.1, lalu restart server.

Perforce memberi CVSS 4.0 9.4 untuk CVE-2026-115731 dan 9.0 untuk CVE-2026-115732. OpenVox memberi 9.4 dan 9.5. Kedua CVE berlabel critical.

Kondisi utama: Anda menjalankan server Puppet, OpenVox, atau Puppet Enterprise sendiri. Batas: Artikel ini tidak memuat isi request, payload, atau urutan serangan.

Kami membaca advisory Perforce Report Deserialization Code Execution, advisory Perforce Certificate Name Authorization Bypass, advisory OpenVox GHSA-ffr6-rwpm-p5wq, advisory OpenVox GHSA-q4hm-33rc-572g, catatan CVE-2026-115731, catatan CVE-2026-115732, blog Vox Pupuli 3 November 2026, riset Neodyme, dan CISA KEV pada 4 November 2026, pukul 13.35 sampai 13.55 WIB. Kami menguji 3 skrip cek di container podman dengan image resmi openvoxserver:8.17.0 (rentan) dan 8.18.0 (aman), dan dengan paket resmi OpenVox di Ubuntu 24.04. Kami tidak menguji Puppet Enterprise, Puppet Core, dan serangan.

Masalah: 1 server Puppet memegang kunci semua server Anda

Server Puppet menentukan isi setiap server yang ia kelola, jadi celah di server Puppet adalah celah di semua server itu.

Puppet adalah alat configuration management. Tim DevOps memakainya untuk memasang paket, user, dan konfigurasi di puluhan sampai ribuan server dari 1 tempat. OpenVox adalah fork komunitas dari Puppet yang dikelola Vox Pupuli.

Setiap server yang dikelola menjalankan agent. Agent memegang sertifikat dari CA di server Puppet, lalu meminta catalog dan mengirim laporan. Catalog sering memuat password database, token APIAPIPintu resmi yang dipakai 2 sistem untuk saling mengirim data, tanpa orang menyalin data secara manual.Buka glosarium, dan kunci lain.

Pada 3 November 2026, Perforce dan OpenVox merilis patch bersama untuk 2 celah di server Puppet. Neodyme, tim yang menemukan celah ini, menerbitkan risetnya di hari yang sama.

Linimasa: OpenVox 8.17.0 pada 7 Oktober, advisory openvoxdb 21 Oktober, rilis 29 Oktober masih rentan, patch dan advisory 3 November, belum KEV 4 November.
Titik abu-abu: rilis dan riset. Titik teal: rilis yang menutup celah. Titik merah: publikasi advisory dan CVE. Titik amber: status dan advisory image. Sumber: rilis GitHub OpenVox, advisory Perforce dan OpenVox, blog Neodyme, dan CISA KEV.

Rilis OpenVox 29 Oktober belum menutup celah ini. Jadi server yang baru Anda update minggu lalu tetap rentan.

Cara kerja: laporan agent dan nama sertifikat

Dua celah ini ada di 2 jalur yang setiap agent pakai setiap 30 menit: kirim laporan dan cek izin.

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

Ringkasan CVE-2026-115731 (laporan agent)

Menurut catatan CVE-2026-115731, kode pemroses laporan di Puppet Server membaca data laporan tanpa batas tipe yang aman. Klien dengan sertifikat agent yang ditandatangani CA bisa menjalankan kode di server sebagai user layanan Puppet.

Catatan CVE juga menulis syarat penting: bila CA memakai autosign tanpa verifikasi kuat, penyerang tanpa akun bisa mendapat sertifikat itu. riset Neodyme menulis bahwa akses ini bisa membuka kunci CA dan catalog semua node.

Ringkasan CVE-2026-115732 (nama sertifikat)

Menurut catatan CVE-2026-115732, pencocokan nama sertifikat di komponen trapperkeeper-authorization menerima nama yang lebih panjang atau lebih pendek dari nama host yang diizinkan. Contoh dari advisory OpenVox GHSA-q4hm-33rc-572g: sertifikat untuk nama yang memperpanjang nama sebuah node lolos sebagai node itu.

Akibatnya 1 node bisa membaca catalog node lain, termasuk rahasia di dalamnya, dan mengirim fakta palsu. Di Puppet Enterprise, Perforce menulis bahwa celah ini juga membuka administrasi CA dan perintah jarak jauh di node.

Skor 2 CVE dan 1 advisory image

Skor berbeda per sumber, jadi tabel ini menulis keduanya. Advisory OpenVox menilai CVE-2026-115732 tanpa syarat login, jadi skornya lebih tinggi.

IDAreaCVSS 4.0 PerforceCVSS 4.0 OpenVoxAksesAman di
CVE-2026-115731Laporan agent: data laporan menjalankan kode di server Puppet9.49.4Sertifikat agent yang sahOpenVox 8.18.0, 9.2.0, Puppet Core 8.22.2, 9.1.3
CVE-2026-115732Nama sertifikat: 1 node diizinkan sebagai node lain9.09.5Sertifikat dengan nama yang miripRilis yang sama
GHSA-c4wc-g5pp-7wfpImage openvoxdb 8.15.0: ALLOWLIST tidak berlaku-9.9Akses jaringan ke OpenVoxDBImage 8.17.0, saran Vox Pupuli 8.18.0
Tiga kartu: CVE-2026-115731 laporan agent skor 9.4, CVE-2026-115732 nama sertifikat skor 9.0 dan 9.5, image openvoxdb skor 9.9. Aman: OpenVox 8.18.0, Puppet Core 8.22.2.
(1) Kartu merah: 2 CVE di server Puppet. (2) Kartu amber: celah image openvoxdb. (3) Panel amber: syarat celah. (4) Kotak teal: versi aman. Sumber: advisory Perforce, advisory GitHub OpenVox, catatan CVE, dan uji Rama Digital.

GHSA-c4wc-g5pp-7wfp terbit 21 Oktober 2026 untuk image container-openvoxdb 8.15.0. Advisory ini bukan bagian dari 2 CVE di atas, tetapi blog Vox Pupuli 3 November 2026 menyebutnya di daftar yang sama.

Status eksploitasi per 4 November 2026

Kami tidak menemukan laporan serangan atau entri CISA KEV untuk kedua CVE. Tetapi advisory OpenVox GHSA-ffr6-rwpm-p5wq sudah memuat proof of concept. Analisa Rama Digital: anggap kode serangan sudah publik, dan update hari ini.

Siapa yang paling berisiko

Risiko bergantung pada siapa yang bisa mendapat sertifikat dan apa isi catalog Anda, bukan hanya pada versi.

Di uji kami, image container resmi OpenVox 8.17.0 dan 8.18.0 memakai AUTOSIGN=true sebagai bawaan. Jadi server di container yang memakai nilai bawaan menandatangani setiap permintaan sertifikat.

Kondisi server PuppetRisikoAlasan
Autosign true atau daftar autosign dengan wildcardTertinggiSiapa saja yang mencapai port 8140 bisa mendapat sertifikat
Port 8140 terbuka ke internetTinggiPenyerang dari luar bisa meminta sertifikat dan memanggil API
Catalog atau Hiera memuat password dan tokenTinggiNode yang menyamar bisa membaca rahasia itu
Ratusan node, VM sementara, atau autoscalingPeriksaSetiap node punya sertifikat sah. 1 node yang dibobol sudah bisa memakai CVE-2026-115731
Puppet open source atau OpenVox 7Tanpa patchTidak ada rilis perbaikan. Rencanakan pindah lini
Sudah versi aman, autosign mati, port 8140 terbatasRendahTetap cari tanda dari waktu sebelum update
Enam kartu risiko: autosign aktif, port 8140 terbuka ke internet, dan catalog berisi password merah; banyak node dan versi tanpa patch amber; sudah aman abu-abu.
Kartu merah: risiko tertinggi. Kartu amber: periksa atau rencanakan. Kartu abu-abu: risiko rendah. Kotak bawah: status eksploitasi per 4 November 2026. Sumber: advisory Perforce dan OpenVox, CISA KEV, dan analisa Rama Digital.

Server Puppet sering berjalan di VM yang juga butuh patch kernel, misalnya untuk celah TCP kernel Linux CVE-2026-98432. Tim yang memakai Rancher untuk Kubernetes juga perlu membaca peringatan Rancher CVE-2026-94290.

Versi rentan dan versi aman

Kode yang rentan ada di 2 paket di mesin server: paket server dan paket agent. Server memuat kode Ruby dari paket agent, jadi update keduanya.

ProdukVersi rentanStatus per 4 November 2026Tindakan
OpenVox Server8.17.1 ke bawah, 9.0.0 sampai 9.1.1RentanUpdate ke 8.18.0 atau 9.2.0
OpenVox Agent di mesin server8.31.2 ke bawah, 9.0.0 sampai 9.2.1RentanUpdate ke 8.32.0 atau 9.3.0
Puppet Core8.11.0 sampai 8.22.1, 9.0.0 sampai 9.1.2RentanUpdate ke 8.22.2 atau 9.1.3
Puppet Enterprise2023.8.0 sampai 2023.8.12, 2025.0.0 sampai 2025.12.0, 2026.0.0RentanUpdate ke 2023.8.13, 2025.12.1, atau 2026.0.1
Puppet open source8.10.0 ke bawah, 7.x, 6.xTanpa patchPindah ke OpenVox 8 atau Puppet Core
OpenVox 77.xTanpa patchNaik ke OpenVox 8.18.0
Tabel 6 produk: OpenVox Server, OpenVox Agent, Puppet Core, dan Puppet Enterprise rentan dan punya patch. Puppet open source dan OpenVox 7 tanpa patch.
Merah: rentan atau tanpa patch. Amber: tanpa patch, naik lini. Kotak bawah: 3 perintah cek versi. Sumber: advisory Perforce, advisory GitHub OpenVox, rilis GitHub OpenVox, dan analisa Rama Digital.

Data versi berasal dari advisory Perforce Report Deserialization Code Execution, advisory OpenVox GHSA-ffr6-rwpm-p5wq, dan rilis OpenVox Server 8.18.0. Analisa Rama Digital: advisory OpenVox menulis rentan sampai 8.17.0 dan 8.31.1, tetapi rilis 8.17.1 dan 8.31.2 pada 29 Oktober terbit sebelum patch. Kami menganggap semua versi di bawah versi aman sebagai rentan.

Build open source dari Perforce berhenti di versi 8.10.x. blog Vox Pupuli 3 November 2026 menulis bahwa Puppet open source tidak mendapat update lagi.

Prasyarat sebelum mulai

  • Akses sudo ke server Puppet atau OpenVox yang memegang CA.
  • Daftar server yang dikelola (inventaris), untuk mencocokkan nama sertifikat.
  • Backup folder /etc/puppetlabs, terutama folder CA.
  • Akses ke firewall di depan port 8140.
  • Jendela maintenance 15 sampai 30 menit. Agent gagal menghubungi server selama restart, lalu mencoba lagi di jadwal berikutnya.

Langkah 1: Cek versi server dan paket agent

Simpan skrip ini sebagai cek-versi-puppet.sh. Skrip membaca paket openvox-server, openvox-agent, puppetserver, dan puppet-agent, serta versi Puppet Enterprise.

#!/usr/bin/env bash
# Cek versi Puppet Server, OpenVox Server, Puppet Core, dan Puppet Enterprise terhadap CVE-2026-115731 dan CVE-2026-115732.
# Data: advisory Perforce dan advisory GitHub OpenVox, 3 November 2026.
# Pakai di server Puppet: sudo bash cek-versi-puppet.sh
# Pakai untuk versi yang Anda salin dari server lain: bash cek-versi-puppet.sh openvox-server=8.17.0 pe=2025.12.0
# Nama produk: openvox-server, openvox-agent, puppet-agent, puppetserver, pe.
# 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" ]; }

tulis() { printf '%-15s %-11s %s\n' "$1" "$2" "$3"; }

cek() {
  local p="$1" v="$2" aman=""
  v=${v%%-*}
  if ! [[ $v =~ ^[0-9]+\.[0-9]+(\.[0-9]+)?$ ]]; then
    tulis "$p" "$v" "TIDAK DIKENAL, cocokkan manual dengan tabel versi aman"
    return
  fi
  [[ $v =~ ^[0-9]+\.[0-9]+$ ]] && v="$v.0"
  case "$p" in
    openvox-server)
      case ${v%%.*} in 8) aman=8.18.0 ;; 9) aman=9.2.0 ;; esac ;;
    openvox-agent)
      case ${v%%.*} in 8) aman=8.32.0 ;; 9) aman=9.3.0 ;; esac ;;
    puppet-agent)
      # Perforce: build open source berhenti di 8.10.x. Build 8.11.0 ke atas adalah Puppet Core.
      if lebih_kecil "$v" 8.11.0; then
        tulis "$p" "$v" "TANPA PATCH (Puppet open source) -> pindah ke OpenVox 8.32.0 atau Puppet Core 8.22.2"
        return
      fi
      case ${v%%.*} in 8) aman=8.22.2 ;; 9) aman=9.1.3 ;; esac ;;
    puppetserver)
      tulis "$p" "$v" "PERIKSA: patch Perforce ikut rilis Puppet Core 8.22.2 atau 9.1.3, lihat baris puppet-agent"
      return ;;
    pe)
      case $v in
        2023.8.*) aman=2023.8.13 ;;
        2025.*) aman=2025.12.1 ;;
        2026.0.*) aman=2026.0.1 ;;
        *) if lebih_kecil "$v" 2023.8.0; then
             tulis "$p" "$v" "TANPA PATCH (lini lama) -> naik ke 2023.8.13 atau 2025.12.1"
             return
           fi ;;
      esac ;;
    *)
      tulis "$p" "$v" "PRODUK TIDAK DIKENAL, pakai openvox-server, openvox-agent, puppet-agent, puppetserver, atau pe"
      return ;;
  esac
  if [ -z "$aman" ]; then
    tulis "$p" "$v" "TANPA PATCH -> naik ke lini yang masih mendapat patch"
  elif lebih_kecil "$v" "$aman"; then
    tulis "$p" "$v" "RENTAN CVE-2026-115731/115732 -> update ke $aman"
  else
    tulis "$p" "$v" "AMAN untuk 2 CVE ini (aman mulai $aman)"
  fi
}

if (( $# > 0 )); then
  for x in "$@"; do
    if [[ $x == *=* ]]; then cek "${x%%=*}" "${x#*=}"; else tulis "?" "$x" "Tulis dengan bentuk produk=versi, contoh openvox-server=8.17.0"; fi
  done
  exit 0
fi

ketemu=0
versi_paket() {
  if command -v dpkg-query >/dev/null 2>&1; then
    dpkg-query -W -f='${Status} ${Version}\n' "$1" 2>/dev/null | awk '/install ok installed/ {print $4}'
  elif command -v rpm >/dev/null 2>&1; then
    rpm -q --qf '%{VERSION}\n' "$1" 2>/dev/null | grep -v 'not installed'
  fi
}

if [ -r /opt/puppetlabs/server/pe_version ]; then
  cek pe "$(cat /opt/puppetlabs/server/pe_version)"; ketemu=1
fi
for p in openvox-server openvox-agent puppetserver puppet-agent; do
  v=$(versi_paket "$p")
  if [ -n "$v" ]; then cek "$p" "$v"; ketemu=1; fi
done

# Instalasi container: OpenVox terpasang sebagai gem, tanpa paket.
if [ $ketemu = 0 ] && command -v gem >/dev/null 2>&1; then
  g=$(gem list --exact openvox 2>/dev/null | sed -nE 's/^openvox \(([0-9.]+).*/\1/p')
  if [ -n "$g" ]; then
    s=$(puppetserver --version 2>/dev/null | sed -nE 's/.*version: *([0-9.]+).*/\1/p')
    [ -n "$s" ] && cek openvox-server "$s"
    cek openvox-agent "$g"
    ketemu=1
  fi
fi

if [ $ketemu = 0 ]; then
  echo "Paket Puppet atau OpenVox tidak ditemukan di server ini."
  echo "Tulis versi secara manual, contoh: bash cek-versi-puppet.sh openvox-server=8.17.0"
  exit 1
fi

pid=$(pgrep -f puppet-server-release.jar | head -n1)
if [ -n "$pid" ]; then
  echo "Proses server berjalan sejak: $(ps -o lstart= -p "$pid")"
  echo "Restart server sesudah update, agar kode yang baru terbaca."
fi
# Di server Puppet atau OpenVox
sudo bash cek-versi-puppet.sh
# Cek versi yang Anda salin dari server lain
bash cek-versi-puppet.sh openvox-server=8.17.1 puppet-agent=8.22.1 pe=2025.12.0
# Cara manual tanpa skrip
puppetserver --version
puppet --version
cat /opt/puppetlabs/server/pe_version
Terminal: skrip cek versi membaca openvox-server 8.17.0 dan openvox-agent 8.31.0 sebagai RENTAN. Mode manual: 8.17.1 rentan, 9.2.0 aman, Puppet 7.34.0 tanpa patch.
Container uji menjalankan image resmi OpenVox Server 8.17.0. Baris kedua memakai versi yang diketik manual. Sumber: uji Rama Digital di container podman openvoxserver:8.17.0, 4 November 2026.

Di container OpenVox, kode terpasang sebagai gem, bukan paket. Skrip membaca versi gem itu bila tidak ada paket.

Cek hasil: "RENTAN" atau "TANPA PATCH" berarti lanjut ke langkah 2 dan 3 hari ini. "AMAN" tetap berarti jalankan langkah 5, karena celah ada sebelum Anda update.

Langkah 2: Cek autosign, auth.conf, dan port 8140

Tiga pengaturan ini menentukan siapa yang bisa memakai kedua celah di server Anda.

Simpan skrip ini sebagai cek-paparan-puppet.sh. Skrip membaca setting autosign, aturan auth.conf yang membandingkan nama sertifikat, alamat port 8140, dan jumlah sertifikat.

#!/usr/bin/env bash
# Cek paparan server Puppet atau OpenVox untuk CVE-2026-115731 dan CVE-2026-115732:
# autosign, aturan auth.conf yang membandingkan nama sertifikat, port 8140, dan jumlah sertifikat.
# Pakai di server Puppet: sudo bash cek-paparan-puppet.sh
# Skrip hanya membaca. Skrip tidak mengubah apa pun.

CONF=/etc/puppetlabs/puppetserver/conf.d
command -v puppet >/dev/null 2>&1 || PATH="$PATH:/opt/puppetlabs/bin"

echo "== 1. Autosign (siapa saja bisa mendapat sertifikat?)"
a=$(puppet config print autosign --section server 2>/dev/null)
case "$a" in
  true)
    echo "TERBUKA  autosign = true. CA menandatangani setiap permintaan sertifikat secara otomatis." ;;
  false|"")
    echo "AMAN     autosign = false. Admin menyetujui setiap sertifikat." ;;
  *)
    if [ -x "$a" ]; then
      echo "PERIKSA  autosign memakai skrip kebijakan $a. Pastikan skrip menolak nama di luar inventaris."
    elif [ -r "$a" ]; then
      n=$(grep -cvE '^\s*(#|$)' "$a")
      echo "PERIKSA  autosign memakai daftar $a ($n baris)."
      grep -vE '^\s*(#|$)' "$a" | while read -r baris; do
        if [[ $baris == *'*'* ]]; then echo "TERBUKA    pola wildcard: $baris"; else echo "PERIKSA    nama tetap: $baris"; fi
      done
    else
      echo "AMAN     autosign menunjuk ke $a, tetapi berkas itu tidak ada."
    fi ;;
esac

echo
echo "== 2. Aturan auth.conf yang membandingkan nama sertifikat dengan nama di URL"
if [ -r "$CONF/auth.conf" ]; then
  awk '/allow: *"\$1"/ {f=1} /name: *"/ && f {sub(/^[ \t]*name: */, ""); print "         " $0; f=0}' "$CONF/auth.conf"
  echo "Jumlah: $(grep -cE 'allow: *"\$1"' "$CONF/auth.conf") aturan. Versi rentan bisa salah mencocokkan nama ini."
  lain=$(grep -nE '^\s*allow: *"[^"$*]+\.[^"]+"' "$CONF/auth.conf")
  if [ -n "$lain" ]; then
    echo "PERIKSA  aturan custom dengan nama host tetap (cek lagi sesudah update):"
    printf '%s\n' "$lain" | sed 's/^/         /'
  fi
else
  echo "PERIKSA  $CONF/auth.conf tidak terbaca."
fi

echo
echo "== 3. Port 8140"
if command -v ss >/dev/null 2>&1; then
  alamat=$(ss -ltnH 'sport = :8140' | awk '{print $4}' | sort -u | tr '\n' ' ')
else
  # Tanpa ss: baca tabel soket kernel. 1FCC adalah port 8140, 0A adalah LISTEN.
  alamat=$(awk 'FNR > 1 && $4 == "0A" && $2 ~ /:1FCC$/ {split($2, x, ":"); print (x[1] ~ /^0+$/ ? "*" : x[1]) ":8140"}' /proc/net/tcp /proc/net/tcp6 2>/dev/null | sort -u | tr '\n' ' ')
fi
if [ -z "$alamat" ]; then
  echo "PERIKSA  Tidak ada proses yang mendengar di port 8140."
elif [[ $alamat == *'*'* || $alamat == *0.0.0.0* || $alamat == *'[::]'* ]]; then
  echo "PERIKSA  Server mendengar di semua alamat: $alamat"
  echo "         Batasi port 8140 di firewall ke jaringan agent saja."
else
  echo "INFO     Server mendengar di: $alamat"
fi

echo
echo "== 4. Sertifikat"
cadir=$(puppet config print cadir --section server 2>/dev/null)
if [ -d "$cadir/signed" ]; then
  echo "Ditandatangani: $(find "$cadir/signed" -name '*.pem' | wc -l)"
  echo "Menunggu      : $(find "$cadir/requests" -name '*.pem' 2>/dev/null | wc -l)"
else
  echo "PERIKSA  Folder CA tidak ditemukan. Jalankan skrip ini di server yang memegang CA."
fi
sudo bash cek-paparan-puppet.sh
Terminal: autosign TERBUKA, 4 aturan auth.conf membandingkan nama sertifikat dengan nama di URL, port 8140 mendengar di semua alamat, 4 sertifikat ditandatangani.
Semua nilai adalah nilai bawaan image resmi 8.17.0. Sertifikat x.web-01 adalah data dummy untuk langkah 5. Sumber: uji Rama Digital di container podman openvoxserver:8.17.0, 4 November 2026.

Di uji kami, 4 aturan bawaan memakai allow: "$1": catalog, node, report, dan facts. Aturan ini mengizinkan node hanya untuk namanya sendiri, dan versi rentan bisa salah mencocokkan nama itu.

Cek hasil: catat status autosign, jumlah aturan custom dengan nama host tetap, dan alamat port 8140. "TERBUKA" di bagian 1 berarti jalankan langkah 4a hari ini.

Langkah 3: Update dan restart server

Hanya update dan restart yang menutup kedua celah ini. Server membaca kode baru hanya sesudah restart.

# OpenVox di Ubuntu atau Debian (diuji di Ubuntu 24.04)
sudo apt-get update && sudo apt-get install --only-upgrade openvox-server openvox-agent
# OpenVox di RHEL, Rocky, atau AlmaLinux
sudo dnf upgrade openvox-server openvox-agent
# Muat kode yang baru. Tanpa restart, server tetap menjalankan kode lama.
sudo systemctl restart puppetserver
# Cek lagi
sudo bash cek-versi-puppet.sh
# OpenVox di container: ganti tag image, lalu buat ulang container
#   ghcr.io/openvoxproject/openvoxserver:8.18.0 atau :9.2.0
Terminal: apt-get menaikkan openvox-agent 8.31.1 ke 8.32.0 dan openvox-server 8.17.0 ke 8.18.0. Skrip cek versi lalu menulis AMAN untuk kedua paket.
Uji memakai paket resmi dari repo OpenVox. Container uji tidak punya systemd, jadi perintah restart tidak berjalan. Sumber: uji Rama Digital dengan paket resmi OpenVox di container podman Ubuntu 24.04, 4 November 2026.

Paket openvox-server 8.18.0 di repo Ubuntu 24.04 meminta openvox-agent 8.32.0 atau lebih baru. Jadi perintah apt di atas menaikkan kedua paket. Kami tidak menguji perintah dnf dan restart lewat systemd.

  1. Puppet Core: update paket puppet-agent ke 8.22.2 atau 9.1.3 dan paket puppetserver dari rilis yang sama, lalu restart.
  2. Puppet Enterprise: jalankan installer 2023.8.13, 2025.12.1, atau 2026.0.1 di primary server, lalu upgrade compiler dan replica.
  3. Puppet open source atau OpenVox 7: tidak ada patch. Pakai panduan migrasi di blog Vox Pupuli 3 November 2026 untuk pindah ke OpenVox 8.
  4. Jalankan lagi cek-versi-puppet.sh. Hasil yang benar: "AMAN untuk 2 CVE ini" untuk server dan agent.

3b. Cek aturan auth.conf custom sesudah update

blog Vox Pupuli 3 November 2026 meminta admin memeriksa aturan auth.conf custom. Beberapa aturan mungkin bergantung pada pencocokan nama yang salah di versi lama, jadi aturan itu bisa menolak node sesudah update.

Jalankan lagi cek-paparan-puppet.sh dan baca baris "aturan custom dengan nama host tetap". Lalu jalankan puppet agent -t di 1 node dari setiap kelompok, dan pastikan catalog terkirim.

Tangga 7 baris: cek versi, cek paparan, update, restart dan cek auth.conf, 2 langkah berlabel tidak membuat aman (matikan autosign, batasi port 8140), lalu cari tanda.
(1) sampai (3b): urutan perbaikan. (4a) dan (4b): langkah sementara. Label merah mengingatkan bahwa hanya update dan restart yang menutup celah. Sumber: advisory Perforce dan OpenVox, blog Vox Pupuli, dan analisa Rama Digital.

Analisa Rama Digital: patch utama ada di mesin server. Update juga paket agent di node lain pada jendela berikutnya, agar semua mesin memakai versi yang sama.

Cek hasil: skrip versi menulis "AMAN", server berjalan sejak waktu sesudah update, dan setiap kelompok node menerima catalog.

Langkah 4: Kurangi dampak sampai update selesai

Langkah ini mengurangi dampak, tetapi tidak menutup celah.

Analisa Rama Digital: kami memilih 2 langkah dari daftar workaround di blog Vox Pupuli 3 November 2026. Kondisi: update belum bisa jalan hari ini. Batas: setiap node yang sudah dikelola punya sertifikat sah, jadi 1 node yang dibobol tetap bisa memakai CVE-2026-115731.

4a. Matikan autosign dan setujui sertifikat secara manual

# 4a. Matikan autosign, lalu muat ulang server
sudo puppet config set autosign false --section server
sudo systemctl reload puppetserver
sudo bash cek-paparan-puppet.sh | head -n 2
# Lihat permintaan baru, cek namanya di inventaris, lalu setujui satu per satu
sudo puppetserver ca list
sudo puppetserver ca sign --certname app-01.contoh.co.id
# Cabut sertifikat yang asing
sudo puppetserver ca clean --certname x.web-01.contoh.co.id
# Container OpenVox: pasang env AUTOSIGN=false, lalu buat ulang container
Terminal: autosign diubah ke false dan server dimuat ulang. Skrip menulis AMAN, permintaan app-01 menunggu persetujuan, lalu sertifikat x.web-01 dicabut.
Container uji mengirim sinyal HUP ke proses server, sama dengan systemctl reload di instalasi paket. Nama node adalah data dummy. Sumber: uji Rama Digital di container podman openvoxserver:8.17.0, 4 November 2026.

Unit systemd dari paket OpenVox memakai puppetserver reload untuk systemctl reload. Kami menguji perintah reload, list, dan clean. Kami tidak menguji perintah ca sign.

Bila Anda butuh autosign untuk autoscaling, pakai skrip kebijakan yang menolak nama di luar inventaris. Jangan pakai wildcard di autosign.conf.

4b. Batasi port 8140 ke jaringan agent

# 4b. Contoh ufw: izinkan port 8140 hanya dari jaringan agent 198.51.100.0/24
sudo ufw allow from 198.51.100.0/24 to any port 8140 proto tcp
sudo ufw deny 8140/tcp
sudo ufw status numbered

Ganti 198.51.100.0/24 dengan jaringan server Anda. Kami tidak menguji contoh ufw ini. Di cloud, pakai security group yang sama aturannya.

Cek hasil: skrip paparan menulis "AMAN" di bagian 1, dan port 8140 tidak menjawab dari jaringan di luar daftar.

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-puppet.sh. Skrip membaca nama sertifikat di CA, sertifikat baru, log akses, proses anak dari proses server, dan berkas baru milik user layanan di folder sementara.

#!/usr/bin/env bash
# Cari tanda penyalahgunaan CVE-2026-115731 dan CVE-2026-115732 di server Puppet atau OpenVox.
# Pakai: sudo bash cek-tanda-puppet.sh [TANGGAL-MULAI] [LOG-AKSES]
# Contoh: sudo bash cek-tanda-puppet.sh 2026-10-01 /var/log/puppetlabs/puppetserver/puppetserver-access.log
# Skrip hanya membaca. Skrip tidak mengubah apa pun.

DARI=${1:-2026-10-01}
LOG=${2:-/var/log/puppetlabs/puppetserver/puppetserver-access.log}
command -v puppet >/dev/null 2>&1 || PATH="$PATH:/opt/puppetlabs/bin"
cadir=$(puppet config print cadir --section server 2>/dev/null)
tanda=0; periksa=0

echo "== 1. Nama sertifikat yang memperpanjang nama node lain (CVE-2026-115732)"
if [ -d "$cadir/signed" ]; then
  mapfile -t nama < <(find "$cadir/signed" -name '*.pem' -printf '%f\n' | sed 's/\.pem$//' | sort)
  for a in "${nama[@]}"; do
    for b in "${nama[@]}"; do
      if [[ $a == *".$b" ]]; then
        echo "TANDA    $a memperpanjang nama $b"
        tanda=$((tanda + 1))
      fi
    done
  done
  (( tanda == 0 )) && echo "Tidak ada."
else
  echo "PERIKSA  Folder CA tidak ditemukan."
fi

echo
echo "== 2. Sertifikat yang ditandatangani sejak $DARI"
if [ -d "$cadir/signed" ]; then
  # Waktu berkas, bukan notBefore. CA memundurkan notBefore 1 hari.
  baris=$(find "$cadir/signed" -name '*.pem' -newermt "$DARI" -printf '%TY-%Tm-%Td %TH:%TM  %f\n' | sed 's/\.pem$//' | sort)
  if [ -n "$baris" ]; then
    printf '%s\n' "$baris" | sed 's/^/PERIKSA  /'
    periksa=$((periksa + $(printf '%s\n' "$baris" | wc -l)))
    echo "Cocokkan setiap nama dengan inventaris server Anda."
  else
    echo "Tidak ada."
  fi
fi

echo
echo "== 3. Satu nama node dari lebih dari 1 alamat IP (log akses)"
if [ -r "$LOG" ]; then
  hasil=$(grep -E '"(GET /puppet/v3/catalog/|PUT /puppet/v3/report/)' "$LOG" |
    sed -nE 's#^([^ ]+) .*"(GET|PUT) /puppet/v3/(catalog|report)/([^?/ ]+).*#\4 \1#p' | sort -u |
    awk '{ip[$1] = ip[$1] " " $2; n[$1]++} END {for (k in n) if (n[k] > 1) print k " dari" ip[k]}')
  if [ -n "$hasil" ]; then
    printf '%s\n' "$hasil" | sed 's/^/PERIKSA  /'
    periksa=$((periksa + $(printf '%s\n' "$hasil" | wc -l)))
  else
    echo "Tidak ada."
  fi
else
  echo "PERIKSA  Log akses tidak terbaca: $LOG"
fi

echo
echo "== 4. Proses anak dari proses server"
pid=$(pgrep -f puppet-server-release.jar | head -n1)
if [ -n "$pid" ]; then
  anak=$(ps --ppid "$pid" -o pid=,user=,etime=,args= 2>/dev/null)
  if [ -n "$anak" ]; then
    printf '%s\n' "$anak" | sed 's/^ */PERIKSA  /'
    periksa=$((periksa + $(printf '%s\n' "$anak" | wc -l)))
  else
    echo "Tidak ada."
  fi
  user=$(ps -o user= -p "$pid" | tr -d ' ')
else
  echo "PERIKSA  Proses server tidak berjalan."
  user=puppet
fi

echo
echo "== 5. Berkas baru milik user $user di folder sementara sejak $DARI"
# Folder hsperfdata dan jruby-* adalah berkas kerja normal Java dan JRuby.
berkas=$(find /tmp /var/tmp /dev/shm -xdev -type f -user "$user" -newermt "$DARI" \
  -not -path '/tmp/hsperfdata_*' -not -path '/tmp/jruby-*' 2>/dev/null)
if [ -n "$berkas" ]; then
  printf '%s\n' "$berkas" | sed 's/^/PERIKSA  /'
  periksa=$((periksa + $(printf '%s\n' "$berkas" | wc -l)))
else
  echo "Tidak ada."
fi

echo
echo "Hasil: TANDA $tanda, PERIKSA $periksa"
if (( tanda > 0 )); then
  echo "Ada tanda. Cabut sertifikat itu, lalu ikuti langkah respons di artikel."
fi
sudo bash cek-tanda-puppet.sh 2026-10-01 /var/log/puppetlabs/puppetserver/puppetserver-access.log
Terminal: skrip tanda menemukan 1 TANDA (x.web-01 memperpanjang nama web-01) dan 6 PERIKSA: 4 sertifikat baru, 1 nama dari 2 IP, dan 1 berkas di /tmp.
Sertifikat x.web-01, IP di log akses, dan berkas /tmp/.cache-uji adalah data dummy. Tidak ada serangan di uji ini. Sumber: uji Rama Digital di container podman openvoxserver:8.17.0, 4 November 2026.
Dua kolom tanda: di CA dan log akses (nama sertifikat mirip, sertifikat baru, 1 nama dari 2 IP) dan di server (proses anak, berkas di /tmp, perubahan folder CA).
Kolom amber: tanda CVE-2026-115732. Kolom merah: tanda CVE-2026-115731. Kotak bawah: langkah bila Anda menemukan 1 tanda saja. Sumber: blog Neodyme, advisory Perforce dan OpenVox, dan analisa Rama Digital.

Log akses tidak mencatat nama sertifikat klien. Jadi skrip mencari 1 nama node di URL catalog atau report yang datang dari lebih dari 1 IP. IP yang berubah karena DHCP juga muncul, jadi hasilnya PERIKSA, bukan TANDA.

Cek hasil: skrip menulis "TANDA 0", dan setiap PERIKSA punya penjelasan. Log bisa dihapus penyerang, jadi tidak ada tanda belum berarti aman.

Bila ada 1 tanda saja, simpan log dan folder CA sebagai bukti. Cabut sertifikat yang asing, lalu ganti setiap password dan token di catalog node yang terdampak.

Bila ada tanda di proses server, anggap kunci CA sudah terbuka. Buat CA baru dan sertifikat baru untuk semua node dengan panduan regenerasi sertifikat di dokumentasi OpenVox atau Puppet. Periksa setiap node, karena server Puppet mengatur semuanya.

Bila server 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 server Puppet

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

Waktu (WIB)Server dummyYang dicekHasilTindakan
08.00puppet-prod (OpenVox 8.17.1, 400 node)Langkah 1 dan 2RENTAN, autosign dengan wildcardLangkah 4a sekarang, update siang ini
08.30puppet-k8s (container 8.17.0)Langkah 1 dan 2RENTAN, AUTOSIGN=true bawaanTag 8.18.0 dan AUTOSIGN=false
09.00puppet-lama (Puppet 7.34.0)Langkah 1TANPA PATCHLangkah 4, rencanakan pindah ke OpenVox 8
09.30puppet-prodLangkah 5TANDA 1: nama sertifikat memperpanjang db-01Cabut sertifikat, ganti password database

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

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
OpenVox atau Puppet Core yang Anda pasang sendiriTim AndaLangkah 1 sampai 5
Puppet Enterprise dengan dukungan PerforceTim Anda, dengan bantuan PerforceBuka tiket Perforce bila upgrade gagal, lalu langkah 3b dan 5
Server Puppet yang dikelola vendor atau MSPVendor, sesuai kontrakMinta bukti versi tertulis, lalu ganti rahasia di catalog Anda
OpenVox di container atau KubernetesTim AndaGanti tag image, pasang AUTOSIGN=false, lalu langkah 5

Rekomendasi Rama Digital: perlakukan server Puppet seperti kunci utama semua server. Simpan rahasia di secret manager, bukan di catalog, dan update panel lain di pipeline yang sama, misalnya untuk peringatan GitLab CVE-2026-97229. Tim yang memakai container sistem juga perlu membaca celah sertifikat LXD dan Incus CVE-2026-112816.

Checklist hari ini

  1. Buat daftar semua server Puppet, compiler, dan replica. Pemilik: tim platform. Bukti: daftar nama dan versi.
  2. Cek versi dengan langkah 1. Pemilik: admin Puppet. Bukti: output skrip.
  3. Cek paparan dengan langkah 2. Pemilik: admin Puppet. Bukti: output skrip.
  4. Pasang langkah 4 di setiap server yang belum bisa update hari ini. Pemilik: admin Puppet dan tim jaringan. Bukti: output skrip dan aturan firewall.
  5. Backup, update, lalu restart. Pemilik: admin Puppet. Bukti: output skrip sesudah update.
  6. Cek aturan auth.conf custom dan 1 node per kelompok. Pemilik: admin Puppet. Bukti: hasil puppet agent -t.
  7. Cari tanda dengan langkah 5. Pemilik: admin Puppet dan tim keamanan. Bukti: output skrip.

Tanya jawab

Apakah celah ini sudah dipakai menyerang?

Per 4 November 2026, kami tidak menemukan laporan serangan, dan kedua CVE belum masuk CISA KEV. Tetapi advisory OpenVox sudah memuat proof of concept, jadi update hari ini.

Autosign saya sudah mati. Apakah saya aman?

Tidak. CVE-2026-115731 hanya butuh 1 sertifikat agent yang sah, dan setiap node yang dikelola punya sertifikat itu. Autosign yang mati hanya menutup jalan bagi penyerang tanpa node.

Apakah agent di setiap node juga harus di-update?

Patch utama ada di mesin server: paket server dan paket agent di mesin itu. Update agent di node lain pada jendela berikutnya.

Saya masih memakai Puppet open source. Apa yang saya kerjakan?

Puppet open source tidak mendapat patch. Pasang langkah 4 hari ini, lalu pindah ke OpenVox 8 atau Puppet Core secepatnya.

Apakah image container OpenVox 8.18.0 sudah aman?

Versinya aman untuk 2 CVE ini. Tetapi image 8.18.0 tetap memakai AUTOSIGN=true sebagai bawaan, jadi pasang AUTOSIGN=false atau skrip kebijakan.

Apakah firewall di port 8140 bisa menggantikan update?

Tidak. Node di jaringan yang diizinkan tetap bisa memakai celah ini. Firewall hanya mengurangi siapa yang bisa mencoba.

Apakah skrip cek mengubah sesuatu di server 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 server Puppet 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