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.

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.
| ID | Area | CVSS 4.0 Perforce | CVSS 4.0 OpenVox | Akses | Aman di |
|---|---|---|---|---|---|
| CVE-2026-115731 | Laporan agent: data laporan menjalankan kode di server Puppet | 9.4 | 9.4 | Sertifikat agent yang sah | OpenVox 8.18.0, 9.2.0, Puppet Core 8.22.2, 9.1.3 |
| CVE-2026-115732 | Nama sertifikat: 1 node diizinkan sebagai node lain | 9.0 | 9.5 | Sertifikat dengan nama yang mirip | Rilis yang sama |
| GHSA-c4wc-g5pp-7wfp | Image openvoxdb 8.15.0: ALLOWLIST tidak berlaku | - | 9.9 | Akses jaringan ke OpenVoxDB | Image 8.17.0, saran Vox Pupuli 8.18.0 |

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 Puppet | Risiko | Alasan |
|---|---|---|
Autosign true atau daftar autosign dengan wildcard | Tertinggi | Siapa saja yang mencapai port 8140 bisa mendapat sertifikat |
| Port 8140 terbuka ke internet | Tinggi | Penyerang dari luar bisa meminta sertifikat dan memanggil API |
| Catalog atau Hiera memuat password dan token | Tinggi | Node yang menyamar bisa membaca rahasia itu |
| Ratusan node, VM sementara, atau autoscaling | Periksa | Setiap node punya sertifikat sah. 1 node yang dibobol sudah bisa memakai CVE-2026-115731 |
| Puppet open source atau OpenVox 7 | Tanpa patch | Tidak ada rilis perbaikan. Rencanakan pindah lini |
| Sudah versi aman, autosign mati, port 8140 terbatas | Rendah | Tetap cari tanda dari waktu sebelum update |

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.
| Produk | Versi rentan | Status per 4 November 2026 | Tindakan |
|---|---|---|---|
| OpenVox Server | 8.17.1 ke bawah, 9.0.0 sampai 9.1.1 | Rentan | Update ke 8.18.0 atau 9.2.0 |
| OpenVox Agent di mesin server | 8.31.2 ke bawah, 9.0.0 sampai 9.2.1 | Rentan | Update ke 8.32.0 atau 9.3.0 |
| Puppet Core | 8.11.0 sampai 8.22.1, 9.0.0 sampai 9.1.2 | Rentan | Update ke 8.22.2 atau 9.1.3 |
| Puppet Enterprise | 2023.8.0 sampai 2023.8.12, 2025.0.0 sampai 2025.12.0, 2026.0.0 | Rentan | Update ke 2023.8.13, 2025.12.1, atau 2026.0.1 |
| Puppet open source | 8.10.0 ke bawah, 7.x, 6.x | Tanpa patch | Pindah ke OpenVox 8 atau Puppet Core |
| OpenVox 7 | 7.x | Tanpa patch | Naik ke OpenVox 8.18.0 |

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
sudoke 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

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

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

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.
- Puppet Core: update paket
puppet-agentke 8.22.2 atau 9.1.3 dan paketpuppetserverdari rilis yang sama, lalu restart. - Puppet Enterprise: jalankan installer 2023.8.13, 2025.12.1, atau 2026.0.1 di primary server, lalu upgrade compiler dan replica.
- Puppet open source atau OpenVox 7: tidak ada patch. Pakai panduan migrasi di blog Vox Pupuli 3 November 2026 untuk pindah ke OpenVox 8.
- 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.

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

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


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 dummy | Yang dicek | Hasil | Tindakan |
|---|---|---|---|---|
| 08.00 | puppet-prod (OpenVox 8.17.1, 400 node) | Langkah 1 dan 2 | RENTAN, autosign dengan wildcard | Langkah 4a sekarang, update siang ini |
| 08.30 | puppet-k8s (container 8.17.0) | Langkah 1 dan 2 | RENTAN, AUTOSIGN=true bawaan | Tag 8.18.0 dan AUTOSIGN=false |
| 09.00 | puppet-lama (Puppet 7.34.0) | Langkah 1 | TANPA PATCH | Langkah 4, rencanakan pindah ke OpenVox 8 |
| 09.30 | puppet-prod | Langkah 5 | TANDA 1: nama sertifikat memperpanjang db-01 | Cabut 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 layanan | Pemegang patch | Yang Anda kerjakan |
|---|---|---|
| OpenVox atau Puppet Core yang Anda pasang sendiri | Tim Anda | Langkah 1 sampai 5 |
| Puppet Enterprise dengan dukungan Perforce | Tim Anda, dengan bantuan Perforce | Buka tiket Perforce bila upgrade gagal, lalu langkah 3b dan 5 |
| Server Puppet yang dikelola vendor atau MSP | Vendor, sesuai kontrak | Minta bukti versi tertulis, lalu ganti rahasia di catalog Anda |
| OpenVox di container atau Kubernetes | Tim Anda | Ganti 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
- Buat daftar semua server Puppet, compiler, dan replica. Pemilik: tim platform. Bukti: daftar nama dan versi.
- Cek versi dengan langkah 1. Pemilik: admin Puppet. Bukti: output skrip.
- Cek paparan dengan langkah 2. Pemilik: admin Puppet. Bukti: output skrip.
- Pasang langkah 4 di setiap server yang belum bisa update hari ini. Pemilik: admin Puppet dan tim jaringan. Bukti: output skrip dan aturan firewall.
- Backup, update, lalu restart. Pemilik: admin Puppet. Bukti: output skrip sesudah update.
- Cek aturan auth.conf custom dan 1 node per kelompok. Pemilik: admin Puppet. Bukti: hasil puppet agent -t.
- 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
- advisory Perforce Report Deserialization Code Execution dan advisory Perforce Certificate Name Authorization Bypass: ringkasan, CVSS 4.0 skor 9.4 dan 9.0, versi Puppet Core dan PE yang aman.
- catatan CVE-2026-115731 dan catatan CVE-2026-115732: deskripsi resmi, CWE, dan tanggal terbit 3 November 2026.
- advisory OpenVox GHSA-ffr6-rwpm-p5wq dan advisory OpenVox GHSA-q4hm-33rc-572g: versi OpenVox yang rentan dan aman, skor 9.4 dan 9.5.
- GHSA-c4wc-g5pp-7wfp: celah ALLOWLIST di image openvoxdb 8.15.0.
- blog Vox Pupuli 3 November 2026: versi aman, workaround, auth.conf, dan status Puppet open source.
- riset Neodyme: penemu, waktu rilis, saran mitigasi, dan petunjuk deteksi.
- rilis OpenVox Server 8.18.0: tanggal rilis 3 November 2026.
- CISA KEV: status per 4 November 2026.
- UU 27/2022 tentang Pelindungan Data Pribadi: kewajiban melapor kebocoran data pribadi.




