Bayangkan sebuah platform otomasi yang memegang kunci ke berbagai API, database, dan layanan internal perusahaan Anda tiba-tiba diambil alih sepenuhnya oleh penyerang. Inilah skenario mimpi buruk yang dibawa oleh CVE-2025–68613.

Pada 19 Desember 2025, kerentanan Remote Code Execution (RCE) dengan skor CVSS 9.9 (Critical) dipublikasikan untuk n8n, platform otomasi workflow open-source populer. Kerentanan ini memungkinkan penyerang yang terautentikasi untuk mengeksekusi perintah sistem (OS command) secara sewenang-wenang dengan privilege proses n8n tersebut.

Dalam artikel ini, kita akan membedah bagaimana kerentanan ini bekerja, melihat proof-of-concept (PoC) eksploitasinya, dan bagaimana cara mendeteksi serta memitigasinya.

Apa itu n8n?

n8n adalah alat otomasi workflow berbasis node yang memungkinkan pengguna menghubungkan berbagai aplikasi dan layanan untuk mengotomatisasi tugas. Pengguna membangun alur kerja (workflows) yang terdiri dari nodes, di mana setiap node melakukan tindakan tertentu seperti request API, pemrosesan data, atau mengirim email.

n8n dibangun di atas Node.js dan menggunakan JavaScript untuk logika internalnya. Fitur utamanya adalah Sistem Evaluasi Ekspresi, yang memproses kode dinamis dalam kurung kurawal ganda {{ }} sebagai JavaScript selama eksekusi workflow. Di sinilah letak celahnya.

Expression Injection

Kerentanan ini (CVE-2025–68613) berada pada sistem evaluasi ekspresi n8n. Versi yang terdampak adalah mulai dari 0.211.0 hingga 1.120.38.

Masalah intinya adalah kurangnya isolasi konteks (sandboxing) yang memadai saat memproses input pengguna. n8n mengevaluasi input yang dibungkus dalam {{ }} sebagai kode JavaScript tanpa validasi input yang cukup. Hal ini memungkinkan penyerang untuk "escape" dari sandbox evaluasi dan mengakses internal Node.js.

Praktek

Sebelumnya praktek pastikan anda sudah mempunyai docker compose untuk membangun home lab karena praktek kali ini berjalan di localhost atau dari komputer kita pribadi.

Download docker compose dari repo saya ini

Menggunakan Docker Compose

Panduan ini menjelaskan cara menyiapkan lingkungan Home Lab, menginstal Docker Compose, dan menjalankan project menggunakan file docker-compose.yml yang telah disediakan.

1. Prasyarat Sistem

Sebelum memulai instalasi, pastikan sistem memenuhi kebutuhan berikut:

  • Sistem Operasi: Linux, Windows (via WSL2), atau macOS.
  • Docker Engine sudah terpasang dan berjalan.
  • Koneksi internet aktif untuk mengunduh image Docker.
  • Port 5678 tidak sedang digunakan oleh aplikasi lain.

2. Verifikasi Docker Compose

Pastikan Docker Compose sudah tersedia (biasanya sudah terintegrasi dalam instalasi Docker Desktop atau Docker Engine terbaru). Verifikasi versi dengan perintah berikut:

docker compose version

Jika output menampilkan versi (contoh: Docker Compose version v2.x.x), perangkat lunak siap digunakan.

3. Instalasi Lingkungan Lab

Lakukan kloning repositori project dan masuk ke direktori kerja menggunakan perintah berikut:

git clone https://github.com/Dlanang/homelab-CVE-2025-68613.git
cd homelab-CVE-2025-68613

Pastikan file docker-compose.yml tersedia di dalam direktori tersebut sebelum melanjutkan.

4. Menjalankan Layanan

Jalankan container dalam mode detached (latar belakang) agar terminal tetap dapat digunakan:

docker compose up -d

Proses ini akan mengunduh image n8n, membuat jaringan virtual, dan menjalankan layanan. Untuk memverifikasi bahwa layanan berjalan dengan baik, gunakan perintah:

docker compose ps

Pastikan status container menunjukkan "Up" atau "Running".

5. Akses Aplikasi

Setelah container berjalan, buka peramban web dan akses alamat berikut:

http://localhost:5678

Jika instalasi berhasil, halaman konfigurasi awal n8n akan muncul. Lab siap digunakan untuk simulasi.

6. Manajemen

Berikut adalah perintah untuk mengelola siklus hidup container:

Menghentikan app (Stop) Menghentikan container tanpa menghapusnya:

docker compose stop

Menghapus app (Down) Menghentikan dan menghapus container serta jaringan virtual:

docker compose down

Troubleshooting

Jika muncul pesan kesalahan "Bind for 0.0.0.0:5678 failed: port is already allocated", artinya port 5678 sedang digunakan oleh aplikasi lain. Solusinya adalah mengubah pemetaan port pada file docker-compose.yml (misalnya menjadi 8080:5678) atau menghentikan aplikasi lain yang menggunakan port tersebut.

Langkah 1: Memulai Workflow Baru

  • Klik tombol "Start from scratch" jika muncul di layar sambutan, atau buat workflow kosong baru dari menu editor.
None

Langkah 2: Menambahkan Trigger

Langkah pertama dalam workflow adalah menentukan pemicunya.

  1. Klik tombol "Add first step" (tanda plus) di tengah editor.
  2. Pada panel pencarian di sebelah kanan ("What triggers this workflow?"), ketik "Manual".
  3. Pilih "Manual Trigger" dari hasil pencarian. Node ini memungkinkan kita menjalankan eksploitasi hanya dengan mengklik tombol, tanpa menunggu pemicu eksternal.
