Lỗ hổng nghiêm trọng trong thư viện isolated-vm cho phép thực thi mã từ xa trên hệ thống máy chủ

Công nghệ21 tháng 8, 2026·5 phút đọc

Một lỗ hổng type confusion nghiêm trọng trong thư viện isolated-vm của Node.js có thể cho phép tin tặc vượt qua sandbox V8 và thực thi mã từ xa trên hệ thống máy chủ. Lỗ hổng chưa được gán mã CVE này ảnh hưởng đến hàm ExternalCopy và đã được vá trong các phiên bản isolated-vm 6.2.0 và 7.0.1.

Lỗ hổng nghiêm trọng trong thư viện isolated-vm cho phép thực thi mã từ xa trên hệ thống máy chủ

Lỗ hổng nghiêm trọng trong thư viện isolated-vm cho phép thực thi mã từ xa trên hệ thống máy chủ

Một lỗ hổng type confusion ở mức nghiêm trọng trong thư viện isolated-vm của Node.js có thể cho phép tin tặc thực thi mã từ xa (RCE) trên hệ thống máy chủ. Lỗ hổng chưa được gán mã CVE này ảnh hưởng đến cơ chế sao chép dữ liệu giữa các môi trường sandbox V8, tạo điều kiện cho kẻ tấn công chiếm quyền kiểm soát luồng thực thi của tiến trình máy chủ.

Các nhà nghiên cứu tại EndorLabs đã phát hiện ra lỗ hổng này và cảnh báo rằng bất kỳ ứng dụng nào chạy mã không đáng tin cậy trong môi trường isolated-vm đều có nguy cơ bị ảnh hưởng. Các bản vá đã được phát hành trong các phiên bản isolated-vm 6.2.0 và 7.0.1.

Tổng quan về isolated-vm và cơ chế hoạt động

isolated-vm là thư viện phổ biến trong hệ sinh thái Node.js, cho phép nhà phát triển truy cập vào giao diện Isolate của V8 JavaScript engine để xây dựng các môi trường JavaScript hoàn toàn biệt lập. Mỗi Isolate là một phiên bản V8 riêng biệt với bộ nhớ heap, trạng thái thực thi và trình thu gom rác (garbage collector) độc lập.

Nhờ cơ chế này, nhà phát triển có thể chạy nhiều phiên bản mã JavaScript được sandbox hóa trên cùng một máy mà không cần sử dụng container hay máy ảo. Thư viện này được sử dụng rộng rãi để thực thi mã JavaScript không đáng tin cậy trong môi trường V8 Isolate — một yêu cầu phổ biến trong các nền tảng đa thuê bao, plugin system và dịch vụ điện toán biên.

Chi tiết kỹ thuật về lỗ hổng

Lỗ hổng type confusion này nằm trong ExternalCopy — hàm được sử dụng để sao chép dữ liệu giữa các Isolate. Hàm này tuần tự hóa dữ liệu trong một Isolate và tái cấu trúc lại trong một Isolate khác.

Để tối ưu hiệu suất, ExternalCopy sử dụng cơ chế transferList: các ArrayBuffer lớn được liệt kê và bộ nhớ nền tảng được chuyển giao bằng cách tách buffer khỏi nguồn và chuyển đến đích. Vấn đề phát sinh khi dữ liệu được chuyển giao: bộ tái cấu trúc (reconstructor) duyệt qua danh sách byte array hai lần, và lần duyệt thứ hai tin tưởng vào kết quả của lần duyệt đầu tiên.

"Lỗ hổng nằm trong lớp mã glue code gốc: phần binding C++ thực hiện tuần tự hóa các giá trị qua ranh giới. Lớp này được viết bằng ngôn ngữ không an toàn bộ nhớ; nó thao tác với các V8 handle và con trỏ backing-store thô, đồng thời đọc lại các đối tượng JavaScript do kẻ tấn công kiểm soát trong quá trình thực hiện thao tác nhạy cảm về bảo mật. Chỉ một phép ép kiểu không được kiểm tra trên giá trị đọc lại là đủ để biến một nguyên gốc cách ly chính xác thành một cuộc vượt ngục hoàn toàn," EndorLabs giải thích.

Cách khai thác lỗ hổng

Vì việc lặp qua mảng transfer_list của JavaScript sẽ không trả về cùng một giá trị cho một phần tử được định nghĩa là getter trong mỗi lần duyệt, kẻ tấn công có thể lợi dụng điểm yếu time-of-check/time-of-use (TOCTOU) để giải tham chiếu (dereference) một con trỏ do kẻ tấn công kiểm soát.

Mặc dù constructor ExternalCopy chỉ có thể truy cập từ phía máy chủ (host), một "khách" (guest) trong môi trường sandbox có thể nhắm mục tiêu vào ivm.Reference — cơ chế mà máy chủ dùng để chia sẻ dữ liệu với sandbox — để xây dựng transferList độc hại và kích hoạt lỗ hổng. Việc khai thác thành công có thể dẫn đến sự cố sụp đổ hệ thống (denial-of-service) hoặc chiếm quyền kiểm soát luồng thực thi của tiến trình máy chủ, từ đó cho phép RCE.

Mô tả về lỗ hổng bảo mật trong phần mềmMô tả về lỗ hổng bảo mật trong phần mềm

Ai bị ảnh hưởng?

Theo thông báo từ isolated-vm, "bất kỳ embedder nào chạy mã không đáng tin cậy trong một isolate và chia sẻ dù chỉ một Reference vào đó đều bị ảnh hưởng. Mã máy chủ chuyển một mảng do người gọi ảnh hưởng làm transferList cũng bị ảnh hưởng trực tiếp, mà không cần bất kỳ guest nào."

Điều này có nghĩa là các nhà phát triển Việt Nam đang xây dựng ứng dụng đa thuê bao, dịch vụ chạy mã plugin từ bên thứ ba, hoặc nền tảng học lập trình trực tuyến sử dụng isolated-vm cần đặc biệt lưu ý.

Khuyến nghị khắc phục

Các bản vá cho lỗ hổng đã được bao gồm trong isolated-vm 6.2.0 và 7.0.1, với mục đích ngăn chặn mã JavaScript của người dùng chạy trong quá trình sao chép dữ liệu. Các nhóm phát triển nên:

  • Cập nhật ngay lập tức lên phiên bản isolated-vm mới nhất
  • Rà soát các đoạn mã sử dụng transferList và đảm bảo không có dữ liệu do người dùng kiểm soát được truyền trực tiếp
  • Kiểm tra nhật ký hệ thống cho các dấu hiệu bất thường hoặc nỗ lực khai thác tiềm năng
  • Xem xét áp dụng các biện pháp bảo mật bổ sung ở lớp ranh giới giữa mã host và mã guest

Biểu tượng bảo mậtBiểu tượng bảo mật

Nhận định từ chuyên gia

Lỗ hổng này một lần nữa cho thấy ranh giới giữa các ngôn ngữ an toàn bộ nhớ như JavaScript và các lớp glue code viết bằng C/C++ vẫn là điểm yếu tiềm ẩn trong các hệ thống sandbox hiện đại. Khi các môi trường thực thi mã không đáng tin cậy ngày càng phổ biến trong kiến trúc điện toán đám mây và các nền tảng SaaS, việc đảm bảo cách ly tuyệt đối giữa các môi trường thực thi trở thành một thách thức lớn hơn bao giờ hết.

Các nhà phát triển nên theo dõi sát sao các bản cập nhật bảo mật từ dự án isolated-vm và có kế hoạch nâng cấp hệ thống một cách nhanh chóng để giảm thiểu rủi ro bị tấn công.

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