Jawaban langsung: Apache OFBiz 24.09.08 menutup 46 CVE. 12 CVE bisa dipakai tanpa login, termasuk CVE-2026-83542 yang menjalankan kode di server. Hari ini, cek versi, update ke 24.09.08, pasang kunci rahasia baru, lalu tutup back office dari internet.

CISA memberi CVSS 3.1 9.8 untuk CVE-2026-83542 dan CVE-2026-82907. Apache sendiri tidak memberi skor. Semua rilis sebelum 24.09.08 terdampak, termasuk lini lama 18.12.

Kondisi utama: orang di luar kantor bisa membuka halaman back office OFBiz Anda, misalnya /webtools atau /partymgr. Batas: artikel ini tidak memuat payload, kode serangan, atau urutan serangan.

Kami membaca pengumuman CVE Apache OFBiz, halaman security Apache OFBiz, catatan rilis 24.09.08, halaman unduhan OFBiz, catatan CVE-2026-83542, catatan CVE-2026-82907, catatan CVE-2026-105330, dan CISA KEV pada 6 November 2026, pukul 06.35 sampai 07.00 WIB. Kami menguji 3 skrip cek di pod podman dengan image Docker resmi OFBiz 24.09.07 dan 24.09.08, plus aturan nginx 1.29. Kami tidak menguji build dari zip, MySQL, PostgreSQL, multitenant, REST, dan serangan.

Masalah: back office OFBiz yang terbuka bisa diambil alih tanpa login

OFBiz menyimpan pesanan, stok, akuntansi, dan data karyawan di 1 server, jadi 1 celah membuka semua data itu.

Apache OFBiz adalah ERPERPSatu sistem yang menyatukan penjualan, pembelian, stok, dan keuangan perusahaan dalam 1 data.Jasa Pembuatan ERP AI Native open source. Bisnis memakai OFBiz untuk katalog, pesanan, gudang, akuntansi, dan HR. Banyak instalasi membuka halaman back office ke internet agar staf bisa kerja dari luar kantor.

Berkas zip 24.09.08 ada di server unduhan Apache sejak 2 November 2026. Pengumuman 46 CVE terbit 4 November 2026 pukul 16.13 UTC, dan catatan CVE terbit 5 November 2026.

Linimasa: celah OFBiz lama masuk KEV Agustus 2024 dan Februari 2025, zip 24.09.08 2 November, pengumuman 4 November, CVE 5 November, belum KEV 6 November.
Titik merah: serangan lama dan publikasi CVE. Titik teal: rilis patch. Titik abu-abu: image Docker dibuat. Titik amber: status hari ini. Sumber: CISA KEV, server unduhan Apache, milis Apache OFBiz, catatan CVE, dan image Docker resmi.

3 celah OFBiz sebelumnya masuk CISA KEV pada 2024 dan 2025. Jadi penyerang sudah kenal produk ini dan sudah punya alat untuk mencarinya.

Cara kerja: ringkasan advisory

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

Ringkasan CVE-2026-83542

Menurut catatan CVE-2026-83542, penyerang tanpa login bisa membuat OFBiz memuat definisi layar dari berkas yang penyerang kirim. OFBiz lalu menjalankan ekspresi Groovy di server saat merender halaman. Catatan CVE menulis bahwa jalur ini juga ada di 1 halaman publik lain, bukan hanya di halaman login.

Ringkasan CVE-2026-82907

Menurut catatan CVE-2026-82907, nilai externalLoginKey berlaku sebelum OFBiz mengecek login dan CSRF. Nilai ini tidak terikat ke 1 browser, tidak kedaluwarsa, dan bisa dipakai ulang. Orang yang menangkap 1 nilai mendapat sesi penuh sebagai user itu di semua webapp OFBiz.

12 CVE yang bisa dipakai tanpa login

CVEDampak tanpa loginCVSS 3.1
CVE-2026-83542Eksekusi kode lewat halaman login9.8 (ADP)
CVE-2026-68524Eksekusi kode: OFBiz memuat definisi layar dari lokasi penyerangBelum ada
CVE-2026-73578Bypass login lewat saved-view, dampak eksekusi kodeBelum ada
CVE-2026-82907externalLoginKey yang tertangkap memberi sesi penuh9.8 (ADP)
CVE-2026-73577Bypass login lewat akhiran pathBelum ada
CVE-2026-92887Operasi REST tanpa atribut auth terbuka tanpa loginBelum ada
CVE-2026-105330Kunci JWT bawaan lama memberi akses adminBelum ada
CVE-2026-109928Token reset password memberi sesi penuhBelum ada
CVE-2026-114277Login sosial Janrain mengikat akun yang salahBelum ada
CVE-2026-73580Data organisasi dan karyawan HR bocorBelum ada
CVE-2026-83538Data HR, katalog, dan pesanan bocorBelum ada
CVE-2026-81815SQL injection, hanya MySQL dan MariaDBBelum ada
Dua kartu merah: CVE-2026-83542 dan CVE-2026-82907, skor 9.8. Grafik 46 CVE dalam 8 kelompok, 12 tanpa login. Aman: OFBiz 24.09.08.
(1) Kartu merah: 2 CVE dengan skor 9.8. (2) Batang merah: kelompok tanpa login. (3) Batang amber: kelompok yang butuh akun. (4) Kotak teal: versi aman. Sumber: pengumuman CVE Apache OFBiz 4 November 2026, catatan CVE, dan analisa Rama Digital.

