CVE-2026-103479 CVSS 7.6 — HIGH wordpress เผยแพร่: 2026-11-06

ช่องโหว่ Privilege Escalation — CVE-2026-103479 (CVSS 7.6)

⚠️ ระดับสูง (CVSS 7.6) — ควรแก้ไขภายใน 48-72 ชั่วโมง โดยเฉพาะหากเว็บไซต์อนุญาตให้ผู้ใช้ทั่วไปสมัครสมาชิกได้

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

ช่องโหว่ Privilege Escalation ใน WordPress Plugin "Pubjet | پاب‌جت" ถูกค้นพบโดยมี CVSS Score 7.6 ระดับ "สูง"

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

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

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

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

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

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

WordPress Plugin: Pubjet | پاب‌جت

ตรวจสอบเวอร์ชันที่ได้รับผลกระทบที่ https://nvd.nist.gov/vuln/detail/CVE-2026-103479

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

  • ขั้นตอนแก้ไข:
  • 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 Pubjet | پاب‌جت plugin for WordPress is vulnerable to Privilege Escalation in all versions up to, and including, 5.4.8. This is due to the `checkToken()` AJAX handler — registered under `wp_ajax_pubjet-check-token` — performing no capability check and no nonce verification before unconditionally writing the attacker-supplied `token` GET parameter directly into the site-wide `pubjet_settings` option via `pubjet_update_setting()`, prior to any remote validation. This makes it possible for authenticated attackers, with Subscriber-level access and above, to overwrite the plugin's stored REST API credential with an attacker-chosen value, immediately elevating their effective privileges to those of an authorized Pubjet API client and enabling them to invoke otherwise-restricted endpoints — `createReportage`, `updateReportage`, `deleteReportage`, `toggleCopyright`, and `createBacklink` — to create, modify, and delete arbitrary reportage posts and manipulate plugin state that Subscribers cannot normally access. The privilege escalation is self-reinforcing: because `RestApi::isTokenValid()` authenticates solely by comparing the incoming `Authorization` header against the value returned by `pubjet_token()`, which reads from the same option the unprotected handler writes to, the attacker-planted token is trusted as legitimate on all subsequent requests.

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