Paket npm Berbahaya Hindari Proteksi Install Script dengan Menjalankan Malware Saat Runtime

Kampanye malware yang menargetkan ekosistem npm kembali menunjukkan bahwa mekanisme keamanan pada tahap instalasi belum tentu cukup untuk mencegah serangan software supply chain.
Kampanye yang ditemukan peneliti Checkmarx ini menggunakan paket npm berbahaya bernama indexed-btree, yang dirancang menyerupai library sah sorted-btree. Paket tersebut telah mencapai sekitar 2 juta download per minggu, sehingga berpotensi menjangkau banyak lingkungan pengembangan.
Berbeda dari serangan npm yang mengandalkan preinstall, install, atau postinstall untuk menjalankan malware, indexed-btree menyembunyikan kode berbahaya di dalam fungsi normal library dan baru mengaktifkannya ketika aplikasi menggunakan paket tersebut.
Teknik ini memungkinkan malware melewati sejumlah mekanisme keamanan npm terbaru yang berfokus pada aktivitas saat proses instalasi.
Malware Tidak Menggunakan Install Script
Pada Juni 2026, GitHub mengumumkan sejumlah perubahan keamanan npm untuk menghadapi meningkatnya serangan terhadap rantai pasok software.
Salah satu perubahan penting adalah pemblokiran dependency lifecycle script seperti:
preinstallinstallpostinstall
Script tersebut tidak lagi dapat dijalankan secara bebas dan memerlukan persetujuan eksplisit.
npm juga menerapkan pembatasan terhadap pengambilan dependency secara otomatis dari Git repository atau remote URL tanpa izin.
Namun, indexed-btree menggunakan pendekatan berbeda.
Paket tersebut tidak memerlukan install script untuk menjalankan payload. Sebaliknya, loader malware disisipkan ke dalam fungsi BTree.prototype.set(), yaitu salah satu fungsi utama yang digunakan library tersebut.
Kode berbahaya baru aktif ketika aplikasi menjalankan fungsi tersebut dengan nilai key tertentu.
Dengan demikian, proses instalasi paket dapat terlihat normal dan tidak memicu mekanisme persetujuan yang diterapkan npm versi 12.
Payload Disembunyikan di Fungsi Normal Library
Menurut Checkmarx, malware loader ditempatkan langsung di dalam BTree.prototype.set().
Karena fungsi tersebut merupakan bagian normal dari operasi library dan dapat dipanggil berkali-kali oleh aplikasi, keberadaan kode berbahaya menjadi lebih sulit dibedakan dari fungsi library yang sah.
Pemanggilan tertentu kemudian memicu file sharedLoad.min.js, yang berisi tahap pertama malware dalam bentuk yang telah di-obfuscate.
Teknik tersebut juga dapat menyulitkan sejumlah tool analisis statis karena kode berbahaya tidak muncul sebagai aktivitas instalasi yang mencurigakan.
Dengan kata lain, pemeriksaan terhadap package hanya pada saat npm install tidak selalu dapat mendeteksi aktivitas berbahaya yang baru berjalan ketika aplikasi mulai menggunakan dependency tersebut.
Malware Mengumpulkan Informasi Sistem
Setelah aktif, malware dapat mengumpulkan berbagai informasi mengenai perangkat yang menjalankannya.
Data yang dikumpulkan antara lain:
- Arsitektur sistem
- Hostname
- CPU
- Kapasitas memory
- Uptime sistem
Informasi tersebut kemudian dieksfiltrasi menggunakan channel Slack dan Telegram yang telah ditentukan oleh pelaku.
Selain mengirimkan informasi sistem, malware juga menggunakan mekanisme yang lebih kompleks untuk memperoleh konfigurasi command-and-control (C2).
Ethereum Smart Contract Digunakan untuk C2
Malware tersebut secara berkala melakukan polling terhadap smart contract Ethereum yang berada di jaringan Sepolia testnet.
Smart contract tersebut digunakan untuk menyimpan informasi C2 yang diperlukan malware.
Setelah memperoleh informasi tersebut, malware menggunakan X25519 key exchange untuk menghasilkan kunci AES.
Kunci tersebut kemudian digunakan untuk mendekripsi payload tahap kedua yang disimpan di dalam smart contract.
Penggunaan smart contract sebagai media distribusi informasi C2 membuat infrastruktur serangan menjadi lebih sulit ditangani menggunakan pendekatan pemblokiran domain atau server C2 tradisional.
Malware Dapat Menghapus Jejak
Operator juga menyediakan mekanisme untuk mengakhiri operasi dan menghapus jejak malware.
Ketika serangan dihentikan, malware dapat menghapus file yang dibuatnya sekaligus menghapus trigger berbahaya dari source code paket.
Kemampuan tersebut memungkinkan pelaku membersihkan sebagian artefak serangan setelah operasi selesai.
Teknik self-cleaning seperti ini dapat menyulitkan proses investigasi, terutama jika lingkungan development tidak memiliki logging dan monitoring yang memadai.
Proyek GitHub Dibuat Agar Terlihat Sah
Checkmarx menemukan bahwa pelaku tidak hanya menyamarkan kode malware.
Mereka juga berusaha membuat keseluruhan proyek terlihat seperti proyek open-source yang sah.
Pelaku membuat repository GitHub dengan tampilan yang meyakinkan, mengisi commit history, serta mengelola akun developer agar terlihat kredibel.
Commit history tersebut bahkan dibuat sedemikian rupa agar proyek terlihat seperti library yang telah dikembangkan secara bertahap.
Strategi tersebut dapat meningkatkan kemungkinan developer memilih paket berdasarkan reputasi repository dan aktivitas pengembang tanpa melakukan pemeriksaan lebih mendalam terhadap kode.
Sembilan Paket npm Lain Ikut Terkait
Checkmarx menemukan sembilan paket npm tambahan yang memiliki hubungan dengan operasi yang sama.
Seluruh paket tersebut telah dihapus dari npm. Sebelum dihapus, beberapa di antaranya juga telah memperoleh ratusan ribu hingga jutaan download.
Paket yang ditemukan meliputi:
| Paket | Download |
|---|---|
ordered-kv-index | 448.184 |
btree-leaderboard | 493.685 |
priority-slot-queue | 402.860 |
btree-range-store | 468.092 |
btree-core | 1.951.274 |
btree-time-index | 425.312 |
btree-lru-cache | 372.185 |
neighbor-key-map | 366.019 |
sliding-score-window | 448.024 |
Jumlah download tersebut menunjukkan bagaimana sebuah package yang tampak seperti dependency biasa dapat memperoleh distribusi yang sangat luas sebelum aktivitas berbahayanya diketahui.
Install-Time Scanning Saja Tidak Cukup
Kasus indexed-btree menunjukkan keterbatasan pendekatan keamanan yang hanya berfokus pada proses instalasi dependency.
Jika malware ditempatkan di lifecycle script, sistem dapat mendeteksinya ketika npm install berlangsung.
Namun, jika payload disisipkan ke fungsi library yang sah dan baru aktif ketika aplikasi berjalan, proses instalasi dapat berlangsung tanpa indikasi mencurigakan.
Karena itu, Checkmarx menyarankan developer tidak hanya mengandalkan pemindaian pada saat instalasi, tetapi juga menggunakan runtime behavioral analysis untuk mendeteksi perilaku mencurigakan ketika dependency benar-benar dijalankan.
Pendekatan tersebut dapat membantu mengidentifikasi aktivitas seperti pengumpulan informasi sistem, koneksi ke infrastruktur eksternal, penggunaan channel komunikasi yang tidak biasa, maupun eksekusi payload tambahan.
Developer yang Terlanjur Menginstal Harus Bertindak
Developer yang pernah memasang indexed-btree atau salah satu paket terkait disarankan menganggap lingkungan pengembangan mereka berpotensi telah terkompromi.
Langkah yang direkomendasikan adalah:
- Rotasi seluruh secret dan credential yang mungkin dapat diakses dari lingkungan tersebut.
- Pulihkan development environment menggunakan backup yang diketahui bersih.
- Periksa dependency yang pernah digunakan untuk mencari aktivitas mencurigakan.
- Hindari menjalankan ulang lingkungan yang diduga telah terinfeksi sebelum proses pemeriksaan selesai.
- Terapkan pemantauan perilaku dependency saat aplikasi berjalan, bukan hanya ketika package diinstal.
Serangan ini menjadi pengingat bahwa software supply chain attack tidak selalu harus memanfaatkan script instalasi untuk menjalankan malware.
Dengan menyembunyikan payload di dalam fungsi normal sebuah library, penyerang dapat membuat proses instalasi terlihat bersih dan menunggu sampai dependency benar-benar digunakan oleh aplikasi.
Bagi ekosistem npm yang memiliki jutaan package dan dependency yang saling terhubung, pendekatan tersebut menjadi tantangan keamanan yang semakin penting untuk diperhatikan.
Sumber: Checkmarx








