Serangan Rantai Pasok AsyncAPI - Malware Menyusup Lewat Bug CI/CD ke Jutaan Unduhan npm

Pukul 05.03 UTC pada 14 Juli 2026, 36 pull request spam mulai membanjiri repositori GitHub proyek AsyncAPI — bukan aksi iseng, melainkan tabir asap. Di baliknya, seorang penyerang sedang mengeksploitasi celah di workflow GitHub Actions milik proyek itu. Kurang dari dua setengah jam kemudian, pukul 07.10 UTC, lima versi paket npm resmi milik @asyncapi — spesifikasi dan generator yang dipakai untuk mendokumentasikan API event-driven — sudah beredar dengan kode jahat tertanam di dalamnya, siap dijalankan begitu developer mana pun di dunia menjalankan npm install.

Ini bukan kebocoran akun maintainer atau phishing terhadap satu developer, melainkan eksploitasi terhadap proses otomatis CI/CD itu sendiri — pola serangan yang menurut Datadog Security Labs makin sering menyasar proyek open-source populer karena permukaan seranganya jauh lebih sulit diawasi manusia dibanding kredensial biasa.

Bagaimana Bug di GitHub Actions Dieksploitasi

Menurut analisis Datadog, penyerang memanfaatkan celah yang sudah pernah diungkap publik sebelumnya — dijuluki "PwnRequest" — pada konfigurasi workflow pull_request_target milik AsyncAPI. Masalahnya spesifik: workflow tersebut memberi izin menjalankan kode dari pull request pihak luar terhadap file-file di direktori apps/generator/docs/*, tanpa perlu persetujuan maintainer lebih dulu. Artinya siapa pun yang bisa menaruh file di path itu lewat PR bisa menjalankan kode arbitrer dalam konteks keamanan repositori utama.

Rentetannya cepat: commit jahat dibuat di fork milik penyerang sekitar pukul 05.08 UTC, workflow CI yang rentan terpicu tiga menit kemudian, dan pada 05.17 UTC token GitHub serta Netlify dari environment pipeline sudah berhasil dieksfiltrasi lewat layanan paste Rentry. Dengan token itu di tangan, penyerang mendorong serangkaian commit jahat ke branch next antara pukul 05.40 dan 07.05 UTC, sebelum akhirnya mempublikasikan versi 3.3.1 paket @asyncapi/generator yang sudah disusupi ke registry npm — lengkap dengan provenance OIDC yang sah, sehingga terlihat seperti rilis resmi biasa.

Payload yang Berjalan Begitu Paket Diimpor

Yang membuat kasus ini berbeda dari kebanyakan serangan supply-chain npm sebelumnya ada di titik eksekusinya. Selama ini pola umum adalah malware yang bersembunyi di postinstall hook — skrip yang jalan otomatis saat instalasi — sehingga bisa dihindari dengan menjalankan npm install --ignore-scripts. Menurut Microsoft Security Blog, kampanye ini justru mengeksekusi payload pada saat modul diimpor (import/require), bukan saat instalasi — sehingga proteksi --ignore-scripts yang selama ini jadi andalan tim keamanan sama sekali tidak berguna di sini.

Begitu modul diimpor, kode jahat memunculkan proses Node.js terpisah yang mengunduh tahap kedua dari IPFS — bundel terenkripsi berukuran sekitar 8,25 MB. Payload utamanya adalah varian dari runtime malware bernama Miasma (M-RED-TEAM v6.4), sebuah framework modular sepanjang lebih dari 90.000 baris kode yang, menurut Datadog, dilengkapi kemampuan mencuri kredensial cloud (AWS, GCP, konfigurasi Kubernetes), token registry npm dan GitHub, secret dari Slack dan Discord, sampai menanamkan persistensi lewat file konfigurasi IDE seperti .vscode/tasks.json. Untuk komunikasi command-and-control, malware ini punya server utama di alamat IP 85.137.53[.]71, ditambah jalur cadangan terdesentralisasi lewat relay Nostr, jaringan Ethereum, dan BitTorrent DHT — desain yang membuatnya jauh lebih sulit dimatikan hanya dengan memblokir satu domain atau IP.

Kode program di layar komputer dengan tampilan hijau ala Matrix
Kode program di layar komputer dengan tampilan hijau ala Matrix

Skala Dampak dan Respons Ekosistem

Empat paket yang terdampak — @asyncapi/specs, @asyncapi/generator, @asyncapi/generator-components, dan @asyncapi/generator-helpers — secara kumulatif diunduh lebih dari 3 juta kali setiap minggu, menurut catatan Datadog. Karena AsyncAPI dipakai luas sebagai tooling dokumentasi API dalam pipeline build, artinya paparan potensial bukan cuma di laptop developer individu, melainkan juga di server CI/CD dan proses build container milik banyak organisasi yang sempat menarik versi yang sudah disusupi selama jendela waktu singkat itu.

Begitu kompromi terdeteksi, versi-versi bermasalah ditarik dari npm dan tim keamanan di beberapa organisasi mulai memburu indikator kompromi (IOC) yang sama — mulai dari hash paket, alamat IP C2, sampai pola proses Node.js mencurigakan yang memunculkan koneksi ke IPFS. Kasus ini menambah daftar panjang insiden rantai pasok npm tahun 2026, dan menegaskan pola yang sama berulang: bukan kelemahan di kode aplikasi itu sendiri, melainkan di infrastruktur otomatis di sekelilingnya — workflow CI, token dengan hak akses luas, dan kepercayaan implisit terhadap apa pun yang lolos dari pipeline rilis resmi.

Baris-baris kode HTML di layar
Baris-baris kode HTML di layar

Takeaway

Serangan AsyncAPI ini bukan cerita tentang password yang bocor atau maintainer yang lengah — ini cerita tentang bagaimana satu baris konfigurasi pull_request_target yang ceroboh bisa membuka jalan bagi malware canggih untuk masuk ke jutaan instalasi dalam hitungan jam, lewat rilis yang terlihat sah secara kriptografis. Untuk tim engineering, pelajarannya jelas: mengaudit dependensi dari sisi kode sumbernya saja tidak cukup lagi, karena ancaman sekarang bersembunyi di pipeline yang menghasilkan kode itu. Memverifikasi hash rilis, membatasi hak akses token CI seketat mungkin, dan memantau perilaku proses saat runtime — bukan cuma saat instalasi — kini jadi kebutuhan dasar, bukan langkah ekstra.

Sumber gambar: Adi Goldstein di Unsplash Sumber gambar: Markus Spiske di Unsplash Sumber gambar: Florian Olivo di Unsplash

The conversation 0

No comments yet. Start the conversation.

Comments are reviewed before appearing. Links are masked.