ช่องโหว่ Privilege Escalation — CVE-2026-118193 (CVSS 8.8)
📋 สรุปช่องโหว่
ช่องโหว่ Privilege Escalation ใน WordPress Plugin "GiveWP – Donation Plugin and Fundraising Platform" ถูกค้นพบโดยมี CVSS Score 8.8 ระดับ "สูง"
ช่องโหว่นี้ทำให้ผู้ใช้ที่มีสิทธิ์ต่ำ (เช่น Subscriber หรือ Contributor) สามารถยกระดับสิทธิ์ตัวเองเป็น Administrator ได้โดยไม่ได้รับอนุญาต ปัญหาเกิดจากการตรวจสอบ permission ที่ไม่รัดกุมในฟังก์ชันสำคัญของระบบ
แม้ว่าการโจมตีนี้ต้องมีบัญชีในระบบ แต่ความเสียหายที่เกิดขึ้นได้นั้นเทียบเท่ากับการที่ผู้โจมตีได้รับสิทธิ์ Admin เต็มรูปแบบ
💥 ผลกระทบที่อาจเกิดขึ้น
ผลกระทบเมื่อผู้โจมตียกระดับสิทธิ์สำเร็จ:
• ควบคุมเว็บไซต์สมบูรณ์: เข้าถึงทุกส่วนของ Admin Dashboard
• แก้ไข/ลบเนื้อหาทั้งหมด: ทำลาย SEO และชื่อเสียงองค์กร
• ติดตั้ง Plugin อันตราย: เพิ่ม backdoor หรือ malware เข้าไปในระบบ
• ขโมยข้อมูลผู้ใช้: เข้าถึงข้อมูลสมาชิกทั้งหมด
• เปลี่ยน Admin Password: ล็อกเจ้าของเว็บออกจากระบบ
• สร้าง Admin Account ใหม่: สร้าง backdoor account สำหรับเข้าใช้ในอนาคต
🖥️ ซอฟต์แวร์และระบบที่ได้รับผลกระทบ
WordPress Plugin: GiveWP – Donation Plugin and Fundraising Platform
ตรวจสอบเวอร์ชันที่ได้รับผลกระทบที่ https://nvd.nist.gov/vuln/detail/CVE-2026-118193
🔧 แนวทางการแก้ไขและป้องกัน
- ขั้นตอนแก้ไข:
- 1. อัพเดตทันที: อัพเดตซอฟต์แวร์เป็นเวอร์ชันที่แก้ไขช่องโหว่แล้ว
- 2. ตรวจสอบ User Accounts: ดู Users > All Users ใน WordPress หาบัญชีที่ไม่รู้จักหรือมีสิทธิ์ผิดปกติ
- 3. ตรวจสอบ Admin Accounts: ยืนยันว่า admin ทุกบัญชีเป็นบัญชีที่คุณรู้จักและสร้างขึ้นเอง
- 4. Review Activity Logs: ตรวจสอบประวัติการ login และการเปลี่ยนแปลงสิทธิ์ย้อนหลัง
- 5. เปลี่ยนรหัสผ่าน Admin: เปลี่ยนรหัสผ่านทุก admin account เป็นรหัสผ่านที่แข็งแกร่ง
- 6. Principle of Least Privilege: จำกัดการสร้างบัญชีในระบบให้เฉพาะผู้ที่จำเป็น
📄 รายละเอียดต้นฉบับ (ภาษาอังกฤษ)
The GiveWP – Donation Plugin and Fundraising Platform plugin for WordPress is vulnerable to Privilege Escalation in all versions up to, and including, 4.19.1 via the `donor_default_user_role` parameter. This is due to the `sanitize_option_donor_default_user_role()` function applying only a narrow literal check against the string `'administrator'` rather than enforcing the plugin's own `give_get_donor_safe_user_roles()` allowlist on save, and due to the `give_core_settings_import_callback()` AJAX handler writing imported JSON directly into the `give_settings` option via `update_option()` without invoking the sanitize filter at all. This makes it possible for authenticated attackers with the GiveWP Manager role (holding the `manage_give_settings` capability) and above to configure donor registration to assign privileged WordPress roles — up to and including Administrator via the import path — to every new donor account created through the platform. Via the settings save path, the Administrator role is blocked but any other elevated role (Editor, Author, etc.) is accepted; via the Tools › Import JSON path, the sanitize filter is bypassed entirely, allowing the Administrator role itself to be stored and subsequently applied to all newly registered donor accounts.