Kelompok di tabel dan diagram berasal dari judul advisory, disusun Rama Digital. Sebagian besar dari 34 CVE lain butuh akun, sering akun level lihat saja. Contoh: 7 CVE eksekusi kode dan 16 CVE hak akses yang bisa mengubah harga, pesanan, atau saldo.

Status eksploitasi per 6 November 2026

Kami tidak menemukan laporan serangan, kode serangan publik, atau entri CISA KEV untuk 46 CVE ini. Analisa Rama Digital: patch OFBiz terbuka di GitHub dengan nomor PR di halaman security Apache OFBiz, jadi penyerang bisa membaca perubahan kodenya. Anggap rilis ini mendesak.

Siapa yang paling berisiko

Risiko bergantung pada siapa yang bisa membuka back office, jenis database, dan riwayat upgrade, bukan hanya pada versi.

Kondisi server OFBizRisikoAlasan
Back office bisa dibuka dari internet tanpa VPNTertinggi12 CVE tanpa login, termasuk eksekusi kode
Database MySQL atau MariaDBTinggiCVE-2026-81815 adalah SQL injection tanpa login di 2 database ini
Naik dari rilis sebelum 24.09.06, dengan security.internal.sso.enabled=trueTinggiCVE-2026-105330: kunci JWT bawaan lama memberi akses admin
Banyak akun karyawan, mitra, atau pelangganPeriksa23 CVE butuh akun, sering hanya izin lihat
Multitenant atau plugin RESTPeriksaCVE-2026-74841, CVE-2026-84728, dan CVE-2026-92887 hanya berlaku di fitur ini
Hanya lewat VPN dan sudah 24.09.08RendahTetap cari tanda dari waktu sebelum update
Enam kartu risiko: back office terbuka, MySQL atau MariaDB, dan kunci JWT lama merah; akun banyak dan multitenant atau REST amber; VPN dan 24.09.08 abu-abu.
Kartu merah: risiko tertinggi. Kartu amber: periksa. Kartu abu-abu: risiko rendah. Kotak bawah: status eksploitasi per 6 November 2026. Sumber: catatan CVE, CISA KEV, uji Rama Digital, dan analisa Rama Digital.

Celah di sistem bisnis yang menyimpan data pelanggan juga muncul di toko online, misalnya di peringatan Magento PolyShell CVE-2026-48356. Panel database dengan data bisnis juga perlu dicek, lihat peringatan pgAdmin 4 CVE-2026-116241.

Versi rentan dan versi aman

Yang menentukan adalah versi OFBiz yang berjalan dan asal berkas konfigurasi, bukan versi Java atau sistem operasi.

VersiInstalasiStatus per 6 November 2026Tindakan
24.09.01 sampai 24.09.07Zip, git, atau image DockerRentan, 46 CVEUpdate ke 24.09.08 hari ini
18.12.19 dan lebih lamaLini lamaTanpa patchNaik ke 24.09.08. Sementara, langkah 4
Naik dari rilis sebelum 24.09.06security.properties lama dipakai lagiKunci JWT bisa bawaan lamaSesudah update: ./gradlew rotateSecretKeys
Image Docker resmiKunci dari proses build imagePeriksa kunciKunci sendiri di /ofbiz/config
24.09.08Zip 2 November 2026Aman untuk 46 CVETetap jalankan langkah 5
Tabel 5 baris: 24.09.01 sampai 24.09.07 rentan, 18.12 tanpa patch, instalasi lama dan image Docker periksa kunci, 24.09.08 aman. Kotak bawah: 3 perintah cek.
Merah: rentan atau tanpa patch. Amber: periksa kunci rahasia. Teal: aman. Kotak bawah: 3 perintah cek versi. Sumber: halaman security dan unduhan Apache OFBiz, image Docker resmi, dan uji Rama Digital.

Data versi berasal dari halaman security Apache OFBiz dan halaman unduhan OFBiz. Lini 18.12 berhenti di 18.12.19, dan halaman security menulis semua rilis sebelum 24.09.08 terdampak.

Analisa Rama Digital: image Docker resmi membawa security.token.key dari proses build image, jadi semua server dari tag yang sama memakai nilai yang sama. Nilai bawaan security.internal.sso.enabled adalah false. Tetap pasang kunci sendiri, karena kunci yang ada di image publik bukan rahasia.

Prasyarat sebelum mulai

  • Akses SSH ke server OFBiz, atau akses ke host Docker.
  • Backup database dan volume /ofbiz/runtime atau folder runtime/.
  • Daftar plugin dan perubahan kode Anda sendiri, bila OFBiz Anda dibuat dari zip atau git.
  • 1 laptop di luar jaringan kantor untuk mengecek akses dari internet.
  • Jendela update 30 sampai 60 menit. Restart menghentikan login dan job terjadwal sebentar.

Langkah 1: Cek versi OFBiz di server dan dari luar

Simpan skrip ini sebagai cek-versi-ofbiz.sh. Skrip membaca berkas VERSION, footer halaman login, atau versi yang Anda ketik, lalu menilai versi itu.

#!/usr/bin/env bash
# Cek versi Apache OFBiz untuk 46 CVE yang ditutup di 24.09.08 (termasuk CVE-2026-83542 dan CVE-2026-82907).
# Skrip hanya membaca. Pakai: bash cek-versi-ofbiz.sh <folder OFBiz>
#   atau cek dari luar lewat halaman login: bash cek-versi-ofbiz.sh https://erp.contoh.id
#   atau ketik versi manual: bash cek-versi-ofbiz.sh 24.09.05
set -u
AMAN=24.09.08

