ถอดรหัส XSS: เมื่อการป้องกันไม่สมบูรณ์และบริบทคือกุญแจ

ถอดรหัส XSS: เมื่อการป้องกันไม่สมบูรณ์และบริบทคือกุญแจ

ในโลกดิจิทัลที่เชื่อมโยงกัน ช่องโหว่ด้านความปลอดภัยยังคงเป็นภัยคุกคามสำคัญ หนึ่งในนั้นคือ XSS หรือ Cross-Site Scripting ซึ่งช่วยให้ผู้โจมตีสามารถฉีดโค้ดอันตรายเข้าไปในหน้าเว็บที่ผู้อื่นเข้าชม ทำให้โค้ดนั้นทำงานบนเบราว์เซอร์ของผู้ใช้ได้

XSS คืออะไร? ภัยร้ายที่ต้องระวัง

ที่เราจะพูดถึงคือ Reflected XSS ซึ่งเกิดขึ้นเมื่อแอปพลิเคชันนำข้อมูลผู้ใช้ไปแสดงผลบนหน้าเว็บทันที โดยไม่มีการกรองที่เพียงพอ ผู้โจมตีสามารถขโมย Session Cookie เพื่อยึดครองบัญชี หลอกเปลี่ยนเส้นทาง หรือดักจับข้อมูลการพิมพ์ เพียงผู้ใช้หลงเชื่อและคลิกลิงก์ที่สร้างขึ้นอย่างประสงค์ร้าย

การค้นพบช่องโหว่ที่ไม่ธรรมดา

การค้นหาช่องโหว่มักเริ่มจากการสำรวจระบบที่รับอินพุต การตรวจสอบช่อง “ชื่อ” ในระบบ ERP เป็นจุดที่มุ่งเป้า ได้มีการลองใส่ Payload พื้นฐานอย่าง <script>alert(document.domain)</script> แต่ระบบกรองอักขระพิเศษ โดยเปลี่ยนเป็น HTML Entities ทำให้โค้ดไม่ทำงานโดยตรง การโจมตีแบบ HTML Injection จึงไม่สำเร็จ

บริบท JavaScript: กุญแจสู่การโจมตี

แม้การป้องกัน HTML Injection จะมี แต่เมื่อตรวจสอบ Source Code พบว่า ข้อมูลที่กรอกถูกนำไปใส่ในตัวแปร JavaScript ของแอปพลิเคชันแทน นี่คือจุดสำคัญ เพราะในบริบท JavaScript การกรองแบบ HTML Entities ไม่ได้ช่วยป้องกันเลย ผู้โจมตีจึงต้องปรับ Payload ให้เหมาะสม

Payload ที่ใช้สำเร็จคือ ';alert(document.domain);// โดย:

  • Single Quote (') ปิด String ที่แอปพลิเคชันสร้าง
  • alert(document.domain) คือคำสั่ง JavaScript ที่จะถูกรัน
  • // คอมเมนต์ส่วนที่เหลือของบรรทัด JavaScript เดิม ป้องกันข้อผิดพลาด

ด้วยวิธีนี้ คำสั่ง JavaScript อันตรายจึงทำงานได้บนเบราว์เซอร์ของผู้ใช้ที่เข้าชมลิงก์ที่มี Payload นี้

บทเรียนเพื่อความปลอดภัยที่สมบูรณ์

ช่องโหว่ Reflected XSS นี้มีความเสี่ยงสูง ผู้โจมตีสามารถสร้างลิงก์ที่มี Payload และเมื่อผู้ใช้ที่เข้าสู่ระบบแล้วคลิก สคริปต์อันตรายจะทำงานภายใต้สิทธิ์ของผู้ใช้ทันที นำไปสู่ความเสียหายร้ายแรง การค้นพบนี้ถูกแจ้งไปยังผู้พัฒนา ได้รับการแก้ไข และกำหนดรหัส CVE-2026-37750

เรื่องราวนี้เน้นย้ำความสำคัญของการตรวจสอบช่องโหว่ให้ละเอียดถี่ถ้วน ไม่ยึดติดกับวิธีการโจมตีแบบเดิมๆ การทำความเข้าใจ “บริบท” ที่ข้อมูลถูกใช้งานสำคัญมาก สำหรับนักพัฒนา ควรใช้ฟังก์ชันที่เหมาะสมในการเข้ารหัสหรือหลีกเลี่ยงอักขระพิเศษเสมอ ส่วนผู้ใช้งาน ควรระมัดระวังในการคลิกลิงก์ที่ไม่รู้จัก เพื่อป้องกันตนเอง