ช่องโหว่ร้ายแรงใน vm2 ของ Node.js เปิดทางให้หลุดออกจาก Sandbox และรันโค้ดตามอำเภอใจได้
มีการเปิดเผยช่องโหว่ Sandbox Escape ระดับร้ายแรง ในไลบรารี vm2 ของ Node.js ซึ่งเป็นที่นิยมอย่างแพร่หลาย โดยหากถูกโจมตีสำเร็จ ผู้ไม่หวังดีจะสามารถรันโค้ดตามอำเภอใจบนระบบปฏิบัติการของเครื่องโฮสต์ได้
ช่องโหว่นี้ถูกติดตามด้วยรหัส CVE-2026-22709 และได้รับคะแนนความรุนแรง CVSS 9.8 จาก 10.0 ซึ่งจัดอยู่ในระดับวิกฤต (Critical)
Patrik Simek ผู้ดูแลโครงการ vm2 ระบุว่า
“ใน vm2 เวอร์ชัน 3.10.0 กลไกการทำความสะอาด (sanitization) ของ callback ใน Promise.prototype.then และ Promise.prototype.catch สามารถถูกหลีกเลี่ยงได้ ซึ่งทำให้ผู้โจมตีสามารถหลุดออกจาก sandbox และรันโค้ดตามอำเภอใจได้”
vm2 เป็นไลบรารีของ Node.js ที่ถูกออกแบบมาเพื่อรันโค้ดที่ไม่น่าเชื่อถือภายในสภาพแวดล้อมแบบ sandbox โดยใช้วิธีดักจับและทำ proxy ให้กับอ็อบเจกต์ของ JavaScript เพื่อป้องกันไม่ให้โค้ดภายใน sandbox เข้าถึงสภาพแวดล้อมของระบบโฮสต์โดยตรง
ช่องโหว่ที่ถูกค้นพบใหม่นี้มีสาเหตุมาจากการทำ sanitization ของ Promise handlers ที่ไม่ถูกต้อง ภายในไลบรารี ซึ่งก่อให้เกิดช่องทางในการหลุดออกจาก sandbox และนำไปสู่การรันโค้ดตามอำเภอใจนอกขอบเขตของ sandbox ได้
นักวิจัยจาก Endor Labs ได้แก่ Peyton Kennedy และ Cris Staicu อธิบายว่า
“ประเด็นสำคัญคือฟังก์ชันแบบ async ใน JavaScript จะคืนค่าเป็นอ็อบเจกต์ globalPromise ไม่ใช่ localPromise และเนื่องจาก globalPromise.prototype.then และ globalPromise.prototype.catch ไม่ได้ถูกทำ sanitization อย่างเหมาะสม (ต่างจาก localPromise) จึงทำให้สามารถหลีกเลี่ยงกลไกป้องกันได้”
แม้ว่า CVE-2026-22709 จะได้รับการแก้ไขแล้วใน vm2 เวอร์ชัน 3.10.2 แต่ช่องโหว่นี้ถือเป็นอีกหนึ่งกรณีล่าสุดในชุดของปัญหา sandbox escape ที่เกิดขึ้นกับไลบรารี vm2 อย่างต่อเนื่องในช่วงหลายปีที่ผ่านมา ซึ่งรวมถึง
CVE-2022-36067, CVE-2023-29017, CVE-2023-29199, CVE-2023-30547, CVE-2023-32314, CVE-2023-37466 และ CVE-2023-37903
การค้นพบ CVE-2023-37903 เมื่อเดือนกรกฎาคม 2023 เคยทำให้ Patrik Simek ผู้ดูแลโครงการ ประกาศยุติการพัฒนา vm2 อย่างเป็นทางการ อย่างไรก็ตาม การอ้างอิงดังกล่าวได้ถูกลบออกจากไฟล์ README เวอร์ชันล่าสุดบน GitHub หลังจากโครงการถูกนำกลับมาพัฒนาต่ออีกครั้งในช่วงปลายปีที่ผ่านมา นอกจากนี้ หน้า Security ยังได้รับการอัปเดตเมื่อเดือนตุลาคม 2025 เพื่อระบุว่า vm2 ในสาย เวอร์ชัน 3.x ยังคงได้รับการดูแลและอัปเดตอย่างต่อเนื่อง
อย่างไรก็ดี ผู้ดูแล vm2 ยอมรับว่ามีความเป็นไปได้ที่จะพบวิธีหลบเลี่ยงใหม่ ๆ ในอนาคต และแนะนำให้ผู้ใช้งานอัปเดตไลบรารีให้เป็นเวอร์ชันล่าสุดอยู่เสมอ รวมถึงพิจารณาทางเลือกที่มีการแยกสภาพแวดล้อมได้แข็งแกร่งกว่า เช่น isolated-vm
Semgrep ระบุว่า
“แทนที่จะพึ่งพาโมเดล vm ที่มีปัญหา isolated-vm ซึ่งเป็นผู้สืบทอดของ vm2 ใช้ native Isolate interface ของ V8 ซึ่งให้พื้นฐานด้านความปลอดภัยที่แข็งแรงกว่า อย่างไรก็ตาม แม้ในกรณีนี้ ผู้ดูแล vm2 ก็ยังเน้นย้ำถึงความสำคัญของการแยกระบบ (isolation) และแนะนำให้ใช้ Docker ร่วมกับการแยกส่วนประกอบเชิงตรรกะ เพื่อเพิ่มความปลอดภัย”
ด้วยความรุนแรงของช่องโหว่นี้ ผู้ใช้งานจึงถูกแนะนำให้ อัปเดตเป็นเวอร์ชันล่าสุด (3.10.3) ซึ่งมีการแก้ไขช่องโหว่ sandbox escape เพิ่มเติม