1 poin oleh GN⁺ 2025-09-10 | 1 komentar | Bagikan ke WhatsApp
  • Serangan rantai pasok yang baru-baru ini terjadi di ekosistem paket NPM sebenarnya berpotensi menimbulkan kerusakan yang jauh lebih besar
  • Penyerang menyalahgunakan pustaka populer, tetapi hanya menggunakan malware untuk mengubah alamat dompet kripto
  • Serangan ini dilakukan dengan mencuri informasi autentikasi dua faktor pengembang melalui email phishing yang sangat canggih
  • Jika digunakan dalam bentuk yang lebih mematikan (misalnya pencurian API key), ada potensi kerugian yang sangat besar
  • Hal ini menekankan pentingnya memahami bahwa semua dependensi berpotensi berisiko dan pentingnya memahami seluruh pohon dependensi

Gambaran serangan dan kekhawatiran

  • Baru-baru ini, paket populer di NPM, salah satu ekosistem paket terbesar, terekspos serangan
    • Contoh fungsi: pemrosesan warna terminal, pemetaan nama warna-RGB, dekorator debugging fungsi, utilitas untuk memeriksa nilai mirip array, dan lain-lain
  • Dependensi umum seperti ini digunakan sangat luas, dan begitu kode masuk, besar kemungkinan langsung diterapkan ke lingkungan produksi
  • Jika serangan itu menyertakan proxy berbahaya, pencurian API key, atau serangan serius lainnya, ada risiko akibatnya akan jauh lebih parah
  • Dalam kejadian sebenarnya, malware tersebut hanya memanipulasi alamat pembayaran kripto di dompet online (misalnya MetaMask)

Kecanggihan serangan phishing

  • Titik awal serangan ini adalah email phishing yang dibuat dengan sangat baik
    • Menggunakan nama pengguna NPM untuk memberi kesan personal
    • Membangun kepercayaan dengan pesan yang meminta "mengubah kata sandi dan kredensial autentikasi dua faktor demi keamanan"
    • Disusun dengan isi yang mudah menipu pengguna biasa, selaras dengan cara operasi NPM yang cukup khas
    • Menyebutkan tenggat waktu tertentu untuk menciptakan urgensi, mendorong klik pada tautan phishing saat korban sedang sibuk dan lengah
    • Menggunakan domain .help yang mirip dengan domain resmi NPM
  • Bagian yang paling menonjol hanyalah penggunaan "npmjs.help" alih-alih domain resmi
    • Saat ini berbagai gTLD (Generic Top Level Domain) baru banyak digunakan untuk blog maupun dokumentasi, sehingga ini pun bisa tampak wajar

Potensi dampak serangan

  • Email phishing tersebut memungkinkan penyerang mencuri informasi autentikasi dua faktor pengguna, lalu menyisipkan kode serangan dan merilis paket baru
  • Pustaka perwakilan yang sangat luas penggunaannya seperti is-arrayish, color-string, color-name menjadi sasaran
    • Jika malware diperluas bukan hanya untuk pembajakan kripto sederhana, tetapi juga pencurian API key, dampaknya bisa sangat fatal
    • Misalnya, kebocoran massal API key OpenAI atau AWS dapat menyebabkan kerusakan jangka panjang dalam skala besar
  • Pada kenyataannya, sebagian besar pustaka yang terinfeksi terutama digunakan di alat baris perintah, sehingga tujuan pencurian kripto menjadi lebih terbatas

Menargetkan ekosistem Web3 dan strategi penyerang

  • Serangan kali ini tampaknya terutama menargetkan pengguna Web3 (misalnya pembayaran melalui browser)
    • Dengan menyerang pustaka umum yang tidak terkait langsung dengan Web3, penyerang menghindari kemungkinan deteksi dan pemblokiran cepat oleh ekosistem Web3
    • Misalnya, walaupun pustaka yang terhubung dengan MetaMask diperiksa dengan cermat, sulit membayangkan serangan akan muncul dari utilitas terkait warna teks

Pelajaran bagi ekosistem pengembang

  • Kasus ini menegaskan bahwa semua paket dependensi pada praktiknya bisa bersifat berbahaya
    • Ada batasan realistis untuk selalu mengendalikan atau memantau seluruh pohon dependensi sepenuhnya
    • Ini menunjukkan bahwa di tengah alur deployment ke produksi yang cepat dan tekanan waktu, peninjauan keamanan mudah terdorong ke belakang
  • Ke depan, pentingnya memahami komposisi dependensi proyek secara menyeluruh dan mengelolanya dengan hati-hati akan semakin besar