None

Langkah 3: Menambahkan Node Target (Edit Fields)

Selanjutnya, kita akan menambahkan node tempat kita bisa menyuntikkan kode berbahaya.

  1. Klik tanda "+" (plus) kecil yang muncul di sebelah kanan node "Manual Trigger" yang baru saja dibuat.
  2. Panel pencarian "What happens next?" akan muncul. Ketik "Set" atau "Edit Fields".
  3. Pilih node bernama "Edit Fields (Set)". Node ini berfungsi untuk memodifikasi atau menambah field data, yang merupakan tempat kerentanan berada.
None

Langkah 4: Injeksi Payload (Eksploitasi)

Di sinilah proses eksploitasi (RCE) dilakukan.

  1. Pada panel konfigurasi node "Edit Fields", cari bagian "Fields to Set" atau sejenisnya.
  2. Klik tombol "Add Field".
  3. Isi kolom Name dengan nama bebas, misalnya result atau exploit.
  4. Pada kolom Value, pilih opsi untuk memasukkan ekspresi (biasanya ditandai dengan ikon gear atau tombol "Expression").
  5. Tempelkan (Paste) kode payload dari sini

Langkah 5: Eksekusi dan Verifikasi

  1. Setelah payload dimasukkan, klik tombol "Execute step" atau "Test step" pada node tersebut.
  2. Periksa bagian OUTPUT di panel node.
  3. Jika berhasil, Anda akan melihat hasil keluaran dari perintah id (seperti uid=0(root) gid=0(root)...) ditampilkan sebagai nilai dari field yang Anda buat tadi.
None

Langkah 6: Reverse shell

  1. Setelah payload revershell dimasukkan, klik tombol "Execute step" atau "Test step" pada node tersebut.
  2. Terminal lain membuka lalu menggunakan listen untuk menangkap koneksi dari target.
  3. Periksa panel node ketika berjalan apakah sudah masuk revershellnya.
  4. Jika berhasil, Anda akan melihat hasil keluaran dari perintah listen tadi begini:
rlwrap nc -lvnp 4444
listening on [any] 4444 ...
connect to [192.168.1.24] from (UNKNOWN) [172.18.0.2] 46013
sh: can't access tty; job control turned off
~ $
None
None

Strategi Deteksi CVE-2025–68613 (n8n RCE)

Bagian ini merinci cara mendeteksi serangan Remote Code Execution (RCE) Expression Injection pada n8n menggunakan SIEM atau solusi deteksi lainnya.

1. Tantangan Logging & Solusi Proxy

Sayangnya, n8n secara bawaan tidak menyediakan tingkat pencatatan (logging) yang cukup detail untuk mendeteksi serangan ini secara langsung melalui log aplikasinya.

Oleh karena itu, cara terbaik untuk mendeteksi serangan ini adalah dengan menempatkan solusi Proxy (seperti Nginx) di depan aplikasi n8n untuk mengelola permintaan yang masuk. Dengan pendekatan ini, Anda dapat mengirimkan log proxy ke solusi deteksi (SIEM) dan menganalisis isi konten body dari permintaan web untuk menemukan pola eksploitasi.

2. Konfigurasi Logging Nginx

Berikut adalah contoh konfigurasi Nginx untuk mencatat konten body permintaan menggunakan format 'Request-Body: "$request_body" '. Catatan: Konfigurasi ini mungkin berbeda tergantung solusi proxy yang Anda gunakan.

http {
    # Load Lua module
    lua_package_path "/etc/nginx/lua/?.lua;;";
    
    # Custom log format (Format Log Kustom)
    log_format detailed '$remote_addr - $remote_user [$time_local] '
                       '"$request" $status $body_bytes_sent '
                       '"$http_referer" "$http_user_agent" '
                       'Request-Body: "$request_body" '
                       'Content-Type: "$http_content_type" '
                       'Duration: $request_time s';
    
    # ... sisa blok http ...
}

untuk loging pastikan juga melihat dokumentasi resmi disini

3. Deteksi Menggunakan Sigma Rule

Untuk mendeteksi kerentanan ini menggunakan Sigma, Anda dapat menggunakan aturan berikut.

Aturan ini mendeteksi upaya penyuntikan ekspresi JavaScript berbahaya ke dalam workflow n8n.

4. Memantau Eksekusi Perintah Mencurigakan (Post-Exploitation)

Selain aturan Sigma di atas, sangat penting untuk terus memantau kejadian pembuatan proses (process creation events) untuk mengungkap aktivitas penyerang setelah eksploitasi berhasil.

Hal ini krusial karena penyerang yang memiliki kredensial n8n yang valid dapat sepenuhnya menyalahgunakan RCE ini untuk melakukan berbagai tindakan berbahaya, seperti:

  • Reverse Shell: Membuka koneksi balik untuk mendapatkan akses interaktif ke sistem.
  • Malware & Persistensi: Mengunduh dan mengeksekusi payload berbahaya untuk menjaga akses tetap terbuka atau meningkatkan dampak serangan.
  • Pengintaian (Reconnaissance): Menjalankan perintah untuk memetakan lingkungan server yang menampung aplikasi n8n.

Rekomendasi: Jangan hanya mengandalkan satu sinyal deteksi. Sebaliknya, korelasikan deteksi log web (dari Nginx/Proxy) dengan aturan pembuatan proses (process creation) untuk mengidentifikasi perilaku pasca-eksploitasi secara andal dan meningkatkan kepercayaan deteksi secara keseluruhan.