WordPress AMP Plugin ถูกเอ็กซ์พลอยต์
บทความนี้จะอภิปรายช่องโหว่ Code Injection ในเวอร์ชันเก่า (Version 0.9.97.20 และต่ำกว่า) ของ WordPress AMP Plugin เราจะอธิบายว่า AMP คืออะไร และว่า WordPress AMP plugin มีช่องโหว่ที่เอ็กซ์พลอยต์ได้อย่างไร
Accelerated Mobile Pages (AMPs) – บทนำสั้นๆ
AMPs เป็นเทคโนโลยีเว็บไซต์โปรเจกต์ของ Google ที่ตั้งใจเพิ่มประสิทธิภาพเว็บไซต์อย่างมากสำหรับผู้ใช้มือถือ ตามเว็บไซต์โปรเจกต์ AMP เป็นไลบรารี Open-source ที่ให้วิธีง่ายกว่าในการสร้างเว็บเพจที่โหลดใกล้เคียงกับทันทีสำหรับผู้ใช้ หน้า AMP ทำงานเหมือนเว็บเพจที่คุณสามารถลิงก์ไป และถูกควบคุมโดยคุณ
หน้า AMP ประกอบด้วย 3 องค์ประกอบ:
- AMP HTML: HTML สำหรับหน้า AMP แตกต่างออกไปเล็กน้อย มีข้อจำกัดบางอย่าง เพื่อให้ไม่ต้องโหลดฟีเจอร์ทั้งหมดเมื่อเปิดไซต์
- AMP JS: องค์ประกอบหลักนี้รับผิดชอบโหลดทรัพยากรทั้งหมดเมื่อเปิดไซต์ โดยทำให้เนื้อหา Inbound ทั้งหมด Asynchronous (ไม่บล็อกกัน) เพื่อไม่ให้เนื้อหาในหน้าบล็อกการเรนเดอร์เนื้อหาภายนอก
- AMP Cache: องค์ประกอบนี้เป็น Content Delivery Network (CDN) แบบ Proxy-based สำหรับส่งมอบเอกสาร AMP ที่ถูกต้องทั้งหมด เอกสารทั้งหมด, ไฟล์ JS และรูปภาพ โหลดจาก Origin เดียวกัน ที่ใช้ HTTP 2.0 เพื่อประสิทธิภาพสูงสุด
ช่องโหว่ Code Injection ในปลั๊กอิน AMP for WP
ปลั๊กอินที่กล่าวถึงคือ “AMP for WP – Accelerated Mobile Pages” ปลั๊กอินนี้ช่วยเรนเดอร์หน้าของเราเป็นรูปแบบ Accelerated Mobile Pages สำหรับเวลาโหลดเร็วบนแพลตฟอร์มมือถือ ช่องโหว่พื้นฐานในเวอร์ชันเก่าของปลั๊กอิน (Version 0.9.97.20 และต่ำกว่า) คือ Broken Authentication and Session Management (การยืนยันตัวตนและการจัดการเซสชันที่เสียหาย)
พบว่าสิ่งเหล่านี้เกิดขึ้น เนื่องจากมีการเอ็กซ์พลอยต์ต่างๆ เช่น File injections, การดาวน์โหลดไฟล์ Backdoor (รวมถึง wp-config.php), ช่องโหว่ DDoS, การอัปเกรดฐานข้อมูล, การเขียนทับ Options และ Post-metadata, การใช้ Bandwidth ผิดวัตถุประสงค์ (ดาวน์โหลด WP media-library ทั้งหมด), และการฉีด WordPress Post ที่ไม่ได้กรอง (Unfiltered WordPress post injections) ซึ่งใช้ประโยชน์จากช่องโหว่นี้ ช่องโหว่ Code Injection ฉีดโค้ดอันตรายเข้าเว็บไซต์ผ่านวิธีต่างๆ เช่น Cookies และ Browser-side scripts นี่ช่วยให้พวกเขาขโมยข้อมูลละเอียดอ่อน หรือทำให้เกิด Data breach
ทำไมจึงเกิดขึ้น?
สิ่งนี้เกิดขึ้นเพราะทรัพยากรการจัดการเซสชันของเราไม่ได้รับการป้องกันอย่างเหมาะสม สิ่งนี้เกิดขึ้นหาก:
- ข้อมูลรับรองการยืนยันตัวตนของผู้ใช้ ไม่ได้รับการป้องกันเมื่อจัดเก็บด้วย Hashing หรือ Encryption
- Credentials สามารถเดาได้ หรือเขียนทับได้ ผ่านฟังก์ชันจัดการบัญชีที่อ่อนแอ (เช่น การสร้างบัญชี, เปลี่ยน/กู้คืนรหัสผ่าน และ Session IDs ที่อ่อนแอ)
- Session IDs ถูกเปิดเผยใน URL (เช่น URL rewriting)
- Session Items เปราะบางต่อ Session Fixation attacks
- Session IDs หรือ User sessions หรือ Authentication tokens โดยเฉพาะ Single Sign-On (SSO) tokens ไม่ได้ถูกทำให้ Invalid อย่างเหมาะสมระหว่าง Logout
- Session IDs ไม่ได้หมุนเวียน (Rotate) หลัง Login สำเร็จ
- รหัสผ่าน, Session IDs และ Credentials อื่นๆ ถูกส่งผ่านการเชื่อมต่อที่ไม่ได้เข้ารหัส
ช่องโหว่นี้ถูกจัดประเภทเป็น CWE-287 ใน Common Weakness Enumeration List
ผลลัพธ์ที่เป็นไปได้ของช่องโหว่นี้ รวมถึง การเปิดเผยทรัพยากรหรือฟังก์ชันที่ละเอียดอ่อน ให้ผู้ใช้ที่ไม่ได้ตั้งใจ ดังนั้น โจมตีจึงได้เข้าถึงข้อมูลละเอียดอ่อน และแม้แต่รันโค้ด Arbitrary บนเว็บไซต์ของเราได้ นอกจากนี้ ช่องโหว่ปลั๊กอินนี้เป็นปัญหาสำคัญสำหรับเว็บไซต์ที่อนุญาตให้ผู้ใช้ลงทะเบียน
กลยุทธ์การบรรเทาลดทอน (Mitigation Strategy)
กลยุทธ์การบรรเทาลดทอนที่เรียบง่ายที่สุด เพื่อปลอดภัยจากช่องโหว่คือ :
- อัปเดตเป็น WordPress AMP Plugin ล่าสุด (ที่ปล่อยหลัง Version 0.9.97.20)
- ปิดใช้งานปลั๊กอินปัจจุบัน จนกว่าช่องโหว่จะได้รับการแก้ไข
สุดท้าย หากคุณต้องการให้เราดูช่องโหว่สำหรับไซต์ที่เปิดใช้งาน AMP ของคุณ โปรดแจ้งเราโดยไปที่เว็บไซต์ของเรา
หมายเหตุ: ปลั๊กอินที่ได้รับผลกระทบ ถูกลบชั่วคราวจากไลบรารีปลั๊กอิน WordPress เนื่องจากโค้ดที่เปราะบาง แต่ไม่ใช่ผู้พัฒนาหรือทีม WordPress ที่เปิดเผยปัญหาที่แน่นอนในปลั๊กอิน