
ช่องโหว่ระดับ Critical ในไลบรารี Sandboxing ยอดนิยมของ Node.js อย่าง vm2 อาจทำให้ผู้โจมตีสามารถ escape ออกจาก Sandbox และรันโค้ดใด ๆ ก็ได้บนระบบของเครื่อง Host
ช่องโหว่ด้านความปลอดภัยนี้มีหมายเลข CVE-2026-26956 และได้รับการยืนยันแล้วว่าส่งผลกระทบต่อ vm2 เวอร์ชัน 3.10.4 (รวมถึงเวอร์ชันก่อนหน้าที่อาจมีช่องโหว่ด้วยเช่นกัน) นอกจากนี้ยังมีการเผยแพร่โค้ด Proof-of-concept (PoC) ออกมาแล้ว
ในรายงานแจ้งเตือนด้านความปลอดภัย ผู้ดูแลโปรเจกต์ระบุว่า ช่องโหว่นี้จะส่งผลกระทบเฉพาะกับสภาพแวดล้อมที่ใช้ Node.js 25 (ยืนยันผลบน Node.js 25.6.1) ที่มีการเปิดใช้งาน WebAssembly exception handling และรองรับ JSTag เท่านั้น
vm2 เป็นไลบรารี Node.js แบบ Open-source ที่ใช้สำหรับรันโค้ด JavaScript ที่ไม่น่าเชื่อถือ ภายในสภาพแวดล้อม Sandbox ที่ถูกจำกัดสิทธิ์ โดยทั่วไปมักถูกนำไปใช้ในแพลตฟอร์มสำหรับเขียนโค้ดออนไลน์ เครื่องมืออัตโนมัติต่าง ๆ และแอปพลิเคชัน SaaS ที่ต้องมีการรันสคริปต์จากฝั่งผู้ใช้งาน
ไลบรารีตัวนี้จะพยายาม Isolate โค้ดที่รันอยู่ใน Sandbox ออกจากระบบของเครื่อง Host และบล็อกการเข้าถึง Node.js API ที่มีความสำคัญ เช่น Process และ Filesystem
vm2 มีการใช้งานอย่างแพร่หลาย โดยมียอดดาวน์โหลดมากกว่า 1.3 ล้านครั้งต่อสัปดาห์บน npm (Node Package Manager) ซึ่งเป็นโปรแกรมจัดการแพ็กเกจผ่าน Command-line ที่เป็นค่า Default ของ Node.js
ช่องโหว่ CVE-2026-26956 มีสาเหตุมาจากข้อผิดพลาดของไลบรารีในการจัดการกับ Exception ที่ข้ามไปมาระหว่างสภาพแวดล้อม Sandbox และเครื่อง Host
รายงานแจ้งเตือนระบุว่า โดยปกติแล้ว vm2 จะอาศัยระบบป้องกันในระดับ JavaScript เพื่อป้องกันข้อผิดพลาดที่เกิดจากฝั่ง Host และใช้ bridge Proxies เพื่อ Wrap objects ที่ถูกเรียกใช้งาน Cross-context ซึ่งกลไกทั้งสองส่วนนี้ทำงานอยู่ภายใน JavaScript ทั้งหมด
อย่างไรก็ตาม กลไกการจัดการ Exception ของ WebAssembly สามารถดักจับข้อผิดพลาดของ JavaScript ได้ในระดับที่ลึกกว่าภายใน V8 engine ของ Google ส่งผลให้สามารถ Bypass ระบบป้องกันความปลอดภัยระดับ JavaScript ของ vm2 ไปได้
ด้วยการทำให้เกิด TypeError ที่ถูกสร้างขึ้นมาเป็นพิเศษผ่านการแปลงค่า Symbol ให้เป็น String ผู้โจมตีจะสามารถทำให้ Error object จากฝั่ง Host รั่วไหลกลับเข้าไปใน Sandbox ได้โดยไม่ผ่านการตรวจสอบ และคัดกรองจาก vm2
เนื่องจาก Object ที่รั่วไหลออกมานั้นมีต้นทางมาจากเครื่อง Host ผู้โจมตีจึงสามารถใช้ประโยชน์จาก Constructor chain ของ Object นั้นเพื่อกลับเข้าไปเข้าถึงระบบภายในของ Node.js เช่น Process object ได้ ซึ่งในท้ายที่สุดจะอาจทำให้สามารถรันคำสั่งใด ๆ ก็ได้ตามต้องการบนระบบของเครื่อง Host
รายงานแจ้งเตือนด้านความปลอดภัยของผู้ดูแลโปรเจกต์ยังได้แนบโค้ด PoC ที่แสดงให้เห็นถึงการรันโค้ดจากระยะไกลบนเครื่อง Host ไว้ด้วย
ผู้ใช้งาน vm2 ได้รับคำแนะนำให้อัปเกรดเป็นเวอร์ชัน 3.10.5 หรือใหม่กว่า (เวอร์ชันล่าสุดคือ 3.11.2) โดยเร็วที่สุด เพื่อลดความเสี่ยงจากการถูกโจมตีผ่านช่องโหว่ CVE-2026-26956
ในช่วงต้นปีที่ผ่านมา vm2 ก็ได้รับผลกระทบจากช่องโหว่ประเภท Sandbox escape ระดับ Critical อีกรายการหนึ่ง ซึ่งอาจนำไปสู่การรันโค้ดใด ๆ ก็ได้บนระบบของเครื่อง Host โดยช่องโหว่ดังกล่าวมีหมายเลข CVE-2026-22709
ช่องโหว่ประเภท Sandbox escape ก่อนหน้านี้ที่เคยส่งผลกระทบต่อไลบรารีเดียวกันนี้ ได้แก่ CVE-2023-30547, CVE-2023-29017 และ CVE-2022-36067 ซึ่งแสดงให้เห็นถึงความท้าทายในการ Isolate โค้ดที่ไม่น่าเชื่อถือให้มีความปลอดภัยอย่างแท้จริงในสภาพแวดล้อม Sandbox ของ JavaScript
ที่มา : Bleepingcomputer

You must be logged in to post a comment.