lebih_kecil() { [ "$1" != "$2" ] && [ "$(printf '%s\n%s\n' "$1" "$2" | sort -V | head -n 1)" = "$1" ]; }

nilai() {
  local v=$1
  case "$v" in
    24.09.*) if lebih_kecil "$v" $AMAN; then echo "RENTAN: update ke $AMAN"; else echo "AMAN untuk 46 CVE rilis $AMAN"; fi ;;
    18.12.*|17.*|16.*|13.*) echo "TANPA PATCH: lini lama tanpa rilis baru, naik ke $AMAN" ;;
    "") echo "PERIKSA: versi tidak terbaca" ;;
    *) echo "PERIKSA: versi $v tidak dikenal" ;;
  esac
}

ARG=${1:-.}
case "$ARG" in
  http://*|https://*)
    URL=${ARG%/}/webtools/control/main
    KODE=$(curl -sk -o /tmp/ofbiz-login.$$ -w '%{http_code}' --max-time 15 "$URL")
    V=$(grep -A 3 'Release' /tmp/ofbiz-login.$$ 2>/dev/null | grep -oE '[0-9]{2}\.[0-9]{2}\.[0-9]{2}' | head -n 1)
    rm -f /tmp/ofbiz-login.$$
    echo "== Halaman login $URL: HTTP $KODE"
    [ "$KODE" = 200 ] && echo "  PERIKSA: halaman login webtools terbuka dari mesin ini"
    if [ -n "$V" ]; then echo "OFBiz $V: $(nilai "$V")"; else echo "Versi tidak tampil di footer. Cek dari server dengan folder OFBiz."; fi
    exit 0 ;;
  [0-9]*) echo "OFBiz $ARG: $(nilai "$ARG")"; exit 0 ;;
esac

DIR=$ARG
[ -d "$DIR/framework" ] || { echo "Folder $DIR bukan folder OFBiz (tidak ada framework/)"; exit 1; }
echo "== Folder: $(cd "$DIR" && pwd)"
V=""
if [ -f "$DIR/VERSION" ]; then
  V=$(head -n 1 "$DIR/VERSION" | grep -oE '[0-9]{2}\.[0-9]{2}\.[0-9]{2}' | head -n 1)
  echo "VERSION: $(head -n 1 "$DIR/VERSION")"
elif [ -d "$DIR/.git" ]; then
  echo "git: $(git -C "$DIR" describe --tags --always 2>/dev/null) cabang $(git -C "$DIR" rev-parse --abbrev-ref HEAD 2>/dev/null)"
fi
echo "OFBiz ${V:-?}: $(nilai "$V")"

# Ciri rilis 24.09.08: task rotateSecretKeys di build.gradle (untuk instalasi dari kode sumber).
if [ -f "$DIR/build.gradle" ]; then
  if grep -q 'task rotateSecretKeys' "$DIR/build.gradle"; then echo "build.gradle: punya rotateSecretKeys (ciri 24.09.08 atau lebih baru)"
  else echo "build.gradle: tanpa rotateSecretKeys (ciri rilis sebelum 24.09.08)"; fi
fi
[ -f "$DIR/docker-entrypoint.sh" ] && echo "Instalasi: image Docker resmi. Update dengan image tag $AMAN."
if command -v java >/dev/null 2>&1; then echo "Java: $(java -version 2>&1 | head -n 1)"; fi
# Di server, di folder OFBiz (image Docker: /ofbiz)
bash cek-versi-ofbiz.sh /opt/ofbiz
# Dari laptop, lewat footer halaman login
bash cek-versi-ofbiz.sh https://erp.contoh.id
# Versi yang Anda salin dari server lain
bash cek-versi-ofbiz.sh 24.09.05
# Cara manual tanpa skrip
head -n 1 /opt/ofbiz/VERSION
docker exec ofbiz head -n 1 /ofbiz/VERSION
Terminal: skrip versi membaca VERSION 24.09.07 sebagai RENTAN, footer halaman login juga 24.09.07, dan versi 18.12.19 yang diketik manual TANPA PATCH.
Container uji memakai image resmi 24.09.07. Footer halaman login menampilkan versi tanpa login. Sumber: uji Rama Digital di pod podman dengan image resmi ghcr.io/apache/ofbiz 24.09.07 dan 24.09.08, 6 November 2026.

Footer halaman login OFBiz menampilkan nomor rilis tanpa login. Jadi pihak luar juga bisa membaca versi Anda.

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 webapp yang terbuka, kunci rahasia, dan fitur

Langkah ini menjawab 3 pertanyaan: back office mana yang terbuka dari internet, apakah kunci rahasia masih bawaan, dan fitur mana yang punya CVE khusus.

Simpan skrip ini sebagai cek-paparan-ofbiz.sh. Skrip membandingkan hash SHA-256 kunci dengan hash nilai bawaan lama, jadi nilai kunci tidak tampil.

