Kenapa Tiga Library Populer Ini Hampir Kena Malware npm?
Tiga library npm, termasuk Zod, kena commit jahat September 2026. Loader-nya dikendalikan lewat smart contract Ethereum, tetapi npm memblokirnya sebelum terbit.
Bayangkan kamu menjalankan perintah npm install pada pagi hari yang biasa, lalu tanpa sadar komputermu sudah mengunduh kode jahat dari sebuah smart contract Ethereum. Tidak ada peringatan, tidak ada error, semuanya terlihat normal. Itulah skenario yang hampir menimpa jutaan developer minggu ini.
Pada 12 Oktober 2026, GitHub merilis advisory keamanan yang mengungkap tiga repositori publik disusupi commit berbahaya: colinhacks/zod, nubjs/nub, dan standard-schema/standard-schema. Salah satunya adalah Zod, library validasi yang dipakai hampir setiap proyek JavaScript modern. Kabar ini langsung melesat ke halaman depan Hacker News dengan puluhan poin dan ratusan komentar.

Kabar baiknya: malware ini tidak pernah sampai ke komputermu. Kabar menariknya: cara ia hampir lolos, dan cara ia akhirnya dicegat, menandai perubahan besar dalam keamanan ekosistem npm. Mari bedah satu per satu.
Apa yang Sebenarnya Terjadi
Semuanya bermula dari tiga commit yang muncul pada 21 September 2026, dalam rentang kurang dari satu jam. Ketiganya memakai pesan commit yang sama persis: Fix bugs and improve performance. Pesan yang terdengar sangat biasa, sampai tidak ada yang curiga.
Di repo Zod, commit d821685 menambahkan file jahat yang disamarkan sebagai packages/zod/meta.test.mjs dan packages/mini/meta.test.mjs. Namanya sengaja dibuat mirip file test, sehingga lolos dari pandangan sekilas saat review. Pola yang sama muncul di standard-schema lewat file meta.mjs dan packages/utils/meta.mjs.
Di repo nub, penyerang lebih berani. Mereka mengganti skrip instalasi yang sudah ada dengan file npm/nub/preinstall.js, lalu mengonfigurasinya agar berjalan otomatis lewat lifecycle hook preinstall milik npm. Artinya, setiap orang yang memasang paket itu akan mengeksekusi kode jahat tepat saat instalasi berlangsung.
Fakta bahwa tiga repo diserang dalam waktu hampir bersamaan dengan pesan commit yang identik menunjukkan ini bukan kebetulan. Ini kampanye terkoordinasi, dan polanya mengarah ke gelombang serangan Shai-Hulud yang sudah menghantui npm sejak Agustus 2026.
Cara Kerja Loader Jahat Ini
File jahat ini bukan malware lengkap. Ia adalah loader tahap pertama, alias pengantar yang tugasnya cuma satu: mengambil dan menjalankan muatan asli dari server penyerang. Desainnya licik karena alamat server tujuan tidak ditulis langsung di dalam kode.
Begini alurnya menurut advisory GitHub. Pertama, loader menghubungi layanan RPC Ethereum publik seperti eth.llamarpc.com atau cloudflare-eth.com. Layanan ini adalah infrastruktur umum yang sah, jadi trafiknya tidak mencurigakan. Lalu ia menanyakan sebuah smart contract dengan alamat tetap: di mana saya harus mengambil muatan berikutnya.
Smart contract itu mengembalikan sebuah domain, dan loader mengunduh JavaScript dari sana. Kode yang diunduh dieksekusi dengan izin penuh proses instalasi, lalu loader menghapus file sementaranya untuk menghilangkan jejak. Karena alamat tujuan disimpan di blockchain, penyerang bisa mengganti server kapan pun tanpa merilis versi paket baru.

Teknik ini bukan hal baru. Pada awal Oktober 2026, SDK Tensorlake disusupi dengan pola yang sama: malware menyelesaikan alamat server lewat kontrak Ethereum, lalu mencuri token npm, token GitHub, kredensial AWS, kunci SSH, sampai file konfigurasi AI coding assistant. Pola Shai-Hulud memang gemar memakai blockchain sebagai buku telepon yang sulit diblokir.
Satu detail menarik dari investigasi: respons server yang tertangkap saat itu hanya mencetak teks game over. Tidak aktif, tetapi tidak ada yang tahu apa yang dikembalikan server sebelum atau sesudah momen itu tertangkap.
Kenapa Malware-nya Gagal Menyebar
Di sinilah ceritanya berubah. Dari tiga repo yang disusupi, hanya @nubjs/nub versi 0.9.4 yang sempat masuk ke pipeline publikasi npm. Dan di sanalah ia tertangkap.
npm kini menjalankan pemindaian malware pada waktu publikasi. Versi yang baru disubmit tidak langsung tersedia untuk dipasang, melainkan ditahan dulu untuk divalidasi. Pemindaian statis npm mendeteksi paket nub yang jahat, mengklasifikasikannya sebagai risiko High, dan memblokirnya sebelum tersedia di registry publik. Commit jahat di Zod dan standard-schema bahkan tidak pernah mencapai pipeline publikasi.
GitHub menyebut ini pergeseran penting: dari pola lama publish, detect, and remove menjadi scan, assess, and prevent. Dulu, paket jahat terbit dulu lalu ditakedown setelah ada laporan. Sekarang, paket jahat dicegat sebelum sempat terbit.
Ada juga faktor keberuntungan. Di repo Zod, para komentator Hacker News mencatat commit jahat itu dikembalikan lewat revert sebelum rilis GitHub dibuat. Tetapi keberuntungan bukan strategi keamanan, dan npm tampaknya sadar betul soal itu.
Apa Artinya Buat Kamu
Kalau kamu developer JavaScript, pelajaran terbesarnya sederhana: rantai pasok software sudah jadi medan perang. Serangan tidak lagi menyasar server produksi secara langsung, melainkan laptop developer dan pipeline CI lewat paket yang kamu pasang setiap hari.
Yang bisa kamu lakukan sekarang: kunci versi dependensi dengan lockfile dan jangan asal naik versi tanpa baca changelog, aktifkan 2FA di akun npm dan GitHub kamu, serta waspadai paket yang tiba-tiba meminta izin aneh saat instalasi. Untuk tim, pemindai dependensi otomatis bisa jadi lapisan pertahanan tambahan.
Satu hal terakhir yang patut dicatat: insiden ini membuktikan pertahanan berlapis bekerja. Review komunitas menemukan commit-nya, pemindaian npm memblokir publikasinya, dan advisory GitHub mendokumentasikannya untuk semua orang. Kalau kamu penasaran dengan eksperimen keamanan dan tooling lain yang saya kerjakan, mampir ke /projects untuk melihat daftarnya.

Dimas Febriyanto
Fullstack & Mobile Developer specializing in Golang & Flutter. Aktif sebagai Junior Mobile Developer di Sagara Technology & asisten lab di Universitas Gunadarma. Passionate about building scalable algorithms & high-impact applications.
Lihat Portofolio