มีการค้นพบช่องโหว่ Critical sandbox escape ในไลบรารี vm2 ของ Node.js ซึ่งเป็นไลบรารีที่ใช้กันอย่างแพร่หลายในการสร้างสภาพแวดล้อม Sandbox สำหรับรันโค้ดที่ไม่น่าเชื่อถือ ช่องโหว่นี้มีรหัส CVE-2026-22709 (GHSA-99p7-6v5w-7xg8) มีคะแนน CVSS v3.1 อยู่ที่ 10.0 ซึ่งแสดงถึงความรุนแรงสูงสุด และส่งผลกระทบต่อทุกเวอร์ชันจนถึง 3.10.0 ทำให้ผู้โจมตีสามารถหลุดพ้นจาก Sandbox และรันโค้ดบนระบบโฮสต์ได้โดยพลการ
Severity: วิกฤต
System Impact:
- ไลบรารี vm2 Sandbox สำหรับ Node.js
- ระบบโฮสต์พื้นฐาน
- ระบบที่ถูกบุกรุก
Technical Attack Steps:
- ช่องโหว่เกิดจากการ sanitization callback ที่ไม่สมบูรณ์ในการจัดการ Promise prototype
- โดยเฉพาะอย่างยิ่ง `globalPromise.prototype.then` ไม่ได้รับการ sanitization ในขณะที่ `localPromise.prototype.then` ได้รับ
- ฟังก์ชัน asynchronous จะคืนค่าเป็น `global Promise objects` แทนที่จะเป็น `local ones` ทำให้ผู้โจมตีสามารถเลี่ยงผ่านข้อจำกัดของ Sandbox ได้
- ผู้โจมตีสามารถใช้การจัดการ `error stack` เพื่อควบคุม `Promise.prototype.catch callbacks`
- ด้วยการสร้างอ็อบเจกต์ข้อผิดพลาดที่มีชื่อเชิงสัญลักษณ์และเรียกใช้ฟังก์ชัน async ผู้โจมตีจะเข้าถึง `Error constructor` และสามารถรันโค้ดได้ตามอำเภอใจผ่าน `Function constructor`
- ในการสาธิต Proof-of-Concept ผู้โจมตีสามารถรันคำสั่งระบบ เช่น `execSync()` ผ่านโมดูล `child_process` ได้สำเร็จ เป็นการหลบเลี่ยงการแยก Sandbox โดยสมบูรณ์
Recommendations:
Short Term:
- อัปเกรดเป็น vm2 เวอร์ชัน 3.10.2 หรือใหม่กว่าทันที
- ทำการประเมินรายการสินทรัพย์ (inventory assessments) ในสภาพแวดล้อมการพัฒนาและโปรดักชันทันทีเพื่อระบุการติดตั้งที่ได้รับผลกระทบ
- ปรับใช้เวอร์ชัน 3.10.2 ผ่าน pipeline การจัดการแพ็คเกจโดยไม่ชักช้า และตรวจสอบว่าไม่มีอินสแตนซ์ที่ใช้งานจริงที่ยังคงใช้เวอร์ชันที่มีช่องโหว่
Long Term:
- พิจารณาจำกัดการใช้งาน vm2 Sandbox ให้รันเฉพาะโค้ดที่น่าเชื่อถือเท่านั้น
Source: https://cybersecuritynews.com/vm2-sandbox-vulnerability/
Share this content: