Shai-Hulud 2.0: Serangan Malware NPM Paling Agresif di 2025
- Dapatkan link
- X
- Aplikasi Lainnya
Sebagai developer yang tiap hari install package dari NPM, ini warning keras buat kita semua. Kalau lo pikir cuma install package biasa aja aman-aman aja, think again.
Apa Sih Shai-Hulud 2.0 Ini?
Jadi gini, Shai-Hulud 2.0 ini bukan malware biasa yang lo kena terus done. Ini malware worm yang bisa self-replicate—artinya sekali dia nginfeksi satu developer, dia otomatis nyebar ke semua package yang developer itu punya akses untuk publish. Bayangin efek domino, tapi versi nightmare.
Serangan ini mulai sekitar 21-23 November 2025, dan peak-nya terdeteksi tanggal 24 November sama berbagai security vendor kayak Endor Labs, Palo Alto Networks, Check Point, sama Datadog. Dan trust me, angkanya bikin merinding.
Kenapa Namanya "Shai-Hulud"?
Okay, jadi nama ini diambil dari novel sci-fi "Dune"—yang mana Shai-Hulud itu cacing raksasa yang hidup di bawah pasir dan muncul tiba-tiba buat melahap orang. Pretty fitting ya? Malware ini juga gitu: sembunyi di dependency tree lo, lalu tiba-tiba muncul dan "melahap" semua credential yang ada.
Fun fact: ini versi 2.0 karena memang ada serangan Shai-Hulud sebelumnya. Tapi yang ini? Evolved dan jauh lebih brutal.
Cara Kerja Shai-Hulud 2.0: Dari Install Sampai Bikin Chaos
Nah ini dia yang bikin gue agak takjub sekaligus ngeri. Attack chain-nya sophisticated banget, dan gue breakdown step-by-step biar lo paham seberapa serius ini.
1. Infeksi Awal via NPM Package
Pertama-tama, attacker nggak pakai cara kuno kayak typosquatting (bikin package palsu dengan nama mirip). Mereka hijack publisher account yang legitimate atau trojanize package yang udah dipercaya orang. Package populer yang sempat kena antara lain:
- @asyncapi/specs
- Package dari Zapier
- Package dari PostHog
- Package dari Postman
- Dan ratusan package lainnya
Jadi bayangin, lo install package yang emang legit, yang udah lo pakai berbulan-bulan, eh tiba-tiba ada update yang udah di-trojanize. GG.
2. Eksekusi di Preinstall Script
Ini yang bikin berbahaya banget. Malware ini jalan di preinstall lifecycle, bukan postinstall seperti biasanya. Bedanya apa?
- Malware jalan bahkan sebelum package selesai terinstall
- Bahkan kalau instalasi gagal atau lo cancel, malware tetap udah jalan duluan
- Lebih cepat eksekusi sebelum lo sempat sadar ada yang aneh
Jadi lo pikir "ah gue cancel aja deh install-nya", tapi sorry bro, malware-nya udah keburu jalan.
3. Install Bun Runtime Sebagai Taktik Menghindar
Nah ini yang unik dan honestly cukup jenius dari sisi attacker (walaupun ya, tetap jahat). Malware ini nggak langsung pakai Node.js—dia install Bun runtime dulu lewat file setup_bun.js.
Lo mungkin mikir, "lah kok pakai Bun?" Ternyata ada alasannya:
- Evasion: Kebanyakan security tools dan sandbox itu monitor Node.js behavior, bukan Bun. Jadi dia lolos dari detection.
- Stealth: Proses Bun kurang familiar buat security analyst. Banyak yang nggak aware kalau itu suspicious.
- Legitimasi: Bun sendiri adalah legitimate JavaScript runtime. Jadi security tools nggak langsung curiga—they're like "oh oke, developer lagi coba Bun, normal."
Setelah Bun terinstall, malware jalanin payload utama di bun_environment.js yang heavily obfuscated. Good luck buat yang coba baca code-nya, karena itu udah di-obfuscate sampai nyaris nggak kebaca.
4. Credential Harvesting: Nyedot Semua Secret Lo
Okay, sekarang bagian yang bikin ngeri. Malware ini thorough banget dalam nyari credential. Dia nggak cuma ambil satu-dua token terus cabut. Dia all-in. Target yang diburu:
Developer Credentials:
- GitHub Personal Access Tokens (PAT)
- GitHub OAuth tokens
- NPM tokens untuk publishing
- SSH keys
- Git credentials yang lo simpen di config
Cloud Credentials:
- AWS access keys & secrets
- Google Cloud Platform credentials
- Azure credentials
- Bahkan nyoba akses cloud metadata services
CI/CD Secrets:
- Environment variables di GitHub Actions
- Variables di CI/CD pipeline
- Repository secrets yang lo kira aman
File System Scanning: Yang paling gila, malware ini bahkan download dan execute Trufflehog—yang mana itu tool legitimate yang biasa dipakai security team buat scan secrets. Ironic banget kan? Tool yang harusnya protect lo, malah dipake buat nyerang lo. Dia scan seluruh home directory lo, cari API keys, passwords, tokens, apapun yang tersembunyi di config files.
Basically, kalau lo punya secret di laptop lo, dia kemungkinan besar dapat.
5. Exfiltration via GitHub Repository
Nah ini cara dia ngirim data yang udah dicuri. Dan ini cerdas banget (again, dari sisi teknis—moral-wise tetap sampah).
Alih-alih kirim ke command & control server yang gampang dideteksi sama network monitoring, malware ini:
- Pakai stolen GitHub token buat create public repository baru
- Nama repo di-randomize (beda dari versi 1.0 yang selalu pakai nama sama)
- Description repo: "Sha1-Hulud: The Second Coming" (ini signature-nya)
- Upload semua stolen credentials ke repo tersebut dalam bentuk JSON files:
cloud.json- cloud credentialsenvironment.json- environment variablesactionsSecrets.json- GitHub Actions secrets
Yang lebih gila lagi, kalau malware nggak nemu GitHub token di victim, dia akan search GitHub buat repo korban lain yang udah di-exfiltrate, ambil token dari sana, terus pakai buat upload data korban sekarang. Cross-victim exfiltration. Basically korban A bantuin korban B tanpa sadar.
Creepy, kan?
6. Persistence: Self-Hosted GitHub Runner
Malware nggak cuma steal and go. Dia juga pasang backdoor yang persistent. Caranya? Register infected system lo sebagai self-hosted GitHub Actions runner.
Ini berarti:
- Attacker bisa execute arbitrary code kapan aja via GitHub Workflows
- Persistence ini survive reboot dan credential rotation
- Bisa di-trigger lewat GitHub Discussions atau Issues
Jadi walaupun lo udah ganti password, revoke token, atau bahkan format ulang (tapi nggak full wipe), backdoor ini masih bisa aktif. Nightmare fuel.
7. Propagasi Otomatis: Worm Behavior
Inilah yang bikin Shai-Hulud 2.0 jadi viral dan menyebar super cepat. Setelah berhasil steal credentials, malware otomatis:
- Pakai stolen NPM tokens buat publish infected versions dari semua packages yang victim punya akses
- Limit 100 packages per execution (supaya cepat spread tapi nggak terlalu kentara)
- Inject malicious code ke package lain yang victim maintain
- Chain infection: korban A nginfeksi package B, yang diinstall sama developer C, yang nginfeksi package D, dan seterusnya
Efek domino inilah yang bikin 26,000+ repositories terinfeksi dalam hitungan jam. Literally exponential growth.
Dead Man's Switch: Fitur Paling Sadis
Okay, this is where it gets really dark.
Kalau versi sebelumnya cuma fokus stealing credentials, Shai-Hulud 2.0 punya fitur baru yang absolutely brutal:
Kalau malware gagal steal credentials atau gagal exfiltrate data (misalnya nggak ada GitHub token, nggak ada npm token, atau network di-block), malware akan menghancurkan seluruh home directory lo.
Caranya:
- Securely overwrite semua writable files yang lo punya
- Delete everything di home folder
- Ini bukan cuma
rm -rfbiasa—ini secure wipe yang permanent
Security researchers nyebut ini "dead man's switch" mechanism. Basically, kalau propagation channel-nya terputus, malware bunuh diri sambil bawa korban.
Ini juga jadi defensive mechanism buat attacker. Security team jadi takut block exfiltration channel karena takut data korban malah hancur. Hostage situation, digital style.
Honestly, ini yang paling bikin gue ngeri. Bukan cuma kena hack, tapi literally kehilangan semua data.
Blast Radius: Seberapa Parah Sih Dampaknya?
Okay, let's talk numbers. Dan trust me, angka-angka ini bikin ngeri:
- 26,000+ GitHub repositories terinfeksi
- 700+ NPM packages compromised (walaupun mayoritas udah di-reclaim sama NPM)
- ~350-500 unique GitHub users kena dampak langsung
- $50 million cryptocurrency dicuri (ini dari campaign September 2025—related attack)
- 27% cloud environments ter-expose (berdasarkan scan dari Wiz)
- Jutaan credentials ter-exfiltrate dan exposed publicly di GitHub
Package-package populer yang sempat terinfeksi:
- AsyncAPI specs
- Zapier integrations
- PostHog analytics
- Postman collections
- ENS Domains utilities
Yang bikin makin serem, bahkan perusahaan besar kayak Elastic sempat kena. Salah satu CI pipeline mereka run infected package dan publish data ke public GitHub repo. Untungnya nggak ada impact ke customer, tapi tetap aja—kalau Elastic aja bisa kena, siapa sih yang aman?
Kenapa Serangan Ini Begitu Efektif?
Jujur, ini salah satu serangan paling well-executed yang pernah gue analisa. Dan ada beberapa faktor kenapa ini berhasil:
1. Trust Exploitation
Attacker nggak pakai package palsu atau typosquatting. Mereka hijack legitimate publisher accounts dan trojanize real packages yang udah dipercaya. Developer nggak curiga karena package-nya asli, dari publisher yang legit. Lo basically trust something that betrayed you.
2. Preinstall Execution
Eksekusi di preinstall lifecycle means malware jalan sebelum dependency resolver selesai. Bahkan sebelum lo sadar ada installation yang berjalan, malware udah keburu aktif. By the time lo realize something's wrong, it's already too late.
3. Bun as Evasion
Pakai Bun runtime instead of Node.js bikin malware bypass kebanyakan security monitoring tools yang di-optimize buat Node.js processes. It's like speaking a different language that security guards don't understand.
4. GitHub as Infrastructure
Exfiltrate via GitHub repo bikin detection jadi super susah karena traffic-nya legitimate GitHub API calls. Hard banget buat distinguish dari normal development activity. Lo ngeliat developer create repo, push code, setup runners—all looks normal, padahal di balik layar itu malware activity.
5. Worm Propagation
Self-replication means satu korban bisa jadi vector untuk puluhan atau ratusan korban lain tanpa attacker perlu manual action. Attacker basically deploy sekali, terus sit back and watch it spread.
6. Timing: NPM Token Migration
Attack ini coincide dengan NPM's phase-out dari classic tokens ke granular tokens. Banyak developer yang kasih over-broad access saat migration period—dan attacker exploit window ini. Perfect timing, unfortunately.
Cara Proteksi Diri dari Shai-Hulud 2.0
Okay, enough doom and gloom. Sekarang yang penting: gimana cara protect diri lo dari serangan kayak gini?
Immediate Actions (Kalau Lo Suspect Kena):
-
Check GitHub repos lo
- Search "Sha1-Hulud: The Second Coming" di organization lo
- Look for new repos dengan nama random atau suspicious
- Check repo yang recently created yang lo nggak recognize
-
Revoke ALL tokens immediately
- GitHub Personal Access Tokens (PATs)
- NPM tokens
- Cloud credentials (AWS, GCP, Azure)
- SSH keys
- Seriously, revoke everything. Better safe than sorry.
-
Check untuk self-hosted runners
- Review GitHub Actions runners di organization settings
- Remove unauthorized runners
- Kalau lo nggak pakai self-hosted runners, make sure none are registered
-
Scan untuk IOCs (Indicators of Compromise)
# Check untuk malicious files find ~/ -name "setup_bun.js" -o -name "bun_environment.js" # Check untuk bun processes yang suspicious ps aux | grep bun -
Review recent package publishes
- Check NPM publish history lo
- Look for unexpected versions atau packages yang lo nggak ingat publish
Long-Term Security Practices:
Ini yang perlu jadi habit lo moving forward. Prevention is always better than cure.
1. Dependency Management
- Pin exact versions di package.json—jangan pakai
^atau~yang auto-update - Review dependency updates sebelum install. Jangan asal
npm installaja. - Use lock files (package-lock.json, yarn.lock) dan commit ke repo
- Gunakan tools kayak npm audit atau Snyk buat vulnerability scanning regular
2. Token Hygiene
- Never commit tokens ke repository. Ever. Period.
- Use short-lived, scoped tokens wherever possible
- Rotate tokens regularly—at least monthly
- Gunakan NPM granular tokens dengan minimal permissions. Jangan kasih full access kalau cuma butuh read.
- For CI/CD, use environment-specific tokens yang scope-nya limited
3. CI/CD Hardening
- Disable atau restrict lifecycle scripts di CI/CD environment
Yeah, this might break some packages, tapi better than getting owned.npm install --ignore-scripts - Limit outbound network access dari build systems
- Use isolated, ephemeral build environments
- Monitor untuk unexpected network connections
4. Endpoint Security
- Configure security software lo buat block processes yang:
- Create/load files named
setup_bun.jsataubun_environment.js - JavaScript runtimes yang attempting to mass-delete files under HOME
- Create/load files named
- Enable real-time monitoring untuk suspicious file operations
- Use EDR (Endpoint Detection and Response) kalau budget allows
5. Network Monitoring
- Monitor outbound connections to GitHub API dari build servers
- Alert on mass file reads atau unusual GitHub repo creation
- Block unknown JavaScript runtime downloads kalau nggak diperlukan
6. Code Review for Dependencies
- Review
package.jsonchanges di pull requests with scrutiny - Check untuk unexpected preinstall/postinstall scripts
- Use automated tools kayak Socket atau Checkmarx Supply Chain Security
- Don't just rubber-stamp dependency updates
7. Use Private Registry / Proxy
- Setup internal NPM registry (Verdaccio, Artifactory, Nexus)
- Mirror packages dan control apa yang masuk ke organization
- Implement allowlist untuk trusted packages
- This adds a layer of control and visibility
8. GitHub Security Settings
- Enable branch protection untuk prevent unauthorized commits
- Require code review untuk workflow changes
- Disable self-hosted runners kalau nggak absolutely necessary
- Use CODEOWNERS file untuk sensitive files
- Enable 2FA. Always.
Tools yang Bisa Detect Shai-Hulud 2.0
Beberapa security vendors udah release detection capabilities specifically untuk threat ini:
- Datadog Workload Protection: Runtime behavior analysis
- Cortex XDR / XSIAM: Behavioral Threat Protection
- Elastic Security: OOTB detection rules
- Wiz Cloud Security: SBOM visibility & Threat Intel
- Checkmarx: Supply chain security scanning
- Endor Labs: Dependency analysis
- Socket Security: Real-time package monitoring
Kalau lo atau company lo pakai salah satu tools ini, pastikan udah update ke latest rules/signatures. Detection is useless kalau outdated.
Lessons Learned untuk Developer
Gue pikir ada beberapa takeaway penting dari serangan ini yang perlu kita semua ingat:
1. Supply Chain Security Bukan Optional
Serangan ini membuktikan bahwa kita nggak cuma perlu worry soal code kita sendiri, tapi juga semua dependencies. Even "trusted" packages bisa compromised. Trust, but verify.
2. Principle of Least Privilege
Jangan kasih broad permissions ke tokens. Kalau token cuma butuh read access, don't give write. Kalau cuma butuh access ke 5 repos, don't give access to all. Simple as that.
3. Defense in Depth
Satu layer security nggak cukup. Lo butuh multiple layers:
- Endpoint protection
- Network monitoring
- Code scanning
- Token management
- Behavior analysis
Kalau satu layer fail, ada backup.
4. Monitoring is Critical
Lo harus tau apa yang terjadi di environment lo. Regular audit logs, monitor GitHub activities, check untuk unauthorized changes. Ignorance is not bliss—it's a liability.
5. Incident Response Plan
Punya plan untuk kalau kena. Know how to:
- Quickly revoke credentials
- Isolate infected systems
- Communicate dengan team
- Restore from clean backups
Don't wait until you're in the middle of an incident to figure this out.
Kesimpulan
Shai-Hulud 2.0 adalah wake-up call buat seluruh ekosistem JavaScript. Serangan ini menunjukkan bahwa:
- Supply chain attacks semakin sophisticated—dari simple typosquatting ke full-blown worm dengan advanced evasion techniques
- Legitimate tools bisa weaponized—Bun runtime dan Trufflehog, yang sebenarnya legitimate dan berguna, dipake sebagai attack vector
- Automation makes attacks scale—satu infected package bisa chain react ke ribuan repos dalam hitungan jam
- Traditional security insufficient—butuh modern approach yang understand dan address supply chain risks
Yang paling penting: security adalah shared responsibility. Sebagai developer, kita harus:
- Aware terhadap dependencies yang kita pakai
- Practice good token hygiene
- Monitor activities di accounts kita
- Stay updated dengan latest threats
- Share knowledge dengan community
Shai-Hulud 2.0 bukan akhir dari supply chain attacks. Ini cuma evolution berikutnya. Attack vectors akan terus evolve, dan kita harus evolve juga. Stay vigilant, stay informed, stay secure.
Jangan sampai lo jadi korban berikutnya.
Resources & Further Reading
Buat yang mau deep dive lebih lanjut, ini beberapa resources yang recommended:
- CISA Advisory on Shai-Hulud 2.0
- Endor Labs Technical Analysis
- Palo Alto Unit 42 Report
- Check Point Research Blog
- NPM Security Best Practices
Disclaimer: Artikel ini ditulis untuk educational purposes. Informasi yang disampaikan based on public security reports dan analysis dari reputable security vendors. Always verify dan update security practices sesuai perkembangan terbaru.
Stay safe, keep coding, dan jangan lupa update dependencies lo dengan hati-hati!
Artikel ini ditulis berdasarkan analisis dari multiple security vendors termasuk Endor Labs, Palo Alto Networks, Check Point, Datadog Security Labs, Wiz Research, dan Tenable. Data akurat per Desember 2025.
- Dapatkan link
- X
- Aplikasi Lainnya
Komentar