CVE-2026-104012 CVSS 8.8 — HIGH wordpress เผยแพร่: 2026-10-31

ช่องโหว่ Privilege Escalation ใน Rox Appointment Booking – Appointment Booking Scheduling Solution — CVE-2026-104012 (CVSS 8.8)

⚠️ ระดับสูง (CVSS 8.8) — ควรแก้ไขภายใน 48-72 ชั่วโมง

📋 สรุปช่องโหว่

ช่องโหว่ Privilege Escalation ใน "Rox Appointment Booking – Appointment Booking Scheduling Solution" มี CVSS Score 8.8 ระดับ "สูง"

ช่องโหว่นี้ทำให้ผู้ใช้สิทธิ์ต่ำ (Subscriber/Contributor) ยกระดับตัวเองเป็น Administrator ได้โดยไม่ได้รับอนุญาต

แม้ต้องมีบัญชีในระบบ แต่ความเสียหายเทียบเท่ากับการที่ผู้โจมตีได้รับสิทธิ์ Admin เต็มรูปแบบ

💥 ผลกระทบที่อาจเกิดขึ้น

ผลกระทบเมื่อยกระดับสิทธิ์สำเร็จ:

• ควบคุมเว็บไซต์สมบูรณ์
• แก้ไข/ลบเนื้อหาทั้งหมด
• ติดตั้ง Plugin อันตราย: backdoor, malware
• ขโมยข้อมูลผู้ใช้ทั้งหมด
• เปลี่ยน Admin Password: ล็อกเจ้าของออก
• สร้าง Admin Account ใหม่: backdoor ถาวร

🖥️ ซอฟต์แวร์และระบบที่ได้รับผลกระทบ

WordPress Plugin: Rox Appointment Booking – Appointment Booking Scheduling Solution — ตรวจสอบที่ https://nvd.nist.gov/vuln/detail/CVE-2026-104012

🔧 แนวทางการแก้ไขและป้องกัน

  • ขั้นตอนแก้ไข:
  • 1. อัพเดตทันที
  • 2. ตรวจสอบ User Accounts: ดู Users > All Users หา account ไม่รู้จัก
  • 3. ตรวจสอบ Admin Accounts: ยืนยันทุก admin เป็นบัญชีที่รู้จัก
  • 4. Review Activity Logs: ตรวจประวัติ login และการเปลี่ยน permission
  • 5. เปลี่ยนรหัสผ่าน admin ทุกบัญชี
  • 6. จำกัดการสมัครสมาชิก: ปิดหากไม่จำเป็น

📄 รายละเอียดต้นฉบับ (ภาษาอังกฤษ)

The Rox Appointment Booking – Appointment Booking Scheduling Solution plugin for WordPress is vulnerable to Privilege Escalation via Mass Assignment in all versions up to, and including, 1.3.1 This is due to the public `/rox-appointment-booking/v1/public/booking` REST endpoint performing mass-assignment of the raw request body into a new customer row while `CustomerModel::$fillable` includes the internal `wp_user_id` column, allowing an unauthenticated attacker to persist an arbitrary WordPress user ID alongside an attacker-controlled email address with no authorization check. When an administrator subsequently opens the poisoned customer record and clicks Update Customer, `SaveCustomer::handleRequest()` passes the stored `wp_user_id` and attacker-supplied email to `wp_update_user()` — succeeding because `LinkedAccount::canChange()` unconditionally returns true when the acting user holds the `edit_users` capability — thereby overwriting the targeted administrator's email address and enabling full account takeover via a standard WordPress password-reset request. Successful exploitation requires an administrator to open and save the poisoned record, and the attacker must know or guess a valid administrator user ID (such as the default user ID 1).

🔗 แหล่งอ้างอิง