Lỗ hổng CVE SandboxJS: Nguy hiểm RCE tối đa

Lỗ hổng CVE SandboxJS: Nguy hiểm RCE tối đa

Lỗ hổng CVE CVE-2026-43898 trong SandboxJS cho phép thoát khỏi môi trường sandbox và thực thi mã tùy ý trên hệ thống máy chủ. Đây là một cảnh báo CVE có mức độ nghiêm trọng tối đa, ảnh hưởng trực tiếp đến các ứng dụng dùng @nyariv/sandboxjs để chạy JavaScript không tin cậy.

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

Lỗ hổng ảnh hưởng đến tất cả phiên bản của gói @nyariv/sandboxjs đến và bao gồm 0.9.5. Phiên bản đã vá là 0.9.6. Theo mô tả kỹ thuật, vấn đề nằm ở logic truy cập thuộc tính trong file prop.ts, cụ thể là hàm addOps.

Trong cấu hình hiện tại, mã chạy trong sandbox có thể đọc các thuộc tính caller, calleearguments trên đối tượng hàm. Đây là điểm yếu cốt lõi dẫn đến remote code execution và thoát khỏi sandbox.

Chi tiết kỹ thuật của cảnh báo CVE

Nhóm nghiên cứu phát hiện rằng một callback nội bộ mạnh có tên LispType.Call bị rò rỉ ra ngoài môi trường cô lập. Khi attacker nắm được callback này, họ có thể sử dụng nó để vượt qua ranh giới sandbox và giành quyền kiểm soát toàn bộ host.

Trong CommonJS build, một hàm sandbox có thể gọi theo dạng function f(){ return f.caller } để lấy lại callback phía host đã kích hoạt nó. Sau đó, callback này được dùng như một điểm tựa để suy ra Function constructor thật của host.

Chuỗi khai thác tiếp theo cho phép attacker truyền chuỗi JavaScript vào constructor này và thực thi trực tiếp trên hệ thống máy chủ. PoC đi kèm advisory cho thấy có thể chạy lệnh hệ thống thông qua module tích hợp sẵn của Node.js là child_process.

Điều kiện khai thác

  • Không cần xác thực.
  • Không cần tương tác của người dùng.
  • Khả năng khai thác qua mạng.
  • Độ phức tạp thấp.
  • Scope: Changed, vì payload vượt ra khỏi sandbox sang host.

CVSS và mức độ nghiêm trọng

CVE-2026-43898 được gán điểm CVSS 10.0, phản ánh mức độ rủi ro cao nhất cho một lỗ hổng CVE. Tổ hợp đặc tính khai thác gồm tấn công từ xa, không cần đặc quyền và không cần người dùng thao tác khiến nguy cơ bảo mật tăng mạnh.

Điểm đáng chú ý là tác động không dừng ở việc thoát sandbox. Khi exploit thành công, attacker có thể đạt full remote code execution trên host, từ đó ảnh hưởng đến tính confidentiality, integrityavailability của hệ thống.

Đường dẫn khai thác trong SandboxJS

Lỗ hổng CVE xuất phát từ việc sandboxed code được phép truy cập vào các thuộc tính điều khiển luồng gọi hàm. Trong bối cảnh này, dữ liệu do attacker kiểm soát có thể bị chuyển trực tiếp vào handler nội bộ mà không có kiểm tra nguồn gốc đầy đủ.

Điều đó tạo ra khả năng dựng các lời gọi giả mạo để đánh lừa runtime. Khi callback host-side bị rò rỉ, attacker có thể xâu chuỗi các thao tác nhằm lấy constructor thực và thực thi mã tùy ý.

Đoạn minh họa kỹ thuật

function f() {
  return f.caller;
}

Đoạn trên thể hiện cơ chế truy vấn caller trong bối cảnh CommonJS build. Chính hành vi này là một phần của bề mặt tấn công được khai thác trong lỗ hổng CVE.

Tác động hệ thống

Với các ứng dụng dùng SandboxJS để chạy script do người dùng hoặc bên thứ ba cung cấp, cảnh báo CVE này có thể dẫn đến hệ thống bị xâm nhập hoàn toàn. Các nhóm hệ thống thường chịu rủi ro gồm:

  • Online code editor.
  • Server-side scripting tool.
  • Automation platform.
  • Ứng dụng xử lý JavaScript không tin cậy.

Sau khi thoát sandbox, attacker có thể đọc dữ liệu, sửa đổi file, thực thi lệnh hệ thống hoặc mở rộng kiểm soát sang các thành phần liên quan trên host. Đây là dạng nguy cơ bảo mật điển hình của lỗi sandbox escape.

Thông tin advisory và nguồn tham chiếu

Lỗ hổng được công bố qua advisory trên GitHub với mã GHSA-g8f2-4f4f-5jqw. Tham chiếu gốc: GitHub Security Advisory.

Advisory cũng ghi nhận bản vá đã được phát hành trong 0.9.6, khắc phục trực tiếp nguyên nhân gốc bằng cách chặn truy cập vào các thuộc tính caller, calleearguments trong sandboxed code.

Biện pháp xử lý và giảm thiểu

Đối với môi trường đang sử dụng @nyariv/sandboxjs, cần cập nhật lên 0.9.6 ngay khi có thể. Đây là biện pháp chính để loại bỏ lỗ hổng CVE đã được xác nhận.

Nếu chưa thể nâng cấp ngay, không nên chạy bất kỳ JavaScript không tin cậy nào qua thư viện bị ảnh hưởng cho đến khi bản vá được áp dụng và kiểm thử đầy đủ trong môi trường nội bộ.

Kiểm tra phiên bản CLI

npm list @nyariv/sandboxjs
npm view @nyariv/sandboxjs version

Nếu kết quả cho thấy phiên bản 0.9.5 hoặc thấp hơn, cần xem đây là trạng thái còn tồn tại lỗ hổng CVE. Sau cập nhật, nên xác nhận lại gói đã chuyển sang 0.9.6.

IOC

  • CVE-2026-43898:
  • GHSA-g8f2-4f4f-5jqw:
  • @nyariv/sandboxjs 0.9.5 và các phiên bản thấp hơn:
  • prop.ts, hàm addOps:
  • LispType.Call:
  • caller, callee, arguments:
  • child_process trong PoC:

Ý nghĩa của bản vá 0.9.6

Bản vá 0.9.6 thay đổi hành vi của runtime để ngăn sandboxed code truy cập các thuộc tính nội bộ có thể dẫn đến thoát môi trường. Với loại cảnh báo CVE này, việc giới hạn truy cập vào các đối tượng điều khiển luồng gọi hàm là bước sửa lỗi bắt buộc.

Trong các hệ thống cần xử lý script bên ngoài, việc cập nhật bản vá nên đi kèm kiểm tra lại cơ chế sandbox, đặc biệt ở các điểm có thể cung cấp callback hoặc wrapper function từ host vào runtime cô lập.