- Ratusan paket npm disusupi oleh worm yang mereplikasi diri yang dijuluki Shai-Hulud, dengan GitHub menghapus 500+ versi yang tercemar.
- Malware tersebut mencuri rahasia (token npm, GitHub PAT, kunci cloud) dan menerbitkan ulang paket yang terinfeksi menggunakan hak penerbitan korban.
- Bukti mengarah pada penargetan Linux dan macOS, penyalahgunaan TruffleHog, dan alur kerja GitHub Actions yang mencuri data.
- Langkah segera: rotasi token, audit dependensi dan repo GitHub, terapkan MFA/2FA, dan cari IoC termasuk lalu lintas bundle.js dan webhook.site.

Apa yang awalnya merupakan ancaman rantai pasokan baru di dunia JavaScript telah meningkat menjadi insiden besar yang memengaruhi ekosistem NPM. Laporan dari berbagai sumber mengonfirmasi adanya strain malware yang dapat menyebar sendiri, dilacak sebagai Shai‑Hulud, yang membahayakan kredensial pengembang, mengekspos kode, dan menerbitkan ulang paket yang tercemar agar infeksi terus berlanjut.
Meskipun jumlahnya berbeda-beda berdasarkan sumbernya, konsensusnya jelas: kita sedang berhadapan dengan ratusan pelepasan racun, termasuk pustaka yang banyak digunakan dan diunduh jutaan kali per minggu. GitHub menghapus lebih dari 500 versi yang disusupi untuk membendung penyebarannya, dan tim keamanan di seluruh dunia mendesak para pengembang untuk merotasi kredensial dan menyisir repositori serta pipeline mereka untuk mencari petunjuk intrusi.
Apa yang terjadi dan mengapa itu penting
Investigasi menunjukkan operasi tersebut kemungkinan dimulai dengan pemancingan pengumpulan kredensial spoofing npm, mendorong pengelola untuk "memperbarui" pengaturan MFA. Dengan akses di tangan, pelaku ancaman menyebarkan worm yang berjalan setelah instalasi, memburu rahasia, dan menerbitkan ulang build yang terinfeksi dengan identitas korban—mengubah pengelola tepercaya menjadi penguat serangan.
Shai‑Hulud menggabungkan dua ide berbahaya: propagasi otomatis dan pencurian rahasiaMereka menyalahgunakan token NPM yang dicuri untuk menerbitkan versi baru paket dan memanfaatkan token GitHub serta kunci cloud (AWS, GCP, Azure) untuk bergerak secara lateral dan mengekstrak data. Kombinasi ini meningkatkan radius serangan, memungkinkan satu kompromi berdampak ke banyak pengguna hilir.
Target tampaknya condong ke sistem mirip Unix. Analisis mencatat bahwa sebagian besar logika jahat dijalankan di Linux dan macOS, berdasarkan pemeriksaan lingkungan, meskipun fase penemuan rahasia (terutama dengan TruffleHog) dapat terjadi lebih luas. Fokus tersebut mempersempit jangkauan worm tersebut, tetapi masih menyisakan banyak mesin pengembang yang terekspos.
Paket-paket dari beberapa organisasi terkemuka terdampak, begitu pula modul-modul komunitas populer. Dalam salah satu contoh yang menonjol, @ctrl/warna kecil Paket—yang diunduh jutaan kali setiap minggu—ditarik ke dalam keributan, menunjukkan seberapa dalam infeksi dapat menyusup ke dalam grafik ketergantungan.
Cara kerja cacing (uraian teknis)
Muatan inti dikirim sebagai file JavaScript yang besar, yang umumnya diberi nama bundel.js (lebih dari 3 MB dalam sampel yang diamati). Kode berbahaya ini dijalankan melalui hook postinstall yang ditambahkan ke package.json, yang berarti kode berbahaya tersebut berjalan otomatis tepat setelah pengguna menginstal paket dari npm.
Di dalam bundle.js ada modul untuk Interaksi API GitHub, SDK cloud (AWS/GCP), pembantu jaringan, dan rutin untuk menjalankan TruffleHog guna menemukan rahasia. Skrip ini menginventarisasi OS, menemukan token npm, dan memeriksa token GitHub yang valid; jika tidak ditemukan, skrip akan berhenti—jika tidak, eksfiltrasi dan replikasi akan dimulai.
Keanehan yang perlu diperhatikan: beberapa paket yang terinfeksi berisi arsip bernama paket.tar alih-alih konvensi penamaan yang biasa, sebuah tanda yang membantu peneliti menandai artefak yang disusupi. Analis juga mengamati varian yang dijalankan sebagai hook pra-instal; salah satu kasus awal yang dikutip adalah ngx‑bootstrap 18.1.4, yang mungkin berfungsi sebagai titik awal penyebarannya.
Setelah berjalan, malware tersebut menghitung paket-paket yang paling banyak diunduh oleh pengembang melalui API pencarian npm, membongkar setiap tarball, membuang bundle.js, menyuntikkan perintah postinstall, meningkatkan versi, dan menerbitkan ulang ke npm dengan token korban. Hal ini mengubah portofolio pengembang menjadi wadah untuk infeksi lebih lanjut.
Eksfiltrasi rahasia dan alur kerja GitHub
Untuk pengumpulan kredensial, Shai‑Hulud memindai token npm, Token Akses Pribadi GitHub, dan kunci API cloud (AWS, GCP, Azure). Kemudian, malware ini membuat repo GitHub publik bernama 'Shai‑Hulud' di bawah akun korban, dan mengirimkan berkas data (misalnya, data.json) berisi rahasia yang dicuri—yang secara efektif mengeksposnya ke dunia.
Secara paralel, para peneliti mengamati sudut pandang GitHub Actions yang licik: cacing membuat cabang bernama 'shai‑hulud' di seluruh repositori yang dapat diakses dan mendorong file alur kerja (shai‑hulud‑workflow.yml). Dipicu saat dorongan, alur kerja mengumpulkan rahasia dan mengirimkannya ke infrastruktur penyerang, terkadang setelah pengkodean Base64 ganda untuk mengaburkan konten saat dikirim.
Ada juga bukti skrip migrasi yang kloning repositori pribadi/internal dari organisasi yang dapat diakses korban, dan menghosting ulang mereka di akun pengguna sebagai mirror publik. Tujuannya tampaknya adalah pencurian kode sumber otomatis dari proyek pribadi, yang meningkatkan tekanan pada organisasi terdampak.
Beberapa laporan mencatat artefak bantuan AI dalam skrip bash (komentar dan bahkan emoji), yang menunjukkan penyerang mungkin telah menggunakan LLM untuk mempercepat pembangunan komponen otomatisasi malware.
Cakupan dan paket penting
Melalui penghapusan terkoordinasi, GitHub menghapus 500+ versi yang dikompromikan untuk menghentikan penyebaran worm. Meskipun jumlah pastinya terus bertambah, daftarnya mencakup berbagai ekosistem dan organisasi, dengan dampak hilir bagi pengembang yang memperbarui selama periode aktif.
Di antara paket dan namespace yang sering dikutip: @ctrl/warna kecil (jutaan unduhan mingguan), beberapa @crowdstrike/* komponen (seperti commitlint dan pustaka UI), dan beragam modul komunitas termasuk ngx‑bootstrap, unggah‑file‑ng2, ngx‑toastr, dan banyak lagi. CrowdStrike mengindikasikan bahwa platform intinya tetap tidak terpengaruh dan kunci diputar dengan cepat setelah mendeteksi entri berbahaya dalam registri publik.
- Contoh yang terkait dengan gelombang: @ctrl/tinycolor; @crowdstrike/commitlint; @crowdstrike/foundry‑js; @crowdstrike/glide‑core; ngx‑bootstrap; ng2‑file‑upload; ngx‑toastr; @nativescript‑community/*; @teselagen/*; @things‑factory/*; dan lainnya.
- Para peneliti juga melihat beberapa versi berbahaya per paket dalam beberapa kasus—kemungkinan karena worm tersebut menyebar melalui beberapa akun pengelola dalam proyek yang sama.
Respons platform dan perubahan keamanan
Tindakan langsung GitHub meliputi membersihkan paket-paket buruk yang diketahui dari npm dan memblokir unggahan yang sesuai dengan Indikator Kompromi (IoC). Perusahaan juga meluncurkan kontrol penerbitan yang lebih ketat: 2FA wajib untuk penerbitan lokal, token granular berumur pendek (misalnya, tujuh hari), dan adopsi yang lebih luas Penerbitan Tepercaya untuk mengurangi ketergantungan pada rahasia yang berumur panjang.
Perubahan yang akan datang akan menghentikan penggunaan token klasik lama dan 2FA berbasis TOTP untuk penerbitan, default untuk melarang penerbitan token, dan memperluas penyedia untuk Penerbitan Tepercaya. GitHub telah mengisyaratkan peluncuran bertahap dengan dokumentasi dan panduan migrasi, menyadari bahwa beberapa alur kerja perlu disesuaikan.
Tim intelijen ancaman dan respons insiden di seluruh industri (termasuk Unit 42, Kaspersky, Trend Micro, dan lainnya) telah mengeluarkan panduan dan deteksi sambil berbagi IoC dengan rekan dan aliansi untuk mempercepat pembaruan perlindungan.
Cara mengurangi risiko sekarang juga
Bergerak cepat dengan asumsi bahwa mesin pengembang mana pun yang baru saja menginstal paket npm mungkin telah membocorkan rahasia. Prioritasnya adalah mengandung penyalahgunaan kredensial, hentikan persistensi, dan hilangkan dependensi yang tercemar dari rantai build.
- Putar token npm, GitHub PAT/kunci SSH, dan kredensial cloud (AWS/GCP/Azure) segera; anggap semua rahasia yang ada di host pengembang telah dikompromikan.
- Audit dependensi melalui package‑lock.json/yarn.lock; hapus atau sematkan dari versi yang diketahui telah disusupi; instal ulang dari sumber yang bersih.
- Terapkan MFA/2FA di seluruh GitHub dan npm; pindahlah ke Trusted Publishing jika memungkinkan untuk memutus token berumur panjang dari loop.
- Periksa GitHub untuk repo publik tak terduga bernama 'Shai‑Hulud', cabang atau alur kerja yang tidak dikenal, dan menjalankan Tindakan yang tidak lazim.
- Perkuat CI/CD dengan RBAC dengan hak istimewa paling rendah, penandatanganan/verifikasi artefak, dan pemindaian SCA berkelanjutan; perlakukan konsumsi sumber terbuka sebagai risiko yang dikelola.
Tips perburuan ancaman (pemeriksaan sinyal tinggi)
Cari koneksi keluar ke webhook.situs domain, terutama URI yang diamati dalam beberapa laporan. Pada titik akhir, cari keberadaan bundel.js di direktori sementara atau paket dan untuk file GitHub Actions bernama shai‑hulud‑workflow.yml.
- Telemetri jaringan: Log DNS/URL yang berisi webhook.site; tandai jalur spesifik bb8ca5f6‑4175‑45d2‑b042‑fc9ebb8170b7 jika dilihat.
- Telemetri berkas: pembuatan atau eksekusi bundle.js; keberadaan shai‑hulud‑workflow.yml pada host pengembang Linux/macOS.
- Telemetri proses: Panggilan TruffleHog jika tidak diharapkan (perhatikan penggunaan yang sah mungkin ada di beberapa organisasi).
Indikator kompromi (IoC)
Petunjuk file dan string yang terlihat di seluruh investigasi meliputi bundel.js dan shai‑hulud‑workflow.yml, dengan string literal 'shai‑hulud' muncul di cabang, repo, dan alur kerja.
- File: bundle.js; shai‑hulud‑workflow.yml
- String: shai‑hulud; paket.tar
- Hashes (selected): 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09; b74caeaa75e077c99f7d44f46daaf9796a3be43ecf24f2a1fd381844669da777; dc67467a39b70d1cd4c1f7f7a459b35058163592f4a9e8fb4dffcbba98ef210c; 4b2399646573bb737c4969563303d8ee2e9ddbd1b271f1ca9e35ea78062538db; C96FBBE010DD4C5BFB801780856EC228; 78E701F42B76CCDE3F2678E548886860
- Jaringan: https://webhook.site/bb8ca5f6-4175-45d2-b042-fc9ebb8170b7 (varian dan subjalur diamati)
Garis waktu dan analisis yang sedang berlangsung
Laporan mengaitkan penemuan awal pada pertengahan September 2025, dengan puncak tindakan penahanan sekitar tanggal 16–19 SeptemberGitHub dan berbagai vendor telah memperbarui perlindungan, deteksi, dan panduannya. Nantikan temuan retroaktif lebih lanjut seiring organisasi menyelesaikan peninjauan insiden dan memperluas daftar versi yang terdampak.
Beberapa bukti menunjukkan bahwa insiden tersebut dibangun berdasarkan kebocoran rahasia sebelumnya, menggarisbawahi bagaimana token berumur panjang dan kredensial yang di-cache dapat memicu gelombang kompromi baru beberapa bulan kemudian. Hal ini akan memperkuat upaya untuk memperpendek masa pakai token dan mengadopsi model penerbitan yang meminimalkan penyebaran rahasia.
Tidak semua laporan sepakat mengenai jumlah pasti atau paket pertama dalam rantai, namun gambaran umumnya sama: cacing npm yang mereplikasi diri yang mempersenjatai kepercayaan pengembang dan mengotomatiskan hak penerbitan untuk meningkatkan skala dengan cepat—lebih cepat daripada yang dapat dideteksi banyak tim melalui peninjauan manual saja.
Peristiwa ini menggambarkan betapa cepatnya alur kerja modern dapat berubah menjadi jalur masuk malware. pengetatan otentikasi, menghapus token berumur panjang dari jalur, memperkuat CI/CD, dan secara agresif memburu IoC, organisasi dapat menahan eksposur saat ini dan membuat gelombang berikutnya jauh lebih sulit untuk dieksekusi.
