Ketika npm install Jadi Senjata: Bedah Serangan Supply Chain axios
Pada 31 Maret 2026, dua versi berbahaya dari axios muncul di npm dan bertahan sekitar tiga jam sebagai tag “latest” sebelum akhirnya ditarik. Axios diunduh lebih dari 180 juta kali setiap minggu. Tiga jam itu sudah lebih dari cukup.
Poin Utama
- Penyerang menggunakan panggilan Microsoft Teams palsu untuk mengirim RAT ke maintainer utama axios, lalu memanfaatkan token npm berumur panjang untuk melewati kontrol penerbitan OIDC.
- Dependensi berbahaya
[email protected]menjalankan hookpostinstallyang mengirimkan RAT per platform dan menghapus diri dalam ~15 detik, meninggalkan jejak forensik minimal.- Setidaknya 135 endpoint menghubungi infrastruktur C2 dalam jendela 3 jam (Huntress, 2026).
- Tindakan segera: pin ke
[email protected](v1.x) atau[email protected](v0.x) dan tambahkan blokoverrides.
Bagaimana Penyerang Mendapatkan Kendali atas Akun npm axios?
Kampanye rekayasa sosial yang terkoordinasi, bukan eksploitasi kode, memberi penyerang akses ke salah satu paket paling banyak diunduh di npm pada Maret 2026 (Google Threat Intelligence Group, 2026). Teknik ini mencerminkan playbook BlueNoroff yang terdokumentasi terhadap developer cryptocurrency: tiru branding perusahaan yang sah, bangun kepercayaan lewat platform pesan, lalu kirimkan malware melalui panggilan terjadwal.
Penyerang membangun workspace Slack palsu dengan profil tim yang meyakinkan dan menjadwalkan panggilan Microsoft Teams dengan dalih pembaruan perangkat lunak yang hilang. Selama panggilan itu, remote access trojan dikirimkan ke mesin sang maintainer. Dengan akses akun yang sudah diperoleh, penyerang mengubah email akun ke [email protected] dan menggunakan token npm berumur panjang untuk melewati pipeline penerbitan berbasis OIDC milik proyek.
Antara 00:21 dan 03:20 UTC, dua rilis yang telah dimodifikasi dipublikasikan:
[email protected](diberi tag latest)[email protected](diberi tag legacy)
Kedua versi ini menyisipkan satu dependensi runtime baru: [email protected]. Kode sumber axios yang asli tidak diubah sama sekali. Seluruh vektor serangan hanya satu baris yang ditambahkan ke package.json.
Menurut Google Threat Intelligence Group, penyerang mengubah email akun npm maintainer axios ke
[email protected]dan menggunakan token berumur panjang yang sudah ada untuk menerbitkan rilis berbahaya, melewati kontrol OIDC proyek sepenuhnya (Google Threat Intelligence Group, 2026). Setiap kontrol keamanan penerbitan pada pipeline menjadi tidak relevan begitu akun diambil alih.
Bagaimana Paket Berbahaya Mengeksekusi Kode Tanpa Terdeteksi?
Dependensi berbahaya menggunakan hook postinstall npm, fitur yang dijalankan npm secara otomatis di akhir setiap proses install, untuk mengeksekusi setup.js tanpa interaksi pengguna dan tanpa output error yang mencurigakan (Unit 42, Palo Alto Networks, 2026). Dari luar, proses instalasi terlihat sepenuhnya normal. Itulah intinya: serangan ini tidak menggunakan zero-day. Ia menggunakan fitur npm yang sah.
Di dalam setup.js, skema enkoding dua lapisan menyembunyikan payload: string dibalik dengan garis bawah diganti karakter padding, lalu didekode dengan Base64, lalu di-XOR terhadap kunci OrDeR_7077. Setelah didekode, skrip memeriksa OS dan mengunduh payload yang sesuai dari infrastruktur C2 di sfrclak[.]com:8000.
Setelah payload dikirimkan, dropper membersihkan jejaknya. File setup.js dihapus, hook postinstall dicopot dari package.json, dan file digantikan dengan stub bersih. Seluruh urutan ini selesai dalam sekitar 15 detik.
Dropper
[email protected]menyelesaikan seluruh rantai eksekusinya, deteksi OS, kontak C2, pengiriman payload, dan self-cleanup, dalam sekitar 15 detik. Ia menghapussetup.js, melepas hookpostinstall, dan mengganti keduanya dengan stub bersih, tidak meninggalkan artefak yang terdeteksi oleh pemindaian forensik standar (Unit 42, 2026).
Windows
Di Windows, dropper menulis VBScript ke %TEMP%\6202033.vbs, lalu menyalin powershell.exe ke %PROGRAMDATA%\wt.exe. Mengganti nama PowerShell menjadi wt.exe, nama file sah untuk Windows Terminal, melewati deteksi berbasis nama proses tanpa kode evasion khusus. RAT PowerShell dieksekusi di window tersembunyi, dan persistensi ditetapkan melalui registry Run key yang didaftarkan sebagai MicrosoftUpdate.
RAT mendukung empat perintah operator: kill, peinject (injeksi .NET in-memory), runscript, dan rundir. Data rekognisi sistem dikirim pada kontak pertama, lalu beacon dilakukan setiap 60 detik.
macOS
Sebuah AppleScript mengunduh binary Mach-O universal (x86_64 dan ARM64) ke /Library/Caches/com.apple.act.mond, meniru pola penamaan cache internal Apple. Binary tersebut ditandatangani secara ad-hoc untuk melewati Gatekeeper. Peneliti dari Jamf menemukan nama proyek internal yang tertanam dalam binary: macWebT, referensi langsung ke modul yang sebelumnya terdokumentasi dalam kampanye RustBucket milik BlueNoroff.
Linux
Target Linux menerima RAT Python di /tmp/ld.py. Berbeda dari dua platform lainnya, varian Linux tidak menetapkan mekanisme persistensi. Itu bukan kelalaian. CI/CD runner dan container bersifat sementara. Persistensi tidak diperlukan ketika tujuan sebenarnya adalah memanen kredensial dari environment variable pipeline, yang ada sebentar di memori lalu hilang.
Siapa di Balik Serangan Supply Chain axios?
Beberapa kelompok riset independen sampai pada kesimpulan yang sama: aktor termotivasi secara finansial dengan nexus Korea Utara yang memiliki rekam jejak terdokumentasi dalam menarget tooling developer (Microsoft Security Blog, 2026). Google Threat Intelligence Group mengaitkan serangan ini ke UNC1069, aktif sejak 2018. Microsoft mengaitkannya ke Sapphire Sleet, yang tumpang tindih dengan BlueNoroff dan STARDUST CHOLLIMA dalam berbagai sistem penamaan vendor. Malware itu sendiri, dilacak sebagai WAVESHAPER.V2, adalah evolusi dari tooling backdoor dengan atribusi DPRK sebelumnya.
Server C2 (sfrclak.com, yang resolve ke 142.11.206.73) terhubung ke exit node AstrillVPN dengan tautan historis yang terdokumentasi ke infrastruktur UNC1069. Satu detail yang menonjol: identifier kampanye yang tertanam dalam path C2 adalah /6202033. Dibalik, terbaca 3302026, 3-30-2026, sehari sebelum serangan diluncurkan.
Pada April 2026, Google Threat Intelligence Group mengaitkan kompromi npm axios ke UNC1069, aktor bernexus Korea Utara yang aktif sejak 2018. Microsoft mengaitkan aktivitas yang tumpang tindih ke Sapphire Sleet. Malware WAVESHAPER.V2 berbagi silsilah tooling dengan kampanye macOS RustBucket milik BlueNoroff (Google Threat Intelligence Group, 2026).
Mengapa Setiap Developer JavaScript Perlu Peduli?
Workstation developer dan pipeline CI/CD mengakumulasi kredensial, dan setidaknya 135 endpoint menghubungi infrastruktur C2 selama jendela eksposur tiga jam, hanya dalam jaringan mitra Huntress saja (Huntress, 2026). Set kemampuan RAT ini dirancang khusus untuk mengekstrak token npm, SSH key, AWS access key, GitHub Personal Access Token, dan password database dari file .env.
Inilah yang mengejutkan banyak developer: dependensi transitif memperbesar blast radius jauh melampaui pengguna axios langsung. Organisasi yang tidak pernah secara langsung mereferensikan axios tetap terekspos jika ada paket dalam dependency tree mereka yang meresolve melalui versi yang dikompromikan. Itu bukan kasus tepi yang langka, itulah cara kerja sebagian besar dependency graph di dunia nyata.
Bayangkan ini: jika pipeline CI/CD kamu menjalankan npm install pada proyek apa pun yang memiliki penggunaan axios tidak langsung, kamu berada dalam scope. Kamu tidak perlu mengimpor axios sendiri.
Hanya dalam jaringan mitra Huntress saja, setidaknya 135 endpoint menghubungi infrastruktur C2 di
sfrclak.comselama jendela eksposur axios tiga jam. Resolusi dependensi transitif memperluas blast radius ke semua proyek dengan penggunaan axios tidak langsung, impor langsung tidak diperlukan untuk terekspos (Huntress, 2026).
Yang Harus Dilakukan Jika Lingkungan Anda Terekspos
Jika lockfile atau node_modules kamu mengandung [email protected], [email protected], atau versi apapun dari plain-crypto-js, anggap host yang terdampak sebagai sudah dikompromikan, bukan “berpotensi dikompromikan”.
- Jangan coba membersihkan mesin di tempat. Bangun ulang dari image yang diketahui bersih.
- Rotasi semua kredensial yang dapat diakses dari sistem yang terdampak: token npm, SSH key, AWS access key, API key, token GitHub, password database.
- Pin axios ke versi aman di
package.json:- Cabang v1.x:
"axios": "1.14.0" - Cabang v0.x:
"axios": "0.30.3"
- Cabang v1.x:
- Tambahkan package override untuk mencegah resolusi transitif:
"overrides": { "plain-crypto-js": "npm:[email protected]" } - Blokir traffic keluar ke
sfrclak.comdan142.11.206.73pada port 8000. - Audit log CI/CD untuk langkah npm install yang berjalan antara 00:21 dan 03:20 UTC pada 31 Maret 2026.
Bagaimana Cara Mencegah Serangan Supply Chain Berikutnya?
Serangan ini adalah studi kasus mengapa postinstall script berbahaya dalam skala besar, dan ada kontrol spesifik yang akan memblokir serangan ini, atau setidaknya mendeteksinya lebih cepat (axios GitHub Issue #10636, 2026). Tidak ada yang memerlukan tooling eksotis. Ini adalah perubahan konfigurasi.
Gunakan npm ci --ignore-scripts di pipeline. Hook postinstall jarang dibutuhkan untuk dependensi library. Ini adalah vektor eksekusi kode otomatis tanpa gerbang review. Menonaktifkannya menghilangkan seluruh attack surface yang diandalkan kampanye ini.
Commit dan enforce lockfile kamu. npm install bisa secara diam-diam meresolve ke versi yang lebih baru. npm ci tidak bisa. Lockfile adalah jangkar integritas kamu, perlakukan seperti itu.
Tetapkan minimum release age untuk versi paket baru. Tools seperti Socket dan konfigurasi npm sendiri memungkinkan kamu mengkarantina rilis baru selama 48–72 jam, memberi sistem deteksi otomatis waktu untuk menandai paket berbahaya sebelum build kamu menyerapnya.
Beralih ke penerbitan berbasis OIDC untuk paket yang kamu kelola. Token npm berumur panjang adalah single point of failure. Maintainer yang dikompromikan memilikinya, itulah yang melewati kontrol OIDC proyek sendiri. Token OIDC dicakup ke workflow tertentu dan kedaluwarsa secara otomatis.
Perlakukan workstation developer dengan model ancaman tingkat server. Mesin yang membangun perangkat lunak sering kali memiliki kredensial lebih berharga daripada sistem produksi yang di-deploy-nya.
Serangan axios mengeksploitasi
postinstall, fitur npm yang sah, untuk menjalankan kode berbahaya secara otomatis selama install paket tanpa konfirmasi pengguna. Menggunakannpm ci --ignore-scriptsdi pipeline CI/CD mengeliminasi vektor eksekusi ini sepenuhnya, tanpa dampak fungsional pada sebagian besar dependensi library (axios GitHub Issue #10636, 2026).
Indikator Kompromi
Paket berbahaya:
Jaringan:
- Domain:
sfrclak[.]com - IP:
142.11.206.73 - Port:
8000 - Path C2:
/6202033 - User-Agent:
mozilla/4.0 (compatible; msie 8.0; windows nt 5.1; trident/4.0)
Artefak file:
- Windows:
%PROGRAMDATA%\wt.exe,%PROGRAMDATA%\system.bat - macOS:
/Library/Caches/com.apple.act.mond - Linux:
/tmp/ld.py
Akun penyerang:
[email protected](akun npm maintainer yang dikompromikan)[email protected](akun yang dibuat penyerang untuk pre-staging)
Pertanyaan yang Sering Diajukan
Apakah axios aman diinstall sekarang?
Ya. Versi berbahaya ([email protected] dan [email protected]) dihapus dari npm dalam tiga jam setelah publikasi pada 31 Maret 2026. Pin ke [email protected] (v1.x) atau [email protected] (v0.x) dan tambahkan blok overrides untuk mencegah resolusi transitif plain-crypto-js.
Bagaimana cara memeriksa apakah proyek saya menarik versi berbahaya?
Jalankan npm ls axios dan cari [email protected], [email protected], atau [email protected] di package-lock.json kamu. Jika ada yang muncul, anggap host tersebut telah dikompromikan dan rotasi semua kredensial yang dapat diakses mesin itu, token npm, SSH key, cloud access key, password database.
Apa itu hook postinstall dan mengapa berbahaya?
Hook postinstall adalah skrip yang dijalankan npm secara otomatis setelah paket terinstall, tanpa prompt pengguna, tanpa konfirmasi. Ini adalah fitur sah untuk build step dan kompilasi modul native. Ini juga vektor eksekusi kode arbitrer. Serangan axios menjalankan seluruh pengiriman payload dan self-cleanup melalui hook ini dalam sekitar 15 detik. Menjalankan npm ci --ignore-scripts menonaktifkannya.
Bisakah ini terjadi pada paket npm mana saja?
Paket mana pun yang akun maintainer-nya dikompromikan adalah vektor yang valid. Penyerang memilih axios secara spesifik karena skalanya, 180 juta unduhan per minggu berarti jangkauan luas dari satu rilis yang diracuni. Teknik dasarnya (rekayasa sosial → kompromi akun → injeksi dependensi → eksekusi postinstall) berlaku untuk paket apa pun di npm.
Apa perbedaan npm install dan npm ci untuk keamanan?
npm install bisa secara diam-diam meresolve ke versi paket yang lebih baru, melewati lockfile dalam beberapa skenario. npm ci menginstall persis apa yang ada di package-lock.json, tanpa deviasi. Di pipeline otomatis, npm ci --ignore-scripts menambahkan lapisan kedua dengan menonaktifkan hook postinstall sepenuhnya. Gunakan npm ci untuk semua build otomatis.
Referensi
- Huntress: Supply Chain Compromise, axios npm Package
- Google Threat Intelligence Group: North Korea Threat Actor Targets axios npm Package
- axios GitHub Issue #10636: Supply Chain Attack Disclosure
- Unit 42 (Palo Alto Networks): axios Supply Chain Attack
- Microsoft Security Blog: Mitigating the axios npm Supply Chain Compromise
Related Intelligence
Amankan Operasi Anda
Siap mengidentifikasi critical vulnerability sebelum threat actor menemukannya?
Minta Penawaran