Penutup dan panduan

  • Isi ini tidak dimaksudkan untuk menyalahkan atau membebankan tanggung jawab kepada pihak tertentu, dan penting untuk menyadari bahwa siapa pun dapat terekspos serangan phishing
  • Situasi bisa berubah setelah posting ini dipublikasikan, jadi jika ada kekeliruan atau pertanyaan tentang isi, perlu dilakukan verifikasi langsung

Tags:

1 komentar

 
GN⁺ 2025-09-10
Komentar Hacker News
  • Serangan rantai pasok nx npm adalah peluru yang gagal dihindari banyak perusahaan; cukup dengan memasang plugin nx untuk VS Code, ia otomatis memeriksa versi nx terbaru di npm, dan jika ada informasi autentikasi penting di sesi Github (misalnya login akun perusahaan lewat GH CLI) atau file .env, semuanya bisa bocor. Ini bukan sesuatu yang bisa dihindari hanya dengan mengelola pin dependensi atau pembaruan keamanan dengan baik. Ekosistem ini pada dasarnya butuh perubahan yang lebih mendalam. Untuk detail, lihat pengumuman keamanan resmi

    • Saya menghindari semua hal terkait NPM. Satu-satunya pengecualian adalah typescript compiler, tetapi kalau nanti ditulis ulang dalam Go, saya juga berencana menyingkirkannya. Dalam kasus Go, ada fitur penentuan versi minimum, dan yang diunduh sama sekali tidak dijalankan selama proses kompilasi, itu sangat unggul. Dalam kasus NPM, sumbernya sering berbeda dari github dan menurut saya tidak dapat dipercaya.
    • Ekstensi editor adalah target serangan yang sangat menarik karena bisa terpasang dan diperbarui otomatis di lingkungan pengembangan berisiko tinggi. Saya heran kenapa belum ada aksi pembelian massal oleh pihak jahat seperti yang terjadi pada ekstensi browser. Saya dengar tim VSCode sangat berupaya mendeteksi malware, tetapi saya penasaran apakah semua editor seperti Sublime juga punya proses verifikasi semacam ini.
    • Saya menyimpan semua paket dan database secara lokal, dan bekerja dalam mode pesawat di mesin pengembangan. Saya hanya menyalakan koneksi internet saat git push.
  • Kita benar-benar nyaris celaka. Sulit dipercaya bahwa penyerang yang mendapatkan akses ke paket seperti ini hanya mengunggah satu alat pencuri kripto sederhana. Kalau itu kesempatan emas, rasanya lebih menguntungkan untuk investasi tambahan sekitar seminggu dan menanam exploit yang lebih canggih: kunci API, menambahkan kunci publik SSH, membocorkan IP server, profil browser atau token sesi di perangkat pengembang, bahkan informasi kartu Amazon di desktop saya. Ada terlalu banyak hal yang bisa dicuri. Bahkan kalau tidak dipakai sendiri, semua itu bisa dengan mudah dijual di forum dark web. Saya jadi penasaran apakah para penjahat siber yang benar-benar kompeten sudah bekerja di perusahaan teknologi yang stabil dan bergaji tinggi, sehingga yang tersisa hanya serangan sederhana seperti ini.

    • Karena metode serangan ini pasti akan cepat ketahuan, tampaknya mereka memilih strategi bukan yang diam-diam, melainkan pengambilalihan akun sepenuhnya, yaitu strategi "pukul lalu kabur". Mereka butuh cara yang bisa secara otomatis menghasilkan uang paling banyak dalam hitungan jam, dan kripto adalah jawaban yang jelas. Kalau bukan backdoor yang tetap tidak akan ketahuan bahkan ketika setengah dunia membedah kodenya, tidak ada alasan untuk mempersiapkan lebih lama.
    • Kripto yang dicuri tidak bisa dibatalkan transaksinya, tidak bisa direfund, dan tidak bisa dipulihkan, jadi secara realistis itu adalah aset yang pasti bisa dipegang. Sebaliknya, API atau kunci SSH milik developer hampir tidak bernilai, dan kalau pun beruntung, pada akhirnya untuk mencairkannya tetap akan ditukar menjadi kripto.
    • Masuk cepat, mencuri ratusan ribu dolar, keluar, lalu beberapa bulan kemudian mengulang hal yang sama; kalau bisa menghindari polisi dengan baik, orang bisa hidup tanpa khawatir seumur hidup. Bahkan mencuri kunci AWS juga tidak terlalu menguntungkan. Ada juga penjahat yang memburu password atau database password manager selain kripto, tetapi pada akhirnya mereka sering tetap menargetkan situs terkait kripto. Bahkan sekarang pun pasti ada penjahat yang dengan cermat menunggu waktu yang tepat untuk menyusup ke perusahaan, dan mereka akan bersembunyi sampai berhasil tanpa terungkap.
    • Ini bukan peluang sekali seumur hidup. Ke depan, para penjahat akan sadar bahwa hanya dengan menargetkan beberapa "developer" saja, mereka bisa dengan mudah mengakses jutaan dolar, dan metode yang lebih berani akan terus muncul. Kalau Anda maintainer open source, ini sudah sampai level di mana Anda harus benar-benar memikirkan seberapa baik Anda menyembunyikan identitas fisik Anda di internet.
  • Kebiasaan menunda itu adalah teknik bertahan hidup saya. Karena saya menunggu sampai orang lain selesai beta testing, dulu di kantor saya memakai Microsoft Office 2000 selama 12 tahun, dan menikmati 10 tahun yang damai tanpa masalah akibat upgrade atau pelatihan ulang. Dan saya punya kebiasaan untuk tidak pernah mengklik tautan dalam email.

    • Mobil Honda saya dan Kubernetes juga seperti itu. Karena saya mempertahankan mobil keluaran 2006 untuk waktu yang lama, saya bisa melewati berbagai masalah besar dan kecil integrasi mobil-ponsel lintas generasi, dan baru belakangan ini koneksi iPhone di mobil keluaran 2023 terasa sangat mulus. Kubernetes juga sama; berkat menunda saran atasan untuk waktu lama, baru sekarang saya bermigrasi saat EKS, GKE, dan lainnya sudah cukup matang, sehingga penderitaan migrasinya jauh berkurang. Kalau saya langsung ikut 6~7 tahun lalu, rasanya saya akan banyak buang waktu percuma.
    • Di ekosistem npm, kalau Anda tidak update setiap 54 detik, Anda sudah tertinggal jauh.
    • Ini memang efektif terhadap paket berbahaya yang baru, tetapi tidak selalu berhasil jika software yang sudah terinfeksi juga terkena worm.
    • Saya akan balas besok.
    • "Versi baru secara default ditunda penggunaannya selama 2 minggu" adalah pertahanan yang sangat efektif terhadap serangan rantai pasok.
  • Untuk startup kecil mungkin sulit, tetapi menurut saya pemain besar seperti npm seharusnya menguasai semua versi TLD dari domain npm seperti "npm.io", "npm.sh", "npm.help", dan seterusnya. Fakta bahwa penyerang menguasai domain "npm.help" membuat serangan ini jauh lebih efektif.

    • Seperti AWS yang menyuruh pelanggan waspada terhadap phishing, tetapi lalu mengganti alamat email penagihan resmi dari no-reply-aws@amazon.com menjadi no-reply@tax-and-invoicing.us-east-1.amazonaws.com. Karena alamat itu terlihat asing, hampir tampak seperti email phishing, tetapi katanya resmi, jadi membingungkan. Bahkan email pemberitahuan sebelumnya juga terlihat seperti phishing, sehingga sampai benar-benar menerima tagihan, saya tetap curiga dan tidak membuka lampiran PDF-nya. Perusahaan memperingatkan pelanggan agar hati-hati terhadap phishing sambil sekaligus melakukan hal-hal yang menimbulkan kebingungan yang tidak perlu.
    • Ada lebih dari 1.500 TLD, dan meskipun sebagian bersifat terbatas atau merupakan kode negara, saya jadi penasaran berapa sebenarnya biaya tahunan untuk mendaftarkan semuanya. Mungkin ada juga layanan SaaS yang mengurus ini.
    • Kalau melihat daftar TLD, domainnya terlalu banyak. Bahkan untuk perusahaan besar, meskipun upaya mengambil semua TLD serupa untuk mencegah phishing mungkin perlu, saya rasa itu tetap tidak bisa memblokir semuanya secara sempurna.
    • Hal pertama adalah selalu memeriksa apakah itu benar-benar domain resmi. Domain dari registrar diskon yang baru didaftarkan, atau domain yang masa berlakunya tinggal sedikit, selalu saya curigai. Terutama jika tautannya juga menekankan tenggat atau membuat orang tertekan dengan kesan 'tidak ada waktu', saya akan menyelidikinya lebih dalam. Menurut saya komunikasi resmi seharusnya hanya menggunakan domain utama yang terkenal (atau subdomainnya).
    • Penamaan domain npm dan yang mirip-mirip punya variasi tanpa akhir, jadi secara praktis mustahil dicegah hanya dengan strategi memborong semuanya. Dari nama domainnya saja mungkin sudah tampak seperti phishing, tetapi kenyataannya domain seperti npmjs.help tetap bisa diklik orang secara tidak sengaja.
  • Bagaimana jika seseorang menggabungkan kecermatan ekstrem (gaya Jia Tan) dengan lemahnya keamanan kita sendiri (plugin editor, shell userland, dan sebagainya)? Alat-alat terkait developer berjalan dengan hak superuser tetapi justru paling sedikit diverifikasi. Saya juga tidak sanggup memverifikasi satu per satu elisp, neovim, vscode, sampai alat userland sederhana; best case-nya paling hanya jika saya mengambilnya dari nixpkgs. Tinggal buat satu plugin VSCode yang lebih baik suatu hari nanti, tunggu 1~2 tahun, selesai. GG.

    • Semoga suatu hari ada yang benar-benar menyelesaikan isu xkcd 1200.
  • Wallet seperti MetaMask memang menjadi target, tetapi saya dengar MetaMask terlindungi cukup baik dari serangan semacam ini berkat modul isolasi bernama LavaMoat. Saya benar-benar ingin melihat tulisan analisis mendetail tentang seberapa besar perlindungan nyatanya. Saya pribadi tidak terkait dengan MetaMask, tetapi saya penasaran seefektif apa langkah respons keamanan seperti ini, yang penerapannya lebih lambat dibanding serangan nyata. Sebagai referensi, saya tambahkan artikel terkait.

  • Terhadap pernyataan "yang benar adalah pada akhirnya kita semua akan kena serangan phishing seperti ini suatu saat nanti", saya pribadi merasa mungkin tidak. Saya punya kebiasaan untuk tidak pernah memasukkan informasi autentikasi melalui tautan di email yang tidak pernah saya minta sendiri sebelumnya (misalnya reset password, dan sebagainya). Menurut saya ini adalah keterampilan keamanan yang wajib dikuasai semua orang pada 2025.

    • Ungkapan "phishing 'seperti ini'" membuatnya terdengar seperti serangan canggih, padahal sebenarnya ini hanyalah kasus developer yang lagi-lagi tertipu email phishing yang sangat biasa. Ini kesalahan yang sangat mendasar, bahkan kadang di level yang mungkin tidak akan menipu staf administrasi sekalipun. Tentu siapa pun bisa melakukan kesalahan, tetapi saya rasa kecerobohan yang jelas dan kesalahan amatiran seperti inilah yang membuat hal semacam ini terus berulang.
  • Berbeda dengan penjelasan artikel yang mengatakan "semua malware hanya mengganti alamat wallet kripto", alasan MetaMask tidak terdampak adalah karena:

  1. pada saat serangan, paket tersebut tidak langsung diperbarui
  2. MetaMask dilindungi oleh LavaMoat baik pada tahap instalasi maupun tahap eksekusi. Sementara itu, payload berbahaya ini mencoba menargetkan halaman web yang digunakan wallet lain yang berinteraksi dengan MetaMask. Sebagai referensi, saya ikut berkontribusi dalam pengembangan LavaMoat. Untuk detail lebih lanjut, lihat GitHub LavaMoat
  • Repositori paket open source besar butuh solusi keamanan yang jauh lebih kuat, atau setidaknya harus ada kumpulan paket inti yang tepercaya dan telah ditinjau. Ekosistem Python, Rust, dan lainnya juga sama, semuanya pada dasarnya berjalan di atas kepercayaan.

    • Masalah mendasar npm adalah tidak adanya kewajiban namespace. Para pemula di Maven Java sering mengeluh "kenapa tidak semudah npm", tetapi seiring waktu saya justru semakin menghargai obsesi Maven terhadap kontrol kualitas seperti sistem namespace-nya. Memang POM xml tidak nyaman, tetapi pengelolaan perubahan yang konservatif memberi rasa percaya. Artikel terkait: Mengapa namespace penting dalam repositori open source publik
    • Dalam kasus seperti ini, ketika akun maintainer paket itu sendiri dibajak, solusi struktural seperti namespace pun tidak ada gunanya. Satu-satunya solusi hanyalah membuat rilisan baru tidak langsung diterapkan, melainkan ditunda dulu.
    • Distribusi Linux juga berbasis kepercayaan, tetapi untuk mendapatkan hak mengunggah paket, seseorang harus 'membuktikan' kepercayaannya, dan ada seluruh sistem verifikasi kepercayaan. NPM terasa seperti sistem bebas tempat siapa pun bisa mengunggah apa saja.
  • Klaim bahwa "ini tidak bisa dicegah" justru hanya muncul di ekosistem yang paling sering dibobol.

    • Tepat itulah masalahnya. Itu kesimpulan yang terlalu malas.