สรุปสั้น

บริษัท Wordfence ออกคำเตือนว่าระบบนิเวศปลั๊กอินของบริษัท BdThemes ผู้พัฒนาปลั๊กอินเสริมสำหรับ Elementor ถูกโจมตีแบบซัพพลายเชน จนทีมงานปลั๊กอินของ WordPress.org ต้องสั่งปิดการดาวน์โหลดปลั๊กอินที่ได้รับผลกระทบทั้ง 7 ตัวไว้ชั่วคราวตั้งแต่วันที่ 7–8 สิงหาคม 2569 เพื่อรอการตรวจสอบเต็มรูปแบบ จุดที่ทำให้เหตุการณ์นี้ต่างจากการโจมตีซัพพลายเชนที่คุ้นเคยกันคือไม่มีไฟล์ซอร์สโค้ดในคลังของ WordPress.org ถูกแก้ไขแม้แต่ไฟล์เดียว ผู้โจมตีเลือกไปยึดสตรีมข้อมูล JSON แบบ static ที่คอมโพเนนต์แบนเนอร์โปรโมชันในหน้าแอดมินดึงมาแสดงแทน ทำให้การโจมตีทั้งหมดเกิดขึ้นฝั่งเซิร์ฟเวอร์ของผู้พัฒนาโดยที่เจ้าของเว็บไม่ต้องอัปเดตปลั๊กอินหรือมีไฟล์ใดเปลี่ยนบนดิสก์เลย

เส้นทางการโจมตีอาศัยช่องโหว่ cross-site scripting ในไลบรารีชื่อ Biggopti ที่แถมมากับปลั๊กอินทุกตัวของ BdThemes โดยโค้ดส่วนที่แปลงผลลัพธ์ JSON จาก Sigmative API หลบเลี่ยงอักขระพิเศษฝั่งไคลเอนต์ไม่รัดกุมผ่านพารามิเตอร์ display_id เมื่อผู้โจมตีได้สิทธิ์เขียนลงบัคเก็ต DigitalOcean Spaces ที่เก็บไฟล์ JSON เหล่านั้น จึงแทนที่ข้อมูลของจริงด้วยเพย์โหลดที่ประดิษฐ์ขึ้น สคริปต์จะทำงานเงียบ ๆ ในเบราว์เซอร์ของผู้ดูแลระบบที่ล็อกอินอยู่ทุกครั้งที่โหลดหน้า wp-admin แล้วสร้างบัญชีผู้ดูแลระบบปลอม อัปโหลดปลั๊กอินที่เป็นเว็บเชลล์ และติดต่อกลับเซิร์ฟเวอร์สั่งการ ตัวช่องโหว่เองได้คะแนน CVSS 5.4 ระดับปานกลาง แต่ผลลัพธ์ปลายทางคือการยึดสิทธิ์ผู้ดูแลระบบและรันโค้ดบนเว็บไซต์ได้เต็มรูปแบบ

รายละเอียดข่าว

เว็บไซต์ The Hacker News รายงานเมื่อวันที่ 11 สิงหาคม 2569 ว่านักวิจัยด้านความมั่นคงปลอดภัยไซเบอร์ได้ออกคำเตือนถึงการโจมตีซัพพลายเชนที่กระทบผู้พัฒนาปลั๊กอิน WordPress อย่าง BdThemes โดยอ้างรายงานของนาย Paolo Tresso นักวิจัยจากบริษัท Wordfence ที่ระบุว่า “ต่างจากการโจมตีซัพพลายเชนซอฟต์แวร์แบบดั้งเดิม ไม่มีไฟล์ซอร์สโค้ดแม้แต่ไฟล์เดียวที่ถูกแก้ไขในคลัง WordPress.org อย่างเป็นทางการ แต่ผู้โจมตีวางยาสตรีมข้อมูล JSON แบบ static ที่คอมโพเนนต์แบนเนอร์โปรโมชันฝั่งผู้ดูแลระบบดึงมาใช้”

ปลั๊กอินที่ได้รับผลกระทบมี 7 ตัว ได้แก่ Element Pack Addons for Elementor (ติดตั้งใช้งานกว่า 100,000 เว็บ), Live Copy Paste for Elementor (กว่า 6,000 เว็บ), Pixel Gallery Addons for Elementor, Prime Slider Addons for Elementor, Smart Admin Assistant, Ultimate Post Kit Addons for Elementor และ Ultimate Store Kit ซึ่งเป็นส่วนเสริมสำหรับ WooCommerce และ EDD (กว่า 6,000 เว็บ) ผู้ที่เข้าไปดูหน้ารายการปลั๊กอินเหล่านี้บนไดเรกทอรีของ WordPress จะพบข้อความว่าถูกปิดตั้งแต่วันที่ 7 หรือ 8 สิงหาคม 2569 และยังดาวน์โหลดไม่ได้จนกว่าการตรวจสอบจะเสร็จสิ้น

