FlawOpen

flawopen.com/Incidents/wordpress-stored-xss-admin-session-campaign-october-2026

● WordPress plugin installations (campaign observations attributed to Patchstack) · CVE-2026-93836 · 2026-10-04 · CVSS 7.2 · Tinggi
Riset Keamanan · FlawOpen

Kampanye Stored XSS WordPress: dua plugin, satu rantai persistensi

Patchstack mengamati upaya menggunakan implan pascaeksploitasi yang sama melalui dua celah Stored XSS WordPress. Perbarui kedua plugin dan periksa persistensi; patch tidak membersihkan situs yang sudah disusupi.[1], [2], [3], [4], [5]

💡 Penjelasan Sederhana (ELI5)

Bayangkan dua kotak saran publik yang catatannya nanti dibuka administrator situs. Jika situs menyimpan catatan sebagai markup yang dapat dijalankan, bukan teks biasa, catatan itu dapat bertindak dengan hak browser administrator saat dibuka. Laporan kampanye menyebut dua celah plugin yang berbeda sebagai titik masuk, lalu ada upaya mempertahankan akses setelah pembaruan.[1], [8], [9]

Konsep Kunci & Istilah

Stored XSS
Teks yang dikendalikan penyerang disimpan lalu ditampilkan sebagai markup yang dapat dijalankan di browser. Dalam kasus ini, konteks pentingnya adalah administrasi WordPress.[2], [3], [8], [9]
Sesi same-origin
Browser otomatis menyertakan sesi situs pada permintaan same-origin. Skrip yang sudah berjalan dalam origin situs dapat bertindak melalui halaman tanpa membaca cookie HttpOnly.[1], [17], [18]
Persistensi
Akses yang tetap ada setelah celah awal diperbaiki, misalnya akun atau file tanpa izin. Pembaruan yang bersih tidak menghapus perubahan tersebut.[1]
Atribusi CVSS
Catatan CNA Wordfence memberi skor CVSS 3.1 7,2 untuk masing-masing CVE. Pemberitahuan WPC Product Bundles dari Patchstack menampilkan 7,1; artikel ini menggunakan skor pada catatan CVE dan menyebutkan sumbernya.[2], [3], [6]
Petunjuk kode sumber
Referensi CNA Wordfence menunjuk ke file WPC Product Bundles dan Ninja Forms pada versi tertentu yang berkaitan dengan validasi, penyimpanan, dan rendering admin. Tautan tersebut adalah petunjuk sumber, bukan diff perbaikan yang telah diverifikasi. Pasangan PHP di atas hanya model encoding output, bukan kode plugin yang direkonstruksi.[8], [9], [10], [11], [12], [13], [14], [15], [16]

Pemetaan kerangka kerja

Kronologi Insiden

2026-09-21 / 2026-09-22

Catatan CNA Wordfence menunjukkan tanggal publikasi 21 September, sedangkan Patchstack menyebut kerentanan telah diungkapkan ke publik pada 22 September. Sumber berbeda satu hari; catatan CVE mencantumkan versi plugin terdampak hingga 8.6.6 dan 3.15.3.[2], [3], [8], [9], [1]

2026-10-04 hingga 2026-10-05

Patchstack melaporkan pengamatan upaya dengan tahap pascaeksploitasi yang sama, pertama melalui WPC Product Bundles lalu Ninja Forms. Patchstack menerbitkan analisisnya pada 6 Oktober.[1]

Alur Serangan Langkah demi Langkah

Langkah 1

Dua titik masuk Stored XSS yang berbeda

Patchstack menyebut kampanye menggunakan CVE-2026-93836 pada WPC Product Bundles dan CVE-2026-94504 pada Ninja Forms. Keduanya celah terpisah yang dihubungkan laporan melalui aktivitas lanjutan yang sama.[1], [2], [3], [8], [9]

Langkah 2

Konten tersimpan dibuka administrator

Data yang dikirim disimpan lalu ditampilkan di tampilan admin untuk pesanan atau kiriman formulir. Jika output tidak aman, data dapat berjalan sebagai markup; kunjungan administrator menyediakan konteks browser.[1], [8], [9], [10], [11], [12], [13], [14]

Langkah 3

Skrip mewarisi konteks situs

Kode yang berjalan di origin WordPress dapat mengirim permintaan same-origin dengan sesi administrator yang sudah ada. HttpOnly melindungi kerahasiaan cookie, tetapi tidak mencegah kode yang sudah berjalan di origin itu memakai sesi.[1], [17], [18]

Langkah 4

Akses lanjutan dapat bertahan setelah celah ditutup

Patchstack melaporkan upaya memasang plugin dan membuat persistensi tambahan. Ini pengamatan kampanye, bukan hasil terkonfirmasi untuk setiap sasaran; pembaruan menutup titik masuk rentan, tetapi tidak membatalkan perubahan yang sudah dibuat.[1], [4], [5]

Kode Sumber: Rentan vs Aman

Ini adalah perubahan kode sumber pada Textarea::admin_form_element() milik Ninja Forms, bukan model umum. Versi 3.15.3 menyisipkan teks kiriman yang tersimpan langsung ke badan HTML textarea; versi 3.15.4 menerapkan esc_textarea() sebelum menampilkannya. Ini menutup batas interpretasi markup untuk konten textarea. Contoh ini hanya mendokumentasikan jalur Ninja Forms untuk CVE-2026-94504; ini bukan perbaikan WPC Product Bundles untuk CVE-2026-93836. Gunakan escaping yang sesuai konteks untuk keluaran lainnya.[13], [15], [16]

IMPLEMENTASI RENTAN
public function admin_form_element( $id, $value )
{
    return "<textarea class='widefat' name='fields[$id]'>$value</textarea>";
}
PERBAIKAN AMAN & KUAT
public function admin_form_element( $id, $value )
{
    return "<textarea class='widefat' name='fields[$id]'>" . esc_textarea( $value ) . "</textarea>";
}

Daftar Periksa Penguatan Sistem Rekayasa

Sumber