flawopen.com/Incidents/wordpress-stored-xss-admin-session-campaign-october-2026
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]
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
- Referensi CWE untuk kelemahan yang dijelaskan dalam panduan ini: CWE-79
- OWASP Top 10:2025 — A05:2025 Injection
Kronologi Insiden
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
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]
public function admin_form_element( $id, $value )
{
return "<textarea class='widefat' name='fields[$id]'>$value</textarea>";
}public function admin_form_element( $id, $value )
{
return "<textarea class='widefat' name='fields[$id]'>" . esc_textarea( $value ) . "</textarea>";
}Daftar Periksa Penguatan Sistem Rekayasa
- ✓Untuk
CVE-2026-93836, perbarui WPC Product Bundles setidaknya ke 8.6.7; pada pemeriksaan 11 Oktober 2026, WordPress.org mencantumkan 8.7.4 sebagai versi terkini. Changelog 8.7.3 juga menyebut penguatan Stored XSS tanpa mengaitkannya dengan CVE ini; pasang versi terkini. UntukCVE-2026-94504, perbarui Ninja Forms setidaknya ke 3.15.4; pada pemeriksaan 11 Oktober 2026, WordPress.org mencantumkan 3.15.5 sebagai versi terkini. Changelog 3.15.5 menambahkan penguatan Stored XSS terpisah untuk kiriman bidang Paragraph Text (Rich Text), berbeda dari perbaikan CVE di 3.15.4. Periksa versi terpasang kedua plugin di semua situs produksi.[2], [3], [4], [5] - ✓Jika versi rentan pernah terekspos, lakukan investigasi sebelum menyatakan pemulihan: bandingkan administrator di basis data dengan dashboard dan periksa plugin tak terduga, termasuk must-use.[1]
- ✓Periksa log web, WordPress, dan hosting untuk tindakan admin tak terduga, pemasangan plugin, serta perubahan saat administrator melihat pesanan atau kiriman formulir.[1]
- ✓Panduan operasional FlawOpen: Hapus akses tanpa izin melalui proses respons insiden tepercaya; setelah pembendungan, rotasi kredensial istimewa dan salt autentikasi WordPress, lalu tinjau rahasia lain yang dapat diakses situs.
- ✓Panduan operasional FlawOpen: Simpan cadangan tepercaya dan validasi basis data, file plugin, serta alur checkout/formulir sebelum memulihkan layanan; pembaruan versi saja tidak membuktikan persistensi sudah hilang.
Sumber
- Patchstack — Four ways back in: the WordPress XSS campaign that hides its own admin account (2026-10-06)
- CVE-2026-93836 — CVE record (Wordfence CNA)
- CVE-2026-94504 — CVE record (Wordfence CNA)
- WPC Product Bundles for WooCommerce — WordPress.org changelog
- Ninja Forms — WordPress.org changelog
- Patchstack — WPC Product Bundles advisory
- NCSA Qatar — Cybersecurity advisories (October 7, 2026)
- Wordfence CNA — CVE-2026-93836 vulnerability record
- Wordfence CNA — CVE-2026-94504 vulnerability record
- CVE-2026-93836 — WPC Product Bundles 8.6.5 source pointer: class-woosb.php
- CVE-2026-93836 — WPC Product Bundles 8.6.5 source pointer: class-backend.php
- CVE-2026-94504 — Ninja Forms 3.15.3 source pointer: Submission.php
- CVE-2026-94504 — Ninja Forms 3.15.3 source pointer: Textarea.php
- CVE-2026-94504 — Ninja Forms 3.15.3 source pointer: admin submission template
- Ninja Forms 3.15.3 to 3.15.4 changeset referenced by CVE-2026-94504
- Perbaikan sumber Ninja Forms 3.15.4 — Textarea::admin_form_element()
- MDN — Kebijakan same-origin