Prosedur Tanggap Insiden untuk Kerentanan Eksekusi Kode Jarak Jauh React Server Components
Anda sedang menghadapi situasi keamanan yang kritis dan mendesak. Istilah “React2Shell” merujuk pada kerentanan dengan tingkat keparahan maksimum (CVE-2025-55182) yang terdapat dalam arsitektur React Server Components. Celah keamanan ini memungkinkan penyerang eksternal untuk mengeksekusi kode bervahaya secara sewenang-wenang di server Anda tanpa perlu melakukan otentikasi atau login terlebih dahulu.
Jika server Anda dinyatakan “terdampak” atau “affected”, ini berarti penyerang kemungkinan besar telah berhasil memanfaatkan celah tersebut. Mereka mungkin sudah menanamkan penambang mata uang kripto (cryptominer), pintu belakang (backdoor) untuk akses masa depan, atau bahkan reverse shell yang memberikan mereka kendali penuh atas sistem operasi Anda. Panduan ini akan memandu Anda melalui proses pembersihan manual secara forensik pada server berbasis Ubuntu.
Fase 1 Isolasi dan Pembatasan Koneksi Segera
Kecepatan adalah faktor yang paling krusial dalam tahap ini. Selama server masih terhubung bebas ke internet, penyerang memiliki kendali aktif. Mereka dapat menghapus jejak, mencuri data sensitif, atau menyebar ke server lain dalam jaringan internal Anda. Langkah pertama bukanlah mematikan server, melainkan memutus akses penyerang.
Langkah 1.1 Memblokir Lalu Lintas Masuk dan Keluar
Jangan langsung mematikan server (shutdown). Mematikan server dapat menghilangkan bukti forensik yang tersimpan di memori (RAM). Sebaliknya, kita akan menggunakan firewall untuk memutus komunikasi penyerang. Kita akan menggunakan UFW (Uncomplicated Firewall) yang merupakan standar di Ubuntu.
Pertama, masuklah ke server Anda melalui SSH. Segera setelah Anda masuk, Anda harus memblokir semua lalu lintas kecuali koneksi SSH Anda sendiri.
- Jalankan perintah untuk menolak semua lalu lintas masuk secara default. Ini mencegah koneksi baru dibuat ke server Anda.sudo ufw default deny incoming
- Jalankan perintah untuk menolak semua lalu lintas keluar secara default. Langkah ini sering diabaikan namun sangat vital. Malware modern, terutama yang diinstal melalui React2Shell, sering kali perlu “menelepon ke rumah” atau menghubungi server Command and Control (C2) untuk menerima instruksi lebih lanjut atau mengirimkan data curian.sudo ufw default deny outgoing
- Izinkan akses SSH hanya dari alamat IP spesifik Anda. Jangan izinkan akses SSH dari any atau sembarang tempat. Ganti 192.168.1.5 dengan alamat IP publik workstation Anda saat ini.sudo ufw allow from 192.168.1.5 to any port 22
- Aktifkan firewall dengan segera. Konfirmasi dengan menekan y jika diminta.sudo ufw enable
Langkah 1.2 Mengamankan Bukti untuk Forensik
Sebelum Anda mulai menghapus file atau mematikan proses, sangat disarankan untuk menyimpan kondisi sistem saat ini. Ini berguna jika Anda perlu melakukan investigasi lanjutan atau melaporkan insiden ini ke pihak berwenang.
Jika Anda menggunakan penyedia cloud seperti AWS, DigitalOcean, atau Google Cloud, cara tercepat dan teraman adalah dengan membuat “Snapshot” dari disk server melalui panel kontrol cloud provider Anda. Lakukan ini sekarang.
Jika snapshot tidak memungkinkan, minimal Anda harus mengarsipkan log sistem dan direktori aplikasi. Gunakan perintah berikut untuk membuat arsip terkompresi:
sudo tar -czvf /root/bukti_insiden_react2shell.tar.gz /var/log /home/user_aplikasi_anda/direktori_proyek
Fase 2 Identifikasi Proses Berbahaya
Eksploitasi React2Shell biasanya akan memunculkan proses anak (child process) di bawah user node atau user yang menjalankan aplikasi Next.js Anda. Anda harus mencari proses yang menyamar sebagai proses sistem yang sah tetapi sebenarnya adalah malware.
Langkah 2.1 Inspeksi Pohon Proses atau Process Tree
Kita perlu melihat apa saja yang telah dijalankan oleh aplikasi Node.js Anda. Aplikasi web seharusnya hanya melayani permintaan HTTP, bukan menjalankan perintah shell sistem.
- Instal utilitas htop jika belum tersedia, karena tampilannya lebih mudah dipahami daripada top biasa.sudo apt update && sudo apt install htop -y
- Jalankan
htop. - Tekan tombol
F5pada keyboard Anda. Ini akan mengubah tampilan menjadi “Tree View” atau tampilan pohon. - Cari proses
nodeutama Anda (biasanya bernamanext-server,server.js, atau hanyanode). - Perhatikan dengan seksama proses “anak” yang muncul di bawah
node. Indikator kompromi yang umum pada kasus React2Shell meliputi:- Proses
sh,bash, ataudashyang muncul di bawahnode. Ini adalah tanda pasti adanya reverse shell. Aplikasi web normal tidak seharusnya memanggil terminal shell. - Proses dengan nama aneh seperti
xmrig(penambang kripto),kworker(sering dipalsukan), atau string acak sepertia7b2mn. - Proses yang berjalan dari direktori sementara seperti
/tmpatau/var/tmp.
- Proses
Langkah 2.2 Identifikasi Penggunaan Sumber Daya Tinggi
Penambang kripto atau cryptominers adalah muatan (payload) yang paling umum disisipkan penyerang untuk mencari keuntungan finansial. Ciri utamanya adalah penggunaan CPU yang sangat tinggi.
- Masih di dalam
htopatau menggunakan perintahtop. - Urutkan proses berdasarkan penggunaan CPU. Di
top, tekan tombolP. - Jika Anda melihat proses yang menggunakan 90% hingga 100% CPU secara konsisten, catat PID (Process ID) dan nama proses tersebut. Ini hampir pasti adalah malware penambang.
Langkah 2.3 Memeriksa Port Jaringan Terbuka
Malware membutuhkan jalur komunikasi. Kita perlu melihat proses mana yang sedang mendengarkan (listening) atau terhubung ke dunia luar.
- Jalankan perintah berikut untuk melihat semua file terbuka dan port jaringan yang aktif:sudo lsof -i -P -n
- Perhatikan bagian
COMMANDdanPID. Cari koneksi dengan statusESTABLISHEDyang berasal dari prosesnodeatau proses asing lainnya yang mengarah ke alamat IP yang tidak Anda kenal. Hati-hati dengan koneksi ke port non-standar seperti 3333, 4444, 8080, atau port tinggi di atas 10000. - Cari juga status
LISTEN. Penyerang mungkin memasang backdoor yang membuka port tertentu (misalnya port 1337) agar mereka bisa masuk kembali nanti tanpa melalui aplikasi web.
Fase 3 Eliminasi Ancaman Aktif
Setelah Anda mengidentifikasi PID (Process ID) yang mencurigakan, Anda harus menghentikannya dengan segera dan tegas.
Langkah 3.1 Membunuh Proses Berbahaya
Gunakan perintah kill. Jangan ragu untuk menggunakan sinyal -9 (SIGKILL) yang memaksa proses berhenti seketika tanpa ampun.
- Contoh, jika Anda menemukan penambang dengan PID 12345:sudo kill -9 12345
- Jika Anda melihat proses node aplikasi Anda sendiri sudah terinfeksi parah (misalnya memunculkan banyak shell), lebih aman untuk mematikan seluruh layanan aplikasi web tersebut.sudo systemctl stop nama-layanan-nextjs-andaAtau jika menggunakan PM2:pm2 stop all
Langkah 3.2 Verifikasi Penghentian
Malware canggih sering kali memiliki mekanisme “watchdog” yang akan menyalakan ulang proses virus jika dimatikan. Segera setelah Anda melakukan kill, jalankan pengecekan ulang.
ps aux | grep nama_malware
Jika proses tersebut muncul kembali dengan PID yang baru, berarti ada mekanisme persistensi (persistence) yang aktif. Kita akan menanganinya di Fase 5, namun Anda harus menyadari bahwa saat ini sistem sedang “berperang” melawan Anda.
Fase 4 Pembersihan Sistem File
Celah React2Shell memungkinkan penyerang menulis file ke dalam sistem server Anda. Anda harus menyisir direktori untuk menemukan dan menghapus muatan berbahaya ini.
Langkah 4.1 Inspeksi Direktori Sementara
Direktori /tmp adalah lokasi favorit penyerang untuk meletakkan file biner malware karena di Linux standar, semua user memiliki izin tulis (write permission) di folder ini.
- List semua file di /tmp termasuk file tersembunyi.ls -la /tmp
- Periksa juga /var/tmp dan /dev/shm. /dev/shm adalah shared memory yang berjalan di RAM, tempat favorit untuk menyembunyikan malware yang tidak menyentuh hard disk (fileless malware), namun terkadang meninggalkan jejak.ls -la /var/tmpls -la /dev/shm
- Cari file dengan ciri-ciri berikut:
- Script shell (
.sh). - File executable biner (biasanya berwarna hijau di terminal).
- File dengan nama acak.
- Direktori tersembunyi yang diawali dengan titik, misalnya
/.ice-unixatau/.X11yang palsu.
- Script shell (
- Hapus semua yang mencurigakan dengan perintah rm.sudo rm -rf /tmp/nama_file_mencurigakan
Langkah 4.2 Audit Direktori Aplikasi
Penyerang mungkin telah memodifikasi kode sumber (source code) aplikasi Next.js Anda untuk menanamkan pintu belakang permanen.
- Masuk ke direktori root aplikasi Anda.
- Gunakan perintah find untuk mencari file yang dimodifikasi dalam 7 hari terakhir (atau sesuaikan dengan perkiraan waktu serangan).find . -type f -mtime -7
- Periksa file package.json dengan sangat teliti. Ini adalah teknik yang sangat umum di ekosistem Node.js. Penyerang sering menambahkan script di bagian “scripts” (misalnya pada postinstall atau prebuild) yang akan mengunduh malware kembali setiap kali Anda menjalankan npm install.cat package.json
- Jika node_modules Anda dicurigai telah disusupi, jangan mencoba membersihkannya satu per satu. Hapus seluruh folder tersebut.rm -rf node_modulesrm package-lock.json
Fase 5 Penghapusan Mekanisme Persistensi
Penyerang yang canggih, seperti grup yang mengeksploitasi React2Shell, akan memastikan akses mereka tetap ada meskipun server di-restart. Anda harus memutus akses permanen ini.
Langkah 5.1 Memeriksa Cron Jobs
Cron adalah penjadwal tugas di Linux. Penyerang sering menambahkan tugas terjadwal untuk mengunduh ulang malware setiap jam.
- Periksa crontab untuk user yang menjalankan aplikasi.crontab -l
- Periksa crontab untuk user root.sudo crontab -l
- Periksa direktori cron sistem.ls -la /etc/cron.d/ls -la /etc/cron.hourly/
- Jika Anda melihat baris perintah yang menggunakan
curl,wget, atau menyalurkan data ke| bash, hapus segera dengan mengedit crontab (crontab -e) atau menghapus file di/etc/cron.d/.
Langkah 5.2 Memeriksa Layanan Systemd
Penyerang sering membuat file layanan palsu agar malware mereka berjalan otomatis saat booting, layaknya layanan server resmi.
- Cari file unit layanan yang baru dibuat atau dimodifikasi.find /etc/systemd/system -type f -mtime -7
- Periksa nama-nama layanan yang tidak Anda kenal. Jika Anda menemukan file seperti
nginx-service-helper.servicepadahal Anda tidak pernah menginstalnya, curigailah. - Hentikan, nonaktifkan, dan hapus layanan jahat tersebut.sudo systemctl stop layanan_jahat.servicesudo systemctl disable layanan_jahat.servicesudo rm /etc/systemd/system/layanan_jahat.servicesudo systemctl daemon-reload
Langkah 5.3 Memeriksa Kunci SSH
Jika penyerang berhasil mendapatkan akses shell, mereka hampir pasti menambahkan kunci publik (public key) mereka ke dalam file authorized_keys agar bisa login tanpa password.
- Periksa file authorized_keys milik user Anda.cat ~/.ssh/authorized_keys
- Periksa setiap baris kunci. Jika ada kunci yang tidak Anda kenali, atau ada kunci baru di bagian paling bawah file, hapus baris tersebut.
- Lakukan hal yang sama untuk user root.sudo cat /root/.ssh/authorized_keys
Fase 6 Perbaikan dan Pemulihan (Remediation)
Sekarang setelah ancaman aktif dihilangkan, Anda harus menambal celah keamanan agar serangan tidak terulang.
Langkah 6.1 Memperbarui Dependensi Node.js
Inti masalah ada pada paket react, react-dom, dan next (khususnya komponen react-server-dom-webpack).
- Di direktori proyek Anda, perbarui paket-paket ini ke versi terbaru yang sudah ditambal.npm install next@latest react@latest react-dom@latest
- Pastikan versi Next.js Anda sudah berada di versi yang aman (misalnya 15.0.5+ atau 16.0.7+ tergantung rilis patch resmi untuk CVE-2025-55182).
- Instal ulang semua dependensi dengan bersih.npm install
Langkah 6.2 Membangun Ulang Aplikasi (Rebuild)
Anda wajib melakukan proses build ulang. Hal ini karena kode React Server Components sering kali dikompilasi (compiled) ke dalam bundel produksi. Hanya mengganti node_modules tidak cukup jika kode lama masih ada di folder .next.
npm run build
Langkah 6.3 Rotasi Rahasia (Secret Rotation) – SANGAT PENTING
Ini adalah langkah yang paling sering dilupakan namun paling fatal jika dilewatkan. Kerentanan React2Shell sering kali mengekspos variabel lingkungan (process.env). Artinya, penyerang kemungkinan besar sudah membaca isi file .env Anda.
Anda harus berasumsi bahwa semua kredensial berikut sudah bocor dan dikompromikan:
- Kunci Akses AWS (Access Key ID & Secret Key).
- Password koneksi Database (Postgres, MySQL, Mongo, dll).
- API Key layanan pihak ketiga (Stripe, SendGrid, Twilio).
- JWT Secret atau kunci enkripsi sesi.
Tindakan yang wajib dilakukan:
- Login ke dashboard penyedia layanan masing-masing.
- Hapus (revoke) kunci yang lama.
- Buat kunci (generate) yang baru.
- Update file
.envdi server dengan kunci baru tersebut. - Restart aplikasi Anda agar menggunakan kunci baru.
Fase 7 Verifikasi dan Monitoring
Langkah 7.1 Restart Layanan
Nyalakan kembali aplikasi Anda menggunakan process manager seperti PM2.
pm2 start npm –name “aplikasi-saya” — start
Pantau log aplikasi secara real-time untuk memastikan tidak ada error aneh.
pm2 logs
Langkah 7.2 Pemindaian Akhir dengan Rootkit Hunter
Instal pemindai rootkit untuk melakukan pengecekan terakhir terhadap integritas sistem operasi.
- Instal rkhunter.sudo apt install rkhunter -y
- Update database definisi rootkit.sudo rkhunter –propupd
- Jalankan pemindaian sistem.sudo rkhunter –check
Langkah 7.3 Pembukaan Firewall Bertahap
Setelah Anda yakin sistem bersih, buka kembali port HTTP/HTTPS di firewall, namun tetap pertahankan blokir pada lalu lintas yang tidak perlu.
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw delete deny outgoing (Lakukan ini hanya jika aplikasi Anda benar-benar macet karena blokir keluar, namun lebih baik jika Anda hanya mengizinkan IP tujuan tertentu saja).
Kesimpulan
Kerentanan React2Shell sangat berbahaya karena memberikan akses langsung ke “jantung” server aplikasi Anda. Dengan mengikuti panduan ini, Anda telah menghentikan pendarahan, menghapus akses penyerang, dan menambal celah masuknya.
Namun, perlu diingat sebuah prinsip keamanan utama; satu-satunya cara untuk menjamin 100% bahwa sistem benar-benar bersih setelah penyusupan level root adalah dengan membangun ulang server dari awal. Jika server ini menangani data pengguna yang sensitif atau transaksi keuangan, sangat disarankan untuk melakukan provisioning server baru yang segar, menerapkan patch kode di sana, memindahkan data, dan kemudian menghancurkan server lama yang telah terinfeksi ini sepenuhnya.






