
WordPress ได้แก้ไขช่องโหว่ Reflected Cross-Site Scripting (XSS) แบบ Pre-authentication ในหน้าเข้าสู่ระบบ ซึ่งส่งผลกระทบต่อระบบในทุกเวอร์ชัน โดยทีมงาน pwn.ai ได้สาธิตให้เห็นวิธีการที่ช่องโหว่นี้สามารถเชื่อมโยงเข้ากับการเรียกใช้โค้ด PHP บนเซิร์ฟเวอร์ได้ เมื่อผู้ดูแลระบบที่ล็อกอินอยู่โต้ตอบกับหน้าเว็บที่ผู้โจมตีควบคุมอยู่
ช่องโหว่ดังกล่าวมีหมายเลข ** CVE-2026-64638 (CVSS 8.9) ซึ่งเป็นช่องโหว่ความรุนแรงระดับสูงที่ผู้โจมตีไม่จำเป็นต้องมีสิทธิ์ใด ๆ โดย pwn.ai ผู้ค้นพบช่องโหว่ และเป็นผู้ให้ข้อมูลรายละเอียดทางเทคนิคให้กับ The Hacker News ระบุว่า ช่องโหว่ XSS บนหน้าเข้าสู่ระบบนี้ไม่จำเป็นต้องผ่านการยืนยันตัวตน และเมื่อ username ที่ถูกสร้างขึ้นมาเป็นพิเศษถูกส่งไปยังหน้า error page ของการเข้าสู่ระบบที่ไม่สำเร็จ โค้ด JavaScript ที่ได้ก็จะทำงานบนเบราว์เซอร์ของผู้เข้าชมทันที โดยไม่ต้องมีการโต้ตอบใด ๆ เพิ่มเติมบนหน้าดังกล่าว
ส่วนเส้นทางที่นำไปสู่การรันโค้ดนั้น จำเป็นต้องมีเหยื่อที่เข้าสู่ระบบด้วยสิทธิ์ระดับผู้ดูแลระบบอยู่แล้ว และต้องมีการโต้ตอบกับหน้าเว็บที่ผู้โจมตีควบคุมอยู่อย่างชัดเจน ซึ่งในการสาธิตของ pwn.ai การโต้ตอบดังกล่าวเป็นเพียงการคลิกตามปกติเพียงครั้งเดียวเท่านั้น
นักวิจัยระบุกับ The Hacker News ว่า การโจมตีนี้ใช้ได้ผลกับ WordPress ที่ติดตั้งด้วยค่าเริ่มต้น และไม่จำเป็นต้องมีการตั้งค่า Hosting หรือการติดตั้งใช้งานที่ผิดไปจากปกติแต่อย่างใด นอกจากนี้ยังระบุว่า พวกเขามีเส้นทางจากช่องโหว่ XSS ไปสู่การรันโค้ดได้หลายเส้นทาง ซึ่งรวมถึงรูปแบบที่ใช้การติดตั้ง Plugin หรือการอัปโหลดไฟล์ ZIP ตามที่ต้องการ
ขณะที่ประกาศแจ้งเตือนของ WordPress เองระบุว่า โอกาสในการถูกนำไปใช้โจมตีนั้นมีข้อจำกัดมากกว่านั้น โดยระบุว่า การยกระดับไปสู่ RCE ต้องอาศัยเงื่อนไขที่อยู่นอกเหนือการควบคุมของผู้โจมตี และจำเป็นต้องอาศัยเทคนิค Social Engineering ที่ประสบความสำเร็จ ร่วมกับการโต้ตอบจากเหยื่ออย่างชัดเจน
ช่องโหว่นี้ได้รับการแก้ไขไปเมื่อวันที่ 6 สิงหาคม ใน WordPress เวอร์ชัน 7.0.3 พร้อมทั้งมีการ Backport แพตช์ย้อนกลับไปจนถึงเวอร์ชัน 4.7 โดย WordPress แนะนำให้อัปเดตทันที และเว็บไซต์ที่รองรับการอัปเดตอัตโนมัติแบบเบื้องหลัง ควรจะได้รับแพตช์อัปเดตด้านความปลอดภัยนี้โดยอัตโนมัติ ส่วนเวอร์ชันที่เก่ากว่า 4.7 ยังคงได้รับผลกระทบ แต่อยู่นอกเหนือขอบเขตการ Backport ในปัจจุบันของโปรเจกต์
นักวิจัยซึ่งเรียกกระบวนการโจมตีนี้ว่า XSS2Shell โดยระบุว่า ระบบอัตโนมัติของบริษัทเป็นผู้ค้นพบ และทำซ้ำกระบวนการโจมตีผ่านช่องโหว่นี้ได้ หลังจากได้รับงานวิจัย Same Origin Method Execution (SOME) ของ Paulos Yibelo เมื่อปี 2022 ไปเป็นจุดตั้งต้น
บริษัทระบุว่า การดำเนินการดังกล่าวใช้เวลาเกือบสี่วัน ด้วยการใช้โมเดลแบบ Open-source ร่วมกับ Workflow แบบ Multi-agent โดยสามารถทำซ้ำกระบวนการโจมตีได้สำเร็จเมื่อวันที่ 26 กรกฎาคม และแจ้งไปยัง WordPress ในวันถัดมา
ต้นตอของช่องโหว่นี้อยู่ที่วิธีที่ WordPress จัดการกับชื่อผู้ใช้งานจากการเข้าสู่ระบบที่ไม่สำเร็จ โดยนักวิจัยระบุว่า ค่าดังกล่าวจะถูกส่งผ่าน `sanitize_user()` และ `wp_strip_all_tags()` ซึ่งทำงานโดยอาศัย `strip_tags()` ของ PHP ทั้งนี้สตริงที่มีลักษณะคล้ายแท็ก และมีช่องว่างอยู่หลังเครื่องหมาย `<` ที่เปิดไว้ สามารถรอดผ่าน Parser ดังกล่าวไปในรูปของข้อความธรรมดาได้ จากนั้น WordPress จะนำค่าเดิมไปส่งผ่าน `wp_kses_post()` ซึ่งใช้ Parser คนละตัว และตีความข้อมูลชุดเดียวกันนั้นว่าเป็น HTML ที่ได้รับอนุญาต ผลลัพธ์ที่ได้จึงเป็น DOM element ที่ทำงานได้จริงบนหน้าเข้าสู่ระบบที่ไม่สำเร็จ และอยู่ภายใต้การควบคุมของผู้โจมตี
จากนั้น element เหล่านั้นจะไปทำงานร่วมกับ `user-profile.js` ของ WordPress เอง ซึ่งเป็นสคริปต์สำหรับจัดการโปรไฟล์ผู้ใช้งานที่ถูกโหลดบนหน้าเข้าสู่ระบบด้วย เนื่องจากหน้าดังกล่าวทำหน้าที่รองรับการรีเซ็ตรหัสผ่าน
โดย element บางส่วนของหน้าโปรไฟล์ที่สคริปต์ดังกล่าวคาดว่าจะต้องมีนั้น กลับไม่มีอยู่บนหน้าเข้าสู่ระบบ ทำให้ Input ที่หายไปสองรายการมีค่าเป็น undefined ทั้งคู่ และส่งผลให้การตรวจสอบ equality ผ่านไปได้ ในขณะที่ตัวแปร `ajaxurl` ซึ่งตามปกติแล้วจะมีค่าเป็น undefined ก็สามารถถูกเขียนทับด้วย DOM element ที่ถูกแทรกเข้าไปได้ ซึ่งเป็นการชี้นำให้ JavaScript ของ WordPress เองส่ง REST Request แบบ Same-origin ไปยังปลายทางที่ผู้โจมตีเลือกไว้
นักวิจัยได้ใช้การรองรับ JSONP ของ REST บน WordPress ในการเปลี่ยน Request ดังกล่าวให้กลายเป็น JavaScript ที่ทำงานภายใต้ Origin ของเว็บไซต์นั้นเอง และสำหรับระบบที่ตอบกลับ REST Request แบบไม่ระบุตัวตนด้วยสถานะ HTTP 401 นั้น พารามิเตอร์ `_envelope=1` สามารถครอบการปฏิเสธดังกล่าวไว้ใน HTTP 200 response ได้ ซึ่งทำให้ jQuery ประมวลผลการตอบกลับนั้นในฐานะสคริปต์ต่อไป
นอกจากนี้ นักวิจัยยังพบจากการทดสอบว่า Content Security Policy (CSP) ที่ใช้ Nonce ร่วมกับ `strict-dynamic` ก็ไม่สามารถปิดกั้นเส้นทางการโจมตีที่สาธิตไว้นี้ได้
เส้นทางจากช่องโหว่ XSS ไปสู่การรันโค้ด PHP นั้น ต่อยอดมาจากเทคนิค SOME ของ Yibelo ก่อนหน้านี้ ซึ่งใช้ Property Chain ของ JSONP ที่ได้รับอนุญาต ในการเรียกใช้ Method บนหน้าต่างเบราว์เซอร์อีกอันหนึ่ง
เส้นทางหนึ่งที่ pwn.ai สาธิตให้เห็น คือการใช้ช่องโหว่ XSS ที่ทำงานภายใต้ Origin ของ WordPress ไปเรียกใช้ส่วนควบคุมการอนุมัติ Application Password ที่มีมากับตัวระบบ ภายใน Session ของผู้ดูแลระบบที่เข้าสู่ระบบอยู่ จากนั้น WordPress จะสร้างข้อมูลยืนยันตัวตนสำหรับการเข้าถึง API ขึ้นมา และส่งต่อไปยัง `success_url` แบบ HTTPS ที่ผู้โจมตีกำหนดไว้
Application Password เป็นข้อมูลยืนยันตัวตนที่สามารถเพิกถอนได้ และมีไว้สำหรับการเข้าถึง API ดังนั้นเส้นทางนี้จึงไม่จำเป็นต้องขโมยรหัสผ่านหลักของผู้ดูแลระบบ โดยนักวิจัยได้นำข้อมูลยืนยันตัวตนดังกล่าวไปใช้เข้าถึง REST แบบผ่านการยืนยันตัวตน เพื่อเผยแพร่หน้าเว็บบน WordPress ที่มี JavaScript แบบ Same-origin ฝังอยู่ และเมื่อ Session ของผู้ดูแลระบบที่ยังคงค้างอยู่ได้เปิดหน้าเว็บดังกล่าว สคริปต์ภายในก็จะดึงค่า Nonce สำหรับการอัปโหลด Plugin ของ WordPress ออกมา และอัปโหลดไฟล์ ZIP ที่ผู้โจมตีเตรียมไว้ขึ้นไป จากนั้นจึงสามารถเรียกใช้ PHP จาก Plugin ที่ถูกแตกไฟล์ออกมาแล้วได้โดยตรง โดยไม่จำเป็นต้องเปิดใช้งาน Plugin ดังกล่าวด้วยซ้ำ
ทั้งนี้ หลักฐานจากระบบใช้งานจริงที่ส่งให้กับ The Hacker News นั้น สิ้นสุดอยู่เพียงแค่ช่องโหว่ XSS เท่านั้น โดยนักวิจัยได้ทำซ้ำการโจมตีช่องโหว่ XSS บนหน้าเข้าสู่ระบบแบบที่ไม่ต้องใช้ Cookie แยกออกมาต่างหาก กับระบบที่ใช้งาน WordPress 7.0.2 จำนวนสองแห่ง บนโปรไฟล์ Chrome ที่สร้างขึ้นใหม่ ซึ่งไม่มีทั้ง Cookie และข้อมูลยืนยันตัวตนของ WordPress อยู่
โดยนักวิจัยไม่ได้ทดลองสร้าง Application Password, อัปโหลดไฟล์, สร้างช่องทางรักษาการเข้าถึงระบบ (Persistence) หรือรันโค้ด PHP บนระบบเหล่านั้นแต่อย่างใด ส่วนกระบวนการรันโค้ด PHP แบบครบทุกขั้นตอนนั้น ถูกสาธิตแยกต่างหากบนระบบ WordPress 7.0.2 ที่ติดตั้งใหม่บนเครื่องภายใน
นักวิจัยระบุว่า การทำ hardening ให้กับ WordPress ที่รู้จักกันโดยทั่วไปนั้น ไม่ควรถูกมองว่าเป็นแนวทางลดผลกระทบที่ครอบคลุมช่องโหว่ XSS ต้นทางได้ทั้งหมด และการติดตั้งแพตช์อัปเดตด้านความปลอดภัยยังคงเป็นสิ่งที่จำเป็น
การรันโค้ด PHP ได้สำเร็จจะส่งผลดังต่อไปนี้
- เปิดเผยข้อมูลยืนยันตัวตนของฐานข้อมูล WordPress ที่อยู่ในไฟล์ `wp-config.php`
- เปิดทางให้สร้างบัญชีผู้ดูแลระบบแบบถาวร และแก้ไขเนื้อหาบนเว็บไซต์ได้
- เปิดเผยไฟล์ และ Secrets ที่ PHP Worker สามารถอ่านได้
- เรียกใช้คำสั่งระดับระบบปฏิบัติการด้วยสิทธิ์ของ Worker ดังกล่าวได้
WordPress ได้ให้เครดิตแก่ทีมงานของ pwn.ai ในการค้นพบ และเปิดเผยข้อมูลช่องโหว่ ทั้งนี้ ณ วันที่ 7 สิงหาคม ประกาศแจ้งเตือนของโปรเจกต์ยังไม่มีรายงานว่าช่องโหว่นี้ถูกนำไปใช้ในการโจมตีจริง
ที่มา : Thehackernews

You must be logged in to post a comment.