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.

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
| CVE | Dampak tanpa login | CVSS 3.1 |
|---|---|---|
| CVE-2026-83542 | Eksekusi kode lewat halaman login | 9.8 (ADP) |
| CVE-2026-68524 | Eksekusi kode: OFBiz memuat definisi layar dari lokasi penyerang | Belum ada |
| CVE-2026-73578 | Bypass login lewat saved-view, dampak eksekusi kode | Belum ada |
| CVE-2026-82907 | externalLoginKey yang tertangkap memberi sesi penuh | 9.8 (ADP) |
| CVE-2026-73577 | Bypass login lewat akhiran path | Belum ada |
| CVE-2026-92887 | Operasi REST tanpa atribut auth terbuka tanpa login | Belum ada |
| CVE-2026-105330 | Kunci JWT bawaan lama memberi akses admin | Belum ada |
| CVE-2026-109928 | Token reset password memberi sesi penuh | Belum ada |
| CVE-2026-114277 | Login sosial Janrain mengikat akun yang salah | Belum ada |
| CVE-2026-73580 | Data organisasi dan karyawan HR bocor | Belum ada |
| CVE-2026-83538 | Data HR, katalog, dan pesanan bocor | Belum ada |
| CVE-2026-81815 | SQL injection, hanya MySQL dan MariaDB | Belum ada |

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 OFBiz | Risiko | Alasan |
|---|---|---|
| Back office bisa dibuka dari internet tanpa VPN | Tertinggi | 12 CVE tanpa login, termasuk eksekusi kode |
| Database MySQL atau MariaDB | Tinggi | CVE-2026-81815 adalah SQL injection tanpa login di 2 database ini |
Naik dari rilis sebelum 24.09.06, dengan security.internal.sso.enabled=true | Tinggi | CVE-2026-105330: kunci JWT bawaan lama memberi akses admin |
| Banyak akun karyawan, mitra, atau pelanggan | Periksa | 23 CVE butuh akun, sering hanya izin lihat |
| Multitenant atau plugin REST | Periksa | CVE-2026-74841, CVE-2026-84728, dan CVE-2026-92887 hanya berlaku di fitur ini |
| Hanya lewat VPN dan sudah 24.09.08 | Rendah | Tetap cari tanda dari waktu sebelum update |

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.
| Versi | Instalasi | Status per 6 November 2026 | Tindakan |
|---|---|---|---|
| 24.09.01 sampai 24.09.07 | Zip, git, atau image Docker | Rentan, 46 CVE | Update ke 24.09.08 hari ini |
| 18.12.19 dan lebih lama | Lini lama | Tanpa patch | Naik ke 24.09.08. Sementara, langkah 4 |
| Naik dari rilis sebelum 24.09.06 | security.properties lama dipakai lagi | Kunci JWT bisa bawaan lama | Sesudah update: ./gradlew rotateSecretKeys |
| Image Docker resmi | Kunci dari proses build image | Periksa kunci | Kunci sendiri di /ofbiz/config |
| 24.09.08 | Zip 2 November 2026 | Aman untuk 46 CVE | Tetap jalankan langkah 5 |

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/runtimeatau folderruntime/. - 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

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

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

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

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.

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;
}
}

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.

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

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

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 dummy | Yang dicek | Hasil | Tindakan |
|---|---|---|---|---|
| 08.00 | erp-gudang (Docker 24.09.07) | Langkah 1 dan 2 | RENTAN, 15 back office terbuka | Langkah 4a sekarang, update siang ini |
| 08.30 | erp-pusat (zip 24.09.03, MySQL) | Langkah 1 dan 2 | RENTAN, kunci JWT bawaan lama | Update, lalu rotateSecretKeys |
| 09.00 | erp-lama (18.12.16, hanya VPN) | Langkah 1 dan 2 | TANPA PATCH, 0 terbuka dari luar | Rencanakan migrasi ke 24.09.08 |
| 09.30 | erp-gudang | Langkah 5 | TANDA 1: berkas .jsp baru | Simpan 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 layanan | Pemegang patch | Yang Anda kerjakan |
|---|---|---|
| OFBiz di VPS atau server sendiri | Tim Anda | Langkah 1 sampai 5 |
| OFBiz di Docker atau Kubernetes | Tim Anda | Ganti tag image, salin ulang konfigurasi, lalu langkah 5 |
| ERP buatan integrator berbasis OFBiz | Integrator, sesuai kontrak | Minta bukti versi tertulis dan hasil langkah 2 dan 5 |
| OFBiz di layanan hosting terkelola | Penyedia, sesuai kontrak | Minta 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
- Buat daftar semua server OFBiz, termasuk staging. Pemilik: tim IT. Bukti: daftar nama dan versi.
- Cek versi dengan langkah 1. Pemilik: tim IT. Bukti: output skrip.
- Cek paparan dari luar kantor dengan langkah 2. Pemilik: tim IT. Bukti: output skrip.
- Pasang langkah 4a di setiap server yang belum bisa update hari ini. Pemilik: tim IT. Bukti: output skrip paparan.
- Update ke 24.09.08 dan pasang kunci baru. Pemilik: tim IT atau integrator. Bukti: output skrip sesudah update.
- Ganti password admin dan rapikan akun. Pemilik: pemilik bisnis dan tim IT. Bukti: daftar akun aktif.
- 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
- pengumuman CVE Apache OFBiz: daftar 46 CVE, versi terdampak, dan mitigasi resmi, 4 November 2026.
- halaman security Apache OFBiz: versi terdampak dan nomor PR setiap CVE.
- catatan rilis 24.09.08: daftar perbaikan keamanan di 24.09.08.
- halaman unduhan OFBiz: rilis 24.09.08 dan daftar rilis 18.12.
- catatan CVE-2026-83542 dan catatan CVE-2026-82907: deskripsi resmi, CWE, dan skor CISA ADP 9.8.
- catatan CVE-2026-105330: syarat kunci JWT lama dan task rotateSecretKeys.
- image Docker resmi OFBiz dan panduan Docker OFBiz: tag image, volume, dan variabel start.
- CISA KEV: status per 6 November 2026 dan 3 celah OFBiz sebelumnya.
- UU 27/2022 tentang Pelindungan Data Pribadi: kewajiban melapor kebocoran data pribadi.




