Lỗ hổng CVE vm2 nguy hiểm: RCE và bản vá

Lỗ hổng CVE vm2 nguy hiểm: RCE và bản vá

Lỗ hổng CVE trong vm2 đang tạo ra rủi ro an toàn thông tin nghiêm trọng cho các ứng dụng phụ thuộc vào cơ chế chạy JavaScript không tin cậy trong môi trường cô lập. Theo mô tả kỹ thuật, 11 lỗ hổng nghiêm trọng ảnh hưởng đến các phiên bản tới 3.11.1, trong đó có 2 lỗ hổng chưa được vá.

Phạm vi ảnh hưởng của lỗ hổng CVE trong vm2

vm2 là gói npm cho Node.js, được dùng để thực thi JavaScript không tin cậy bên trong một container cô lập. Thành phần này thường xuất hiện trong các nền tảng thực thi mã, pipeline CI, engine plugin và các dịch vụ đa thuê bao.

Mô hình bảo mật của lỗ hổng CVE trong vm2 dựa trên giả định rằng mã độc bên trong VM không thể truy cập host. Tuy nhiên, các phát hiện mới cho thấy giả định này đã bị phá vỡ trên nhiều kỹ thuật khác nhau, dẫn đến remote code execution trên hệ thống chủ.

Điểm đáng chú ý là toàn bộ các lỗi được mô tả đều có thể mở đường thoát khỏi sandbox, với tác động cuối cùng là chiếm quyền điều khiển tiến trình Node.js trên host.

Danh sách các lỗ hổng CVE và kỹ thuật khai thác

Nhiều lỗ hổng CVE trong nhóm này khai thác các đặc tính nội tại của JavaScript, Node.js và cơ chế ủy quyền đối tượng trong vm2.

CVE-2026-24118 và CVE-2026-24120

CVE-2026-24118 khai thác hành vi của __lookupGetter__ để thoát khỏi sandbox. Trong khi đó, CVE-2026-24120 vượt qua cơ chế bảo vệ của Promise species để thực thi lệnh thông qua child_process.execSync.

Hai lỗi này cho thấy lỗ hổng CVE không chỉ nằm ở lớp lọc đối tượng, mà còn ở cách vm2 xử lý các đối tượng đặc biệt của JavaScript khi chuyển ngữ cảnh.

CVE-2026-24781

CVE-2026-24781 khai thác mô-đun util của Node.js, đặc biệt là util.inspect, để làm lộ đối tượng gốc trên host và vượt qua lớp proxy isolation của vm2.

Kỹ thuật này cho thấy một lỗ hổng CVE có thể phát sinh ngay trong các API được sử dụng phổ biến cho debug và hiển thị đối tượng.

CVE-2026-26332 và CVE-2026-26956

CVE-2026-26332 tận dụng DisposableStackSuppressedError trong Node.js v24 để truy xuất đối tượng Function trên host.

CVE-2026-26956 nhắm vào Node.js v25 bằng lệnh try_table của WebAssembly, qua đó vượt qua cơ chế lọc của vm2 và dẫn đến root-level code execution.

Nhóm lỗ hổng CVE này đặc biệt nguy hiểm vì khai thác các thay đổi mới của nền tảng thay vì chỉ dựa vào hành vi cũ của đối tượng.

CVE-2026-43997, CVE-2026-44006 và CVE-2026-43999

CVE-2026-43997CVE-2026-44006 lạm dụng util.inspect cùng thao tác traversal trên prototype để thoát sandbox. CVE-2026-43999 vượt qua giới hạn module của vm2 bằng Module._load(), ngay cả khi child_process đã bị chặn rõ ràng.

Đây là nhóm lỗ hổng CVE cho thấy lớp hạn chế module của vm2 không đủ để ngăn chặn việc tải và gọi các thành phần nhạy cảm trong Node.js.

CVE-2026-44005

CVE-2026-44005 là lỗi prototype pollution, cho phép sửa đổi các prototype dùng chung trên host như Object.prototypeFunction.prototype. Tác động có thể lan rộng đến toàn bộ tiến trình Node.js.

Trong bối cảnh lỗ hổng CVE, đây là kiểu khai thác có khả năng làm sai lệch hành vi runtime ở mức toàn cục, không chỉ riêng một VM instance.

GHSA-8hg8-63c5-gwmx

Một cấu hình nguy hiểm được theo dõi dưới mã GHSA-8hg8-63c5-gwmx cho thấy bật nesting: true sẽ vô hiệu hóa hiệu quả của require: false. Kẻ tấn công có thể tạo VM lồng nhau không bị giới hạn và đạt full RCE dù đang áp dụng các ràng buộc bảo mật.

Đây là một lỗ hổng CVE theo hướng cấu hình, cho thấy sai lệch nhỏ trong thiết lập cũng đủ phá vỡ toàn bộ mô hình cô lập.

CVE-2026-44008 và CVE-2026-44009

Hai lỗ hổng CVE nghiêm trọng nhất là CVE-2026-44008CVE-2026-44009, hiện vẫn chưa có bản vá cho các phiên bản tới 3.11.1. Cả hai khai thác cách xử lý array species và logic ngoại lệ để lộ đối tượng phía host và lấy lại quyền truy cập vào Function constructor.

Vì chưa có bản sửa, các môi trường phụ thuộc vm2 cho xử lý mã không tin cậy cần đánh giá lại rủi ro bảo mật ngay lập tức.

Ảnh hưởng hệ thống và mức độ rủi ro

Toàn bộ nhóm lỗ hổng CVE này đều dẫn đến khả năng remote code execution trên host. Khi sandbox bị phá vỡ, tiến trình Node.js có thể bị điều khiển để thực thi lệnh tùy ý, truy cập tài nguyên nội bộ hoặc ảnh hưởng đến các dịch vụ đồng tiến trình.

Ảnh hưởng đáng kể nhất nằm ở các hệ thống chạy mã không tin cậy trong:

  • Nền tảng thực thi code.
  • Pipeline CI/CD.
  • Plugin engine.
  • Dịch vụ đa thuê bao.

Với phạm vi như vậy, lỗ hổng CVE trong vm2 không nên được xem là lỗi cục bộ của một gói npm đơn lẻ, mà là rủi ro trực tiếp đối với kiến trúc cô lập ứng dụng.

Khuyến nghị vá lỗi và cấu hình an toàn

Đối với các lỗ hổng CVE đã được khắc phục, nên nâng cấp vm2 lên 3.11.1 để xử lý các vấn đề đã có bản vá.

Riêng CVE-2026-44008CVE-2026-44009 chưa có bản sửa, nên cân nhắc loại bỏ hoàn toàn mô hình sandbox dựa trên vm2 nếu hệ thống xử lý mã không tin cậy.

Thay vào đó, nên sử dụng các công nghệ cô lập ở mức kernel như Docker, gVisor hoặc Firecracker microVMs.

Các nhà phát triển cần tránh cấu hình sau trong mọi môi trường chạy mã không tin cậy:

nesting: true
require: false
['*', '-child_process']

Việc dùng wildcard built-ins hoặc cho phép VM lồng nhau có thể mở lại đường thoát sandbox, dù bề ngoài vẫn giữ các ràng buộc hạn chế module.

Tham chiếu kỹ thuật

Thông tin công khai về nhóm lỗ hổng CVE này được mô tả trong advisory trên GitHub: https://github.com/patriksimek/vm2/security/advisories/GHSA-47×8-96vw-5wg6.

Để đối chiếu mã định danh và trạng thái vá lỗi, có thể tra cứu thêm trên NVD.