ต้นตอของปัญหาอยู่ที่คอมโพเนนต์ภายในชื่อ Biggopti ที่แถมมากับปลั๊กอินทุกตัว ระบบนี้ถูกออกแบบให้ดึงแบนเนอร์โปรโมชันจากเซิร์ฟเวอร์ API ของผู้พัฒนามาแสดงบนแดชบอร์ดผู้ดูแลระบบ โดยไปดึงไฟล์ JSON จากบัคเก็ต DigitalOcean Spaces การเปลี่ยนแปลงที่เป็นอันตรายถูกใส่เข้ามาครั้งแรกเมื่อวันที่ 1 มีนาคม 2569 ในปลั๊กอิน bdthemes-prime-slider-lite ก่อนจะขยายไปยังตัวอื่น ๆ ซึ่งหมายความว่าเว็บไซต์จำนวนมากอาจตกอยู่ในความเสี่ยงมานานหลายเดือนก่อนจะถูกตรวจพบ

Wordfence ยังประเมินว่าเซิร์ฟเวอร์สั่งการที่ใช้ในแคมเปญนี้เชื่อมโยงกับการโจมตีซัพพลายเชนอีก 2 ครั้งในช่วงหลายเดือนที่ผ่านมา คือกรณีปลั๊กอิน Advanced Responsive Video Embedder (CVE-2026-18072) และกรณี OptinMonster ซึ่งทั้งสองครั้งปลั๊กอินถูกฝังแบ็กดอร์เพื่อเปิดสิทธิ์ผู้ดูแลระบบเต็มรูปแบบให้ผู้โจมตีที่ไม่ต้องยืนยันตัวตน ผ่านโทเค็นที่ฝังไว้ตายตัวหรือบัญชีผู้ดูแลระบบที่ซ่อนไว้พร้อมปลั๊กอินลับที่จะถูกสร้างขึ้นเมื่อผู้ดูแลระบบล็อกอินเท่านั้น บ่งชี้ว่าเป้าหมายปลายทางของแคมเปญคือการฝังตัวในฐานะผู้ดูแลระบบอย่างลับ ๆ และรันโค้ดจากระยะไกลบนระบบ WordPress จำนวนมาก

Wordfence สรุปว่า “ข้อเท็จจริงที่ว่าเรกคอร์ด JSON ที่เป็นอันตรายและเพย์โหลดขั้นที่สอง x.js ถูกอัปโหลดเข้าไปในบัคเก็ตของผู้พัฒนาเองโดยตรง บ่งชี้ถึงการถูกเจาะระบบต้นน้ำอย่างร้ายแรง ไม่ว่าจะเป็นข้อมูลรับรองของคลาวด์สตอเรจหรือโครงสร้างพื้นฐานภายในของ BdThemes” เหตุการณ์นี้เกิดขึ้นเพียงไม่กี่วันหลัง WordPress แก้ช่องโหว่ reflected XSS ที่โจมตีได้ก่อนยืนยันตัวตน (CVE-2026-64638 หรือ XSS2Shell คะแนน CVSS 8.9) ซึ่งเปิดทางให้รันโค้ด PHP บนเซิร์ฟเวอร์ได้เมื่อผู้ดูแลระบบที่ล็อกอินอยู่เข้าไปยุ่งกับหน้าเว็บที่ผู้โจมตีควบคุม

วิธีการโจมตี

เพย์โหลดหลักถูกส่งผ่าน API endpoint ชื่อ api-data-all-records ในรูปไฟล์ JavaScript ชื่อ w2.js เมื่อทำงานในเบราว์เซอร์ของผู้ดูแลระบบ สคริปต์จะติดต่อเซิร์ฟเวอร์สั่งการที่ ia-cdn[.]com/fz/c พร้อมส่งชื่อโดเมนของเว็บเหยื่อไปด้วยเพื่อขอคำสั่งว่าจะโจมตีต่อหรือไม่ หากเซิร์ฟเวอร์ตอบกลับด้วยสถานะ skip หรือ done การทำงานจะยุติทันที ซึ่งเป็นกลไกคัดเป้าหมายที่ช่วยให้ผู้โจมตีเลี่ยงการโจมตีซ้ำและหลบการวิเคราะห์ในสภาพแวดล้อมทดสอบ จากนั้นสคริปต์จะสร้างบัญชีผู้ดูแลระบบปลอมผ่าน WordPress REST API ดาวน์โหลดไฟล์ ZIP ปลั๊กอินปลอมจากเซิร์ฟเวอร์สั่งการ แล้วติดตั้งผ่านฟอร์มอัปโหลดปลั๊กอินตามปกติ ผลลัพธ์คือเว็บเชลล์ PHP ชื่อ emer-run.php ถูกวางลงบนเซิร์ฟเวอร์