#!/usr/bin/env bash
# Cek paparan Apache OFBiz: webapp aktif, akses dari luar, kunci rahasia, dan fitur dengan CVE khusus di rilis 24.09.08.
# Skrip hanya membaca. Pakai: bash cek-paparan-ofbiz.sh <folder OFBiz> [URL publik, contoh https://erp.contoh.id]
# Jalankan bagian URL dari mesin di luar jaringan kantor, misalnya laptop dengan data seluler.
set -u
DIR=${1:?folder OFBiz}
URL=${2:-}
# Hash SHA-256 dari nilai bawaan lama. Skrip membandingkan hash, jadi nilai kunci tidak tampil.
TOKEN_LAMA="2bfb2e4647a6d57fe34f11bb248095e6584d47047cb97fa0c4cf920be3a0874b 20c08f2cb64a05d8d72c77fc0bd4b5065ebd9bc5232fb11524f9eb57f013970c"
ADMIN_LAMA=9b1dcb080aff9dd7346c624791f2dbdbb3062a04854633eeb3ad0a7da949326d
hash() { printf '%s' "$1" | sha256sum | cut -d ' ' -f 1; }
baca() { grep -E "^$2=" "$1" 2>/dev/null | tail -n 1 | cut -d = -f 2- | tr -d '\r'; }

