Lỗ hổng Isolated-vm cho phép JavaScript trong Sandbox thoát ra Host, nguy cơ RCE

Các nhà nghiên cứu an ninh mạng đã tiết lộ một lỗ hổng bảo mật nghiêm trọng trong isolated-vm, một sandbox mã nguồn mở phổ biến với hơn 2.900 sao trên GitHub, có thể cho phép kẻ tấn công thoát khỏi giới hạn của môi trường cô lập. Lỗ hổng (GHSA-864f-rcv7-6rh4) ảnh hưởng đến tất cả các phiên bản của thư viện trước và bao gồm cả 7.0.0. Lỗ hổng đã được vá trong các phiên bản 6.2.0 và 7.0.1.
Lỗ hổng isolated-vm

Các nhà nghiên cứu an ninh mạng vừa tiết lộ một lỗ hổng bảo mật nghiêm trọng trong isolated-vm, một thư viện sandbox mã nguồn mở phổ biến với hơn 2.900 sao và 190 lượt fork trên GitHub. Lỗ hổng này có thể cho phép kẻ tấn công thoát khỏi giới hạn của môi trường cô lập.

Lỗ hổng (mã định danh GHSA-864f-rcv7-6rh4), hiện vẫn chưa được gán mã CVE chính thức, ảnh hưởng đến tất cả các phiên bản của thư viện từ 7.0.0 trở về trước. Nó đã được khắc phục trong các phiên bản 6.2.0 và 7.0.1 được phát hành vào đầu tháng này.

Isolated-vm là một thư viện Node.js dùng để chạy các đoạn mã JavaScript không tin cậy bên trong một V8 Isolate — một thực thể độc lập của công cụ JavaScript Google V8. Điều này cho phép nhiều môi trường JavaScript chạy song song mà không chia sẻ dữ liệu hoặc can thiệp lẫn nhau. Gói npm này đã ghi nhận gần 1 triệu lượt tải xuống chỉ trong tuần qua.

Nguyên nhân gây ra lỗ hổng Sandbox Escape

Vì mỗi V8 Isolate có trạng thái riêng biệt và duy trì vùng nhớ (heap) riêng, nên không thể truyền trực tiếp các đối tượng JavaScript từ luồng chính của Node.js vào một isolate worker. Isolated-vm cung cấp một lớp (class) có tên là ExternalCopy để tuần tự hóa (serialize) các đối tượng JavaScript một cách an toàn ra khỏi isolate host và giải tuần tự hóa (deserialize) chúng vào isolate guest.

Lỗ hổng do Endor Labs xác định nằm trong thành phần này, cho phép mã chạy bên trong sandbox thoát ra ngoài và làm hỏng bộ nhớ trong ứng dụng host.

"Lỗi type confusion trong cách ExternalCopy xử lý tùy chọn transferList cho phép mã chạy bên trong sandbox làm hỏng bộ nhớ của tiến trình host," Cristian-Alexandru Staicu, nhà nghiên cứu tại Endor Labs, người có công phát hiện và báo cáo lỗ hổng, cho biết.
Cơ chế ExternalCopy trong isolated-vm

"Chỉ bắt đầu từ một ivm.Reference duy nhất — cách tiêu chuẩn mà host cấp quyền cho sandbox — chúng tôi đã leo thang lỗ hổng từ một vụ sập ứng dụng tại địa chỉ được kiểm soát (controlled-address crash) cho đến việc chiếm quyền điều khiển luồng thực thi của host, chứng minh khả năng thoát sandbox hoàn toàn từ guest sang host."

Tác động nghiêm trọng và Khuyến nghị

Việc khai thác thành công lỗ hổng cho phép làm hỏng bộ nhớ trong tiến trình host, khiến tiến trình host bị sập với lỗi phân đoạn (SIGSEGV). Nó cũng có thể dẫn đến việc thoát sandbox và phá vỡ ranh giới tin cậy — vốn là mục đích cốt lõi của isolated-vm.

"Tác động tối thiểu được chứng minh là gây sập ứng dụng tại địa chỉ được kiểm soát (tấn công từ chối dịch vụ - DoS), có thể được kích hoạt bởi bất kỳ guest nào đã được cấp ivm.Reference," Marcel Laverdet, người duy trì dự án, cho biết trong một khuyến cáo.

"Tác động tối đa được chứng minh là chiếm quyền điều khiển luồng thực thi của tiến trình host, tức là có khả năng thực thi mã từ xa (RCE) trên host."

Người dùng đang cài đặt isolated-vm trong môi trường phát triển của mình được khuyến nghị cập nhật lên phiên bản mới nhất để được bảo vệ tối ưu. Chi tiết bổ sung về cách khai thác đầy đủ hiện đang được giữ kín để ngăn chặn các tác nhân xấu thực hiện tấn công.

Nhà nghiên cứu Staicu nhấn mạnh: "Bài học quan trọng nhất là cơ chế cô lập gốc không hề hỏng. Ranh giới Isolate của V8 vẫn đứng vững. Phần thất bại chính là mã 'keo' C++ (C++ glue code) dùng để chuyển các giá trị qua ranh giới đó. Một khối xây dựng hoàn hảo đã bị suy yếu bởi lớp liên kết (binding layer) bao quanh nó."