พบช่องโหว่ร้ายแรง (CVE-2026-22709) ในไลบรารี vm2 Node.js ซึ่งเป็นไลบรารีที่ใช้ในการรันโค้ดที่ไม่น่าเชื่อถือในสภาพแวดล้อมแซนด์บ็อกซ์ที่ปลอดภัย ช่องโหว่นี้มีคะแนน CVSS ที่ 9.8 (วิกฤต) และเกิดจากการ Sanitization ที่ไม่เหมาะสมของ Promise handlers ทำให้ผู้โจมตีสามารถหลุดออกจากแซนด์บ็อกซ์และรันโค้ดตามอำเภอใจบนระบบปฏิบัติการได้ ช่องโหว่นี้เป็นหนึ่งในหลายๆ ช่องโหว่ประเภท Sandbox Escape ที่พบใน vm2 ในช่วงไม่กี่ปีที่ผ่านมา แม้ผู้ดูแลจะเคยพิจารณาหยุดพัฒนา แต่ปัจจุบันก็ยังคงดูแลเวอร์ชัน 3.x อยู่ ผู้ใช้งานควรอัปเดตเวอร์ชันล่าสุดและพิจารณาทางเลือกอื่นที่ให้การแยกส่วนที่แข็งแกร่งกว่า

     

Severity: วิกฤต

      
     

System Impact:

     

  • vm2 Node.js library (เวอร์ชัน 3.10.0 และต่ำกว่า)
  • ระบบปฏิบัติการที่รันโค้ดผ่าน vm2

      
     

Technical Attack Steps:

     

  1. ผู้โจมตีใช้ช่องโหว่ CVE-2026-22709 ซึ่งอยู่ในไลบรารี vm2 Node.js
  2. ช่องโหว่นี้เกิดจากการ Sanitization ที่ไม่เหมาะสมของ Callback ของ Promise.prototype.then และ Promise.prototype.catch
  3. ฟังก์ชัน Asynchronous ใน JavaScript จะคืนค่าเป็น ‘globalPromise’ objects ไม่ใช่ ‘localPromise’ objects
  4. ‘globalPromise.prototype.then’ และ ‘globalPromise.prototype.catch’ ไม่ได้รับการ Sanitization อย่างถูกต้อง ทำให้เกิดช่องทางในการ Bypass แซนด์บ็อกซ์
  5. การ Bypass นี้ส่งผลให้เกิด Sandbox Escape และสามารถรันโค้ดตามอำเภอใจบนระบบปฏิบัติการโฮสต์ได้

      
     

Recommendations:

     

Short Term:

     

  • อัปเดตไลบรารี vm2 Node.js เป็นเวอร์ชันล่าสุดทันที (แนะนำเวอร์ชัน 3.10.3 ขึ้นไป) ซึ่งมีการแก้ไขช่องโหว่ Sandbox Escape เพิ่มเติม

     

Long Term:

     

  • ตรวจสอบและอัปเดตไลบรารี vm2 อย่างสม่ำเสมอ เนื่องจากมีประวัติการพบช่องโหว่ Sandbox Escape หลายครั้ง
  • พิจารณาใช้ทางเลือกอื่นที่ให้การแยกส่วนที่แข็งแกร่งกว่า เช่น isolated-vm ซึ่งใช้ V8’s native Isolate interface
  • ใช้ Docker หรือการแยกส่วนเชิงตรรกะ (logical separation) ระหว่างส่วนประกอบต่างๆ เพื่อเพิ่มความปลอดภัยในการรันโค้ดที่ไม่น่าเชื่อถือ

      
     

Source: https://thehackernews.com/2026/01/critical-vm2-nodejs-flaw-allows-sandbox.html

   

Share this content:

Leave a Reply

Your email address will not be published. Required fields are marked *