เมื่อได้เว็บเชลล์แล้ว ผู้โจมตีจะเรียกใช้เพื่อติดตั้งโมดูลฝังตัวอีก 2 ตัวลงในไดเรกทอรี mu-plugins ซึ่งเป็นปลั๊กอินที่ WordPress โหลดอัตโนมัติและปิดไม่ได้จากหน้าแอดมิน ตัวแรกเป็นแบ็กดอร์แบบ magic-login ที่เปิดให้เข้าสู่ระบบในฐานะผู้ดูแลระบบได้โดยไม่ต้องยืนยันตัวตนผ่านพารามิเตอร์บน URL รูปแบบ ?_wplogin=<token> โดยเล็งไปที่บัญชีผู้ดูแลระบบที่ลงทะเบียนไว้นานที่สุดของเว็บนั้น ส่วนตัวที่สองเป็นโมดูลต้านการวิเคราะห์ที่ไปแทรกการทำงานของคิวรีฐานข้อมูล WordPress เพื่อซ่อนบัญชีปลอมออกจากรายชื่อผู้ใช้ในหน้าแอดมิน และหักจำนวนบัญชีเหล่านั้นออกจากยอดผู้ใช้รวม ทำให้ผู้ดูแลระบบที่ตรวจด้วยตาเปล่ามองไม่เห็นความผิดปกติ

นอกจากนี้ยังพบเพย์โหลดสำรองชื่อ x.js ที่ถูกโฮสต์อยู่บนโครงสร้างพื้นฐานของผู้พัฒนาเอง และถูกส่งให้เหยื่อผ่าน endpoint api-data-records เพย์โหลดตัวนี้สร้างข้อมูลรับรองผู้ดูแลระบบแบบ deterministic ที่คำนวณทางคณิตศาสตร์จากชื่อโฮสต์ของเว็บเหยื่อ Wordfence อธิบายว่า “อัลกอริทึมนี้สร้างชื่อผู้ใช้ที่คาดเดาได้ (bd_ ตามด้วยแฮช base36 ยาว 6 ตัวอักษร) และรหัสผ่าน (Bd@26! ตามด้วยแฮชและตัว x) จับคู่กับอีเมลโดเมน @wordpress.org” ข้อดีของฝ่ายโจมตีคือไม่ต้องเก็บรายชื่อเว็บที่ยึดได้ไว้ที่ส่วนกลาง แต่ข้อดีของฝ่ายตั้งรับคือทีมตอบสนองเหตุการณ์สามารถคำนวณชื่อผู้ใช้และรหัสผ่านที่แน่นอนขึ้นมาเองเพื่อไล่ตรวจบนโดเมนที่สงสัยได้

ผลกระทบ

ความน่ากังวลของเหตุการณ์นี้อยู่ที่การตรวจจับ เพราะแนวทางตรวจสอบซัพพลายเชนที่ใช้กันทั่วไปคือการเทียบไฟล์ปลั๊กอินกับคลังต้นทางหรือรอสัญญาณจากการอัปเดตเวอร์ชัน แต่การโจมตีครั้งนี้ไม่แตะไฟล์บนดิสก์เลยแม้แต่ไฟล์เดียว เว็บที่ถูกยึดจึงผ่านการตรวจความสมบูรณ์ของไฟล์ได้ตามปกติ ขณะที่เพย์โหลดจริงถูกส่งผ่านการเรียก API ที่ดูเหมือนการดึงแบนเนอร์โปรโมชันธรรมดา ยิ่งเมื่อรวมกับโมดูลซ่อนบัญชีใน mu-plugins ผู้ดูแลระบบที่ไม่ได้ตรวจฐานข้อมูลโดยตรงหรือไม่มีระบบเฝ้าระวังการเปลี่ยนแปลงระดับ REST API แทบไม่มีทางสังเกตเห็น

ในแง่ขนาด ปลั๊กอินที่กระทบมียอดติดตั้งใช้งานรวมกันมากกว่าแสนเว็บไซต์ และเป็นกลุ่มส่วนเสริมของ Elementor กับ WooCommerce ที่นิยมในเว็บธุรกิจขนาดเล็กและร้านค้าออนไลน์ ซึ่งมักไม่มีทีมความมั่นคงปลอดภัยของตัวเอง การได้สิทธิ์ผู้ดูแลระบบบนเว็บเหล่านี้เปิดทางให้ผู้โจมตีฝัง skimmer ขโมยข้อมูลบัตรเครดิต เปลี่ยนเส้นทางผู้เข้าชม หรือใช้เว็บเป็นฐานกระจายมัลแวร์ต่อได้ทันที นอกจากนี้ช่วงเวลาที่โค้ดถูกฝังตั้งแต่ 1 มีนาคม 2569 ยังหมายความว่าหน้าต่างความเสี่ยงกินเวลานานกว่า 5 เดือน แม้ Wordfence จะยังไม่ระบุจำนวนเว็บที่ถูกยึดจริง

คำแนะนำ

ผู้ดูแลเว็บไซต์ที่ติดตั้งปลั๊กอินของ BdThemes ตัวใดตัวหนึ่งใน 7 รายการข้างต้น ควรถือว่าเว็บมีความเสี่ยงที่จะถูกยึดแล้วจนกว่าจะพิสูจน์ได้เป็นอย่างอื่น สิ่งที่ต้องทำเร่งด่วนคือปิดใช้งานปลั๊กอินเหล่านั้นไว้ก่อน แล้วตรวจรายชื่อผู้ใช้ในฐานข้อมูลโดยตรงด้วยคิวรี SQL ที่ตาราง wp_users แทนการดูจากหน้าแอดมิน เพราะโมดูลต้านการวิเคราะห์จะซ่อนบัญชีปลอมจากหน้าจอ ให้มองหาบัญชีที่ขึ้นต้นด้วย bd_ ตามด้วยอักขระ 6 ตัว หรือบัญชีที่ใช้อีเมลโดเมน @wordpress.org

ถัดมาให้ตรวจไดเรกทอรี wp-content/mu-plugins หาไฟล์แปลกปลอม ตรวจหาไฟล์ emer-run.php ทั่วทั้งเว็บรูท และตรวจล็อกการเชื่อมต่อขาออกไปยังโดเมน ia-cdn[.]com หากพบร่องรอยใด ๆ ควรกู้คืนเว็บจากแบ็กอัปที่ทำก่อนวันที่ 1 มีนาคม 2569 รีเซ็ตรหัสผ่านผู้ดูแลระบบทุกบัญชี เพิกถอน application password และคีย์ REST API ทั้งหมด รวมถึงหมุนข้อมูลรับรองของโฮสติ้งและฐานข้อมูล องค์กรที่ดูแลเว็บหลายแห่งควรใช้สูตรคำนวณชื่อผู้ใช้แบบ deterministic ที่ Wordfence เปิดเผยไปไล่ตรวจทุกโดเมนในความดูแลพร้อมกัน และควรบล็อกการเรียก API ขาออกจากหน้าแอดมินไปยังปลายทางที่ไม่จำเป็นเป็นมาตรการระยะยาว

Indicators of Compromise (IoCs)

หมายเหตุ: ตัวบ่งชี้ถูก defang แล้ว (ใส่วงเล็บคร่อมจุด) เพื่อป้องกันการคลิกโดยไม่ตั้งใจ

ตัวบ่งชี้ประเภทคำอธิบาย
ia-cdn[.]com/fz/cโดเมน/URLเซิร์ฟเวอร์สั่งการที่รับข้อมูลเว็บเหยื่อและส่งคำสั่งเป้าหมาย
w2.jsไฟล์เพย์โหลดหลักที่ส่งผ่าน endpoint api-data-all-records
x.jsไฟล์เพย์โหลดสำรองที่สร้างข้อมูลรับรองแบบ deterministic
emer-run.phpไฟล์เว็บเชลล์ PHP ที่ติดตั้งผ่านปลั๊กอินปลอม
bd_<แฮช base36 6 ตัว>ชื่อผู้ใช้รูปแบบบัญชีผู้ดูแลระบบปลอมที่ถูกสร้างขึ้น
Bd@26!<แฮช>xรหัสผ่านรูปแบบรหัสผ่านที่คำนวณจากชื่อโฮสต์ของเว็บเหยื่อ
?_wplogin=<token>พารามิเตอร์ URLแบ็กดอร์ magic-login ใน mu-plugins

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