echo "== 1. Webapp aktif"
APPS=$(for f in "$DIR"/framework/*/ofbiz-component.xml "$DIR"/applications/*/ofbiz-component.xml "$DIR"/plugins/*/ofbiz-component.xml; do
  [ -f "$f" ] || continue
  grep -q 'enabled="false"' "$f" && continue
  grep -oE 'mount-point="/[a-z-]+"' "$f" | cut -d / -f 2 | tr -d '"'
done | sort -u)
echo "  $(echo "$APPS" | wc -w) webapp: $(echo $APPS)" | fold -s -w 100

echo "== 2. Akses dari luar"
if [ -n "$URL" ]; then
  BUKA=""; TUTUP=""; JML=0
  for app in $APPS; do
    case "$app" in ecommerce|ecomseo|common-js|ordermgr-js|contentimages|images|iCalendar) continue ;; esac
    k=$(curl -sk -o /dev/null -w '%{http_code}' --max-time 10 "${URL%/}/$app/control/main")
    JML=$((JML + 1))
    case "$k" in 200|401|302) BUKA="$BUKA /$app" ;; *) TUTUP="$TUTUP /$app=$k" ;; esac
  done
  echo "  Webapp back office yang TERBUKA: $(echo $BUKA | wc -w) dari $JML"
  [ -n "$BUKA" ] && echo "   $BUKA" | fold -s -w 100
  [ -n "$TUTUP" ] && echo "  Ditutup (kode HTTP):$TUTUP" | fold -s -w 100
else echo "  Lewati: URL publik tidak diberikan"; fi

echo "== 3. Kunci rahasia"
SEC="$DIR/framework/security/config/security.properties"
[ -f "$DIR/config/security.properties" ] && SEC="$DIR/config/security.properties"
TK=$(baca "$SEC" security.token.key)
if [ -z "$TK" ]; then echo "  security.token.key: KOSONG. Jalankan ./gradlew generateSecretKeys"
elif [[ " $TOKEN_LAMA " == *" $(hash "$TK") "* ]]; then echo "  security.token.key: BAWAAN LAMA (CVE-2026-105330). Jalankan ./gradlew rotateSecretKeys"
elif [ -f "$DIR/docker-entrypoint.sh" ] && [ ! -f "$DIR/config/security.properties" ]; then echo "  security.token.key: PERIKSA, kunci dibuat saat build image Docker, bukan di server Anda"
else echo "  security.token.key: kunci sendiri (${#TK} karakter)"; fi
echo "  security.internal.sso.enabled=$(baca "$SEC" security.internal.sso.enabled) (berkas ${SEC#"$DIR"/})"
START=$(find "$DIR/framework/start" -name start.properties 2>/dev/null | head -n 1)
AK=$(baca "$START" ofbiz.admin.key); AH=$(baca "$START" ofbiz.admin.host)
if [ -n "$AK" ] && [ "$(hash "$AK")" = "$ADMIN_LAMA" ]; then echo "  ofbiz.admin.key: KUNCI TETAP LAMA (CVE-2026-97355)"; else echo "  ofbiz.admin.key: bukan kunci tetap lama"; fi
case "${AH:-127.0.0.1}" in 127.0.0.1|localhost) echo "  AdminServer: hanya lokal (${AH:-127.0.0.1}), port $(baca "$START" ofbiz.admin.port)" ;;
  *) echo "  AdminServer: TERBUKA di $AH" ;; esac

echo "== 4. Fitur dengan CVE khusus"
DS=$(grep -A 1 '<delegator name="default"' "$DIR/framework/entity/config/entityengine.xml" | grep -oE 'datasource-name="[^"]+"' | head -n 1 | cut -d '"' -f 2)
case "$DS" in *mysql*|*maria*) echo "  Database: $DS. PERIKSA: CVE-2026-81815 (SQL injection) berlaku" ;;
  *) echo "  Database: $DS. CVE-2026-81815 hanya untuk MySQL dan MariaDB" ;; esac
MT=$(baca "$DIR/framework/common/config/general.properties" multitenant)
[ "$MT" = Y ] && echo "  multitenant=Y. PERIKSA: CVE-2026-74841 dan CVE-2026-84728 berlaku" || echo "  multitenant=${MT:-N}"
REST=$(find "$DIR" -name '*.rest.xml' -not -path '*/runtime/*' 2>/dev/null | wc -l)
echo "  Berkas REST (.rest.xml): $REST. Bila lebih dari 0, CVE-2026-92887 berlaku"
grep -q 'name="address" value="0.0.0.0"' "$DIR/framework/catalina/ofbiz-component.xml" && echo "  AJP: PERIKSA, port AJP mendengar di semua alamat" || echo "  AJP: hanya lokal"
# Jalankan di server. Untuk bagian 2, jalankan juga dari laptop di luar jaringan kantor.
bash cek-paparan-ofbiz.sh /opt/ofbiz https://erp.contoh.id
Terminal: 17 webapp aktif, 15 back office terbuka, kunci JWT dari build image, kunci admin tetap lama, AdminServer hanya lokal, database Derby, tanpa REST.
Uji dari dalam pod, jadi semua webapp terlihat terbuka. Jalankan bagian URL dari luar jaringan kantor. Sumber: uji Rama Digital di pod podman dengan image resmi ghcr.io/apache/ofbiz 24.09.07 dan 24.09.08, 6 November 2026.

Di image 24.09.07, ofbiz.admin.key masih kunci tetap lama (CVE-2026-97355). AdminServer mendengar di 127.0.0.1 secara bawaan, jadi kunci ini hanya berbahaya bila Anda membuka port 10523 ke jaringan.

Cek hasil: catat jumlah back office yang "TERBUKA", status security.token.key, dan jenis database. Angka TERBUKA di atas 0 dari luar kantor berarti pasang langkah 4a hari ini juga.

Langkah 3: Update ke 24.09.08 dan pasang kunci baru

Update adalah satu-satunya langkah yang menutup 46 CVE ini. Kunci rahasia lama tetap berlaku sesudah update, jadi ganti kunci di langkah yang sama.

3a. Image Docker resmi

# 3a. Image Docker resmi (diuji dengan podman, perintah docker sama)
docker pull ghcr.io/apache/ofbiz:24.09.08
docker stop -t 30 ofbiz && docker rm ofbiz
# Pakai volume, env, dan jaringan yang sama dengan container lama
docker run -d --name ofbiz -p 127.0.0.1:8443:8443 \
  -v ofbiz-runtime:/ofbiz/runtime -v ofbiz-config:/ofbiz/config \
  ghcr.io/apache/ofbiz:24.09.08
Terminal: podman pull image 24.09.08, stop dan hapus container lama, lalu run container baru dengan volume runtime dan config yang sama.
Volume runtime menyimpan database dan log, jadi data tetap ada. Di uji kami, login admin dengan password lama tetap berhasil. Sumber: uji Rama Digital di pod podman dengan image resmi ghcr.io/apache/ofbiz 24.09.07 dan 24.09.08, 6 November 2026.

Di uji kami, container 24.09.08 memakai volume runtime yang sama, tidak memuat data ulang, dan login admin dengan password lama tetap berhasil. Baca juga panduan Docker OFBiz.

3b. Salin ulang security.properties, lalu pasang kunci sendiri

# 3b. Hanya bila /ofbiz/config/security.properties ada: salin ulang dari 24.09.08, lalu pasang kunci sendiri
docker exec ofbiz cp /ofbiz/framework/security/config/security.properties /ofbiz/config/security.properties
docker exec ofbiz sh -c 'sed -i "s#^security.token.key=.*#security.token.key=$(head -c 48 /dev/urandom | base64 -w 0)#" /ofbiz/config/security.properties'
docker restart -t 30 ofbiz
Terminal: salinan lama tidak punya 2 properti baru dari 24.09.08. Sesudah salin ulang dan restart, skrip menulis AMAN dan kunci sendiri 64 karakter.
Salinan security.properties dari versi lama di /ofbiz/config menutupi berkas versi baru. Ganti salinan itu sesudah setiap update. Sumber: uji Rama Digital di pod podman dengan image resmi ghcr.io/apache/ofbiz 24.09.07 dan 24.09.08, 6 November 2026.

Di uji kami, salinan dari 24.09.07 tidak punya 2 properti yang ada di 24.09.08: allowFilePaths dan webtools.datafile.url.allowed.hosts. Salinan lama itu menutupi berkas baru, jadi setelan baru dari rilis ini tidak aktif sampai Anda menyalin ulang.

3c. Instalasi dari zip atau git

# 3c. Instalasi dari zip atau git: unduh dan cek SHA-512
curl -O https://downloads.apache.org/ofbiz/apache-ofbiz-24.09.08.zip
curl -O https://downloads.apache.org/ofbiz/apache-ofbiz-24.09.08.zip.sha512
[ "$(sha512sum apache-ofbiz-24.09.08.zip | cut -d ' ' -f 1)" = "$(cut -d : -f 2 apache-ofbiz-24.09.08.zip.sha512 | tr -d ' \n' | tr A-F a-f)" ] && echo SHA512 COCOK
unzip -q apache-ofbiz-24.09.08.zip && cd apache-ofbiz-24.09.08
# Folder zip tanpa .git membuat gradlew gagal dengan pesan "No hooks found"
git init -q .
# Pindahkan plugin, konfigurasi, dan data Anda ke folder baru, lalu build (tidak diuji)
./gradlew build
# Wajib bila security.properties Anda berasal dari rilis sebelum 24.09.06 (CVE-2026-105330)
./gradlew rotateSecretKeys

Menurut catatan CVE-2026-105330, update saja tidak mengganti kunci yang sudah ada. Instalasi yang membawa security.properties dari rilis sebelum 24.09.06 wajib menjalankan ./gradlew rotateSecretKeys. Task ini membuat kunci JWT baru, jadi semua token lama berhenti berlaku.

Di uji kami di image eclipse-temurin:17-jdk, cek SHA-512 cocok. ./gradlew gagal tanpa folder .git. Sesudah git init, generateSecretKeys mengisi kunci kosong, dan rotateSecretKeys mengganti kunci itu.

Kami tidak menguji build dan migrasi data dari zip, karena langkah itu bergantung pada plugin dan database Anda.

3d. Ganti password admin dan cek akun

Image Docker memakai password admin bawaan dari dokumentasi bila variabel OFBIZ_ADMIN_PASSWORD kosong saat start pertama. Ganti password akun admin, hapus akun yang tidak dipakai, dan cabut izin back office dari akun mitra yang tidak butuh.

Tangga 8 baris: cek versi, cek paparan, update, salin ulang security.properties dengan kunci sendiri, ganti password, 2 langkah sementara, lalu cari tanda.
(1) sampai (3c): urutan perbaikan. (4a) dan (4b): langkah sementara. Label merah mengingatkan bahwa langkah 4 tidak membuat server aman. Sumber: pengumuman CVE Apache OFBiz, catatan CVE-2026-105330, uji Rama Digital, dan analisa Rama Digital.

Cek hasil: skrip versi menulis "AMAN untuk 46 CVE", footer menampilkan 24.09.08, dan skrip paparan menulis "kunci sendiri" serta "bukan kunci tetap lama".

Langkah 4: Kurangi dampak sampai update selesai

Langkah ini mengurangi dampak, tetapi tidak membuat server aman. Akun yang sah tetap bisa memakai celah yang butuh login.

Analisa Rama Digital: pengumuman Apache hanya menulis update sebagai mitigasi. Kami memilih 2 langkah sementara. Kondisi: update belum bisa jalan hari ini, atau server masih memakai 18.12. Batas: akun yang sah tetap bisa memakai celah yang butuh login.

4a. Tutup back office dari internet di reverse proxy

# Langkah 4a: tutup back office OFBiz dari internet di nginx. Ganti 203.0.113.0/24 dengan IP kantor atau VPN Anda.
# Uji: nginx 1.29 di depan OFBiz pada port 8088. Di server Anda, taruh 2 blok location ini di server 443 yang sudah ada.
server {
    listen 8088;
    # Halaman publik toko (plugin ecommerce). Hapus blok ini bila OFBiz hanya dipakai karyawan.
    location ~ ^/(ecommerce|images|common-js)(/|$) {
        proxy_pass https://127.0.0.1:8443;
        proxy_set_header Host $host;
    }
    # Semua path lain, termasuk webtools, partymgr, sfa, dan rest: hanya dari IP kantor atau VPN.
    location / {
        allow 203.0.113.0/24;
        deny all;
        proxy_pass https://127.0.0.1:8443;
        proxy_set_header Host $host;
    }
}
Terminal: nginx -t lolos, /webtools dan /webtools;x dari IP luar mendapat 403, /ecommerce diteruskan ke OFBiz, dan 0 dari 15 back office terbuka lewat proxy.
Image uji tidak memuat plugin ecommerce, jadi OFBiz menjawab 404 untuk path itu. Di uji ini, 127.0.0.1 berperan sebagai IP luar. Sumber: uji Rama Digital dengan image resmi nginx 1.29 di depan OFBiz 24.09.07, 6 November 2026.

Aturan ini menolak semua path kecuali halaman publik toko. Di uji kami, path dengan parameter titik koma seperti /webtools;x juga ditolak, karena blok location / menangkap semua path lain.

Bila OFBiz hanya dipakai karyawan, hapus blok ecommerce dan izinkan hanya IP kantor atau VPN. Tutup juga port 8080 dan 8443 di firewall, agar OFBiz hanya bisa dicapai lewat proxy.

4b. Pasang security.token.key sendiri

# 4b. Image Docker: taruh security.properties dengan kunci sendiri di volume /ofbiz/config
cp /ofbiz/framework/security/config/security.properties /ofbiz/config/security.properties
sed -i "s#^security.token.key=.*#security.token.key=$(head -c 48 /dev/urandom | base64 -w 0)#" /ofbiz/config/security.properties
# Restart container agar OFBiz membaca kunci baru. Sesi login dan token reset password lama berhenti.
Terminal: salin security.properties ke /ofbiz/config, ganti security.token.key dengan 48 byte acak, lalu skrip paparan menulis kunci sendiri 64 karakter.
Folder /ofbiz/config ada di depan salinan bawaan pada classpath. Nilai kunci tidak tampil di layar. Sumber: uji Rama Digital di pod podman dengan image resmi ghcr.io/apache/ofbiz 24.09.07 dan 24.09.08, 6 November 2026.

Langkah ini mengganti kunci JWT di image Docker. Langkah ini tidak menutup celah lain, jadi tetap jalankan langkah 3.

Cek hasil: dari laptop di luar kantor, skrip paparan menulis "TERBUKA: 0", dan bagian 3 menulis "kunci sendiri".

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-ofbiz.sh. Skrip mencari parameter dari advisory dan alat webtools di log akses, error render di ofbiz.log, dan berkas baru di folder OFBiz.

#!/usr/bin/env bash
# Cari tanda pemakaian celah OFBiz rilis 24.09.08 di log dan folder OFBiz. Skrip hanya membaca.
# Pakai: bash cek-tanda-ofbiz.sh <folder OFBiz> <sejak YYYY-MM-DD>
# Log reverse proxy (nginx, Apache) juga bisa diperiksa: bash cek-tanda-ofbiz.sh <folder> <tanggal> /var/log/nginx
set -u
DIR=${1:?folder OFBiz}
SEJAK=${2:?tanggal mulai, contoh 2026-10-01}
LOGDIR=${3:-$DIR/runtime/logs}
TANDA=0; PERIKSA=0
tanda() { echo "  TANDA: $1"; TANDA=$((TANDA + 1)); }
periksa() { echo "  PERIKSA: $1"; PERIKSA=$((PERIKSA + 1)); }
akses() { find "$LOGDIR" -type f \( -name 'access_log*' -o -name 'access.log*' \) -newermt "$SEJAK" 2>/dev/null | sort; }
cari() { akses | xargs -r zgrep -hE "$1" 2>/dev/null; }

echo "== 1. Log akses ($LOGDIR, sejak $SEJAK)"
echo "  $(akses | wc -l) berkas log akses"
while IFS= read -r l; do tanda "parameter dari advisory: ${l:0:150}"; done < <(cari '_LAST_VIEW_NAME_|mainDecoratorLocation|=file(:|%3[aA])')
while IFS= read -r l; do periksa "alat webtools: ${l:0:150}"; done < <(cari '/webtools/control/(xmldsdump|viewdatafile|EntitySQLProcessor|ProgramExport|EntityImport)')
while IFS= read -r l; do periksa "POST portal SFA: ${l:0:150}"; done < <(cari '"POST /sfa/control/editPortalPage')
IPKEY=$(cari 'externalLoginKey=' | awk '{print $1}' | sort -u | tr '\n' ' ')
[ -n "$IPKEY" ] && periksa "externalLoginKey di URL dari IP: $IPKEY(cocokkan dengan IP kantor)"

echo "== 2. Error di ofbiz.log dan error.log"
for f in "$LOGDIR"/ofbiz.log* "$LOGDIR"/error.log*; do
  [ -f "$f" ] || continue
  zgrep -hE 'Error rendering screen \[file:|groovy\.lang\.|MissingPropertyException|SecuredUpload|JWT .*(invalid|fail)' "$f" 2>/dev/null | tail -n 5 |
    while IFS= read -r l; do echo "  PERIKSA: ${l:0:150}"; done
done
N2=$(cat "$LOGDIR"/ofbiz.log* "$LOGDIR"/error.log* 2>/dev/null | grep -cE 'Error rendering screen \[file:|groovy\.lang\.|MissingPropertyException|SecuredUpload|JWT .*(invalid|fail)')
PERIKSA=$((PERIKSA + N2))

echo "== 3. Berkas baru atau berubah di folder OFBiz, di luar runtime"
while IFS= read -r f; do
  rel=${f#"$DIR"/}
  case "$rel" in *.jsp|*.jspx|*.war) tanda "berkas server baru: $rel" ;; *) periksa "berubah: $rel" ;; esac
done < <(find "$DIR" -path "$DIR/runtime" -prune -o -path "$DIR/.git" -prune -o -type f -newermt "$SEJAK" \
  \( -name '*.jsp' -o -name '*.jspx' -o -name '*.war' -o -name '*.groovy' -o -name '*.ftl' -o -name '*.xml' -o -name '*.properties' -o -name '*.jar' \) -print 2>/dev/null | head -n 20)

echo "== Hasil: TANDA $TANDA, PERIKSA $PERIKSA"
[ "$TANDA" -gt 0 ] && echo "Simpan log sebagai bukti, putus akses dari internet, lalu ikuti langkah 5 di artikel."
exit 0
bash cek-tanda-ofbiz.sh /opt/ofbiz 2026-10-01
# Log nginx di depan OFBiz
bash cek-tanda-ofbiz.sh /opt/ofbiz 2026-10-01 /var/log/nginx
Terminal: skrip tanda menemukan 2 TANDA (parameter advisory di URL, berkas .jsp baru) dan 4 PERIKSA (xmldsdump, externalLoginKey, error render file:, security.properties).
Baris log, IP dari blok dokumentasi, dan berkas .jsp adalah data dummy. Berkas security.properties berubah karena langkah 3b. Tidak ada serangan di uji ini. Sumber: uji Rama Digital di pod podman dengan image resmi ghcr.io/apache/ofbiz 24.09.07 dan 24.09.08, 6 November 2026.

Di uji kami, 1 PERIKSA adalah security.properties yang kami ubah sendiri di langkah 3b. Cocokkan setiap PERIKSA dengan catatan perubahan tim Anda.

Dua kolom tanda: di log akses (parameter advisory, alat webtools, externalLoginKey dari IP asing) dan di server (berkas baru, error render, akun admin baru).
Kolom amber: tanda di log akses. Kolom merah: tanda di server dan data. Kotak bawah: langkah bila Anda menemukan 1 tanda saja. Sumber: catatan CVE Apache OFBiz, uji Rama Digital, dan analisa Rama Digital.

Banyak serangan memakai POST, dan log akses tidak menyimpan isi POST. Jadi cek juga akun di database dengan query ini. Kami menguji query ini di SQL Processor webtools pada database Derby bawaan image.

-- Akun yang dibuat atau diubah sejak 1 Oktober 2026
SELECT USER_LOGIN_ID, CREATED_STAMP, LAST_UPDATED_STAMP FROM USER_LOGIN
 WHERE LAST_UPDATED_STAMP > '2026-10-01 00:00:00' ORDER BY LAST_UPDATED_STAMP DESC;
-- Akun di grup admin penuh
SELECT USER_LOGIN_ID, GROUP_ID, FROM_DATE FROM USER_LOGIN_SECURITY_GROUP
 WHERE GROUP_ID IN ('FULLADMIN', 'SUPER') ORDER BY FROM_DATE DESC;

Cek hasil: skrip menulis "TANDA 0", setiap PERIKSA punya penjelasan, dan query tidak menampilkan akun admin yang tidak Anda kenal. Log bisa dihapus penyerang, jadi 0 tanda belum berarti aman.

Bila ada 1 tanda saja, simpan log dan backup database sebagai bukti. Lalu putus akses back office dari internet, ganti semua password dan kunci, dan bangun ulang server dari rilis 24.09.08 yang bersih.

Bila OFBiz menyimpan data pelanggan atau karyawan, 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 OFBiz

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

Waktu (WIB)Server dummyYang dicekHasilTindakan
08.00erp-gudang (Docker 24.09.07)Langkah 1 dan 2RENTAN, 15 back office terbukaLangkah 4a sekarang, update siang ini
08.30erp-pusat (zip 24.09.03, MySQL)Langkah 1 dan 2RENTAN, kunci JWT bawaan lamaUpdate, lalu rotateSecretKeys
09.00erp-lama (18.12.16, hanya VPN)Langkah 1 dan 2TANPA PATCH, 0 terbuka dari luarRencanakan migrasi ke 24.09.08
09.30erp-gudangLangkah 5TANDA 1: berkas .jsp baruSimpan bukti, ganti kunci, bangun ulang

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

Siapa yang memasang patch

OFBiz berjalan di server Anda, jadi penyedia hosting tidak memasang patch ini untuk Anda.

Jenis layananPemegang patchYang Anda kerjakan
OFBiz di VPS atau server sendiriTim AndaLangkah 1 sampai 5
OFBiz di Docker atau KubernetesTim AndaGanti tag image, salin ulang konfigurasi, lalu langkah 5
ERP buatan integrator berbasis OFBizIntegrator, sesuai kontrakMinta bukti versi tertulis dan hasil langkah 2 dan 5
OFBiz di layanan hosting terkelolaPenyedia, sesuai kontrakMinta tanggal update dan hasil langkah 5

Rekomendasi Rama Digital: taruh back office di belakang VPN, update aplikasi web dengan jadwal tetap, dan pantau rilis keamanan semua framework yang Anda pakai, misalnya peringatan Rails Active Storage CVE-2026-122006.

Checklist hari ini

  1. Buat daftar semua server OFBiz, termasuk staging. Pemilik: tim IT. Bukti: daftar nama dan versi.
  2. Cek versi dengan langkah 1. Pemilik: tim IT. Bukti: output skrip.
  3. Cek paparan dari luar kantor dengan langkah 2. Pemilik: tim IT. Bukti: output skrip.
  4. Pasang langkah 4a di setiap server yang belum bisa update hari ini. Pemilik: tim IT. Bukti: output skrip paparan.
  5. Update ke 24.09.08 dan pasang kunci baru. Pemilik: tim IT atau integrator. Bukti: output skrip sesudah update.
  6. Ganti password admin dan rapikan akun. Pemilik: pemilik bisnis dan tim IT. Bukti: daftar akun aktif.
  7. Cari tanda dengan langkah 5. Pemilik: tim IT dan tim keamanan. Bukti: output skrip dan query.

Tanya jawab

Apakah celah ini sudah dipakai menyerang?

Per 6 November 2026, kami tidak menemukan laporan serangan, dan 46 CVE ini belum masuk CISA KEV. Tetapi 3 celah OFBiz sebelumnya masuk KEV, jadi update hari ini.

OFBiz saya hanya bisa dibuka lewat VPN. Apakah saya aman?

Risiko dari internet jauh lebih kecil. Tetap update, karena 23 CVE eksekusi kode dan hak akses bisa dipakai oleh akun karyawan atau mitra yang sah.

Saya masih memakai 18.12. Apa yang saya kerjakan?

Lini 18.12 tidak mendapat rilis baru. Pasang langkah 4a hari ini, lalu rencanakan migrasi ke 24.09.08.

Apakah update Docker menghapus data saya?

Tidak, bila Anda memakai volume yang sama untuk /ofbiz/runtime. Di uji kami, data dan login admin tetap ada sesudah ganti image. Tetap backup sebelum update.

Kenapa saya harus menyalin ulang security.properties?

Salinan di /ofbiz/config menutupi berkas dari image baru. Di uji kami, salinan lama tidak punya 2 properti dari 24.09.08.

Apakah rotateSecretKeys membuat user logout?

Ya. Task ini membuat kunci JWT baru, jadi token lama, termasuk token reset password, berhenti berlaku. Jalankan di jendela update.

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 menggantikan update, dan update tidak membatalkan data yang sudah bocor. Bila server OFBiz Anda menunjukkan tanda di langkah 5, atau Anda butuh bantuan update dan audit, pakai Vibe Code Rescue. Untuk 1 masalah mendesak hari ini, jadwalkan sesi 30 menit.

Sumber