Malware wawancara palsu menargetkan para pemelihara sumber terbuka
#Keamanan Siber

Malware wawancara palsu menargetkan para pemelihara sumber terbuka

Lukas Brandt
Lukas Brandt
5 min read

Wawancara VC palsu memancing seorang pengembang ke repositori TypeScript yang dipasangi jebakan, sebuah pola yang menunjukkan bahwa para penyerang kini memandang akses maintainer sebagai hadiah.

Serangan interview palsu menargetkan seorang pengembang asal Kanada dengan repository berisi malware yang bisa saja membuka akses paket open source, kredensial, dan data host.

Anatomi Serangan yang Gagal (Negara?) | grack

Insiden ini sesuai dengan pola yang telah dilacak tim keamanan di berbagai komunitas pengembang sepanjang 2026: penyerang menyamar sebagai perekrut, pendiri, investor, atau technical lead, lalu meminta target untuk meng-clone dan menjalankan sebuah proyek. Proyek itu tampak seperti sampel kerja. Payload menunggu di dalam jalur build.

Dalam kasus ini, penyerang mengaku mewakili sebuah firma ventura DeFi di Singapura dan menawarkan pekerjaan advisory yang terkait dengan dua startup yang sangat minim dokumentasi. Persona tersebut dilengkapi profil LinkedIn, nama perusahaan, situs web, dan panggilan video. Panggilan itu baru menimbulkan kecurigaan setelahnya: kamera dimatikan, alasan perjalanan, tidak ada undangan kalender, dan pola zona waktu yang tidak cocok dengan cerita.

Jebakan datang setelah panggilan. Penyerang mengirim proyek TypeScript yang dibingkai sebagai tes. Proyek itu, sebuah aplikasi tiket feri bernama Ticket Harbor, meminta target menjalankan type check, tes, dan perintah build sebelum mengirimkan hasil.

Instruksi itu penting. Penyerang menyembunyikan kode dalam sebuah patch file untuk TypeScript, lalu mengandalkan kebiasaan normal pengembang untuk mengeksekusinya. Proyek itu menggunakan patch-package, alat yang menerapkan patch dependency lokal setelah install. Penyerang bisa menyalahgunakan alur kerja itu karena patch menyentuh file di dalam node_modules, tempat banyak pengembang lebih sedikit melakukan review.

Patch berbahaya itu mengubah typescript.js dan _tsc.js. Ia menyisipkan blob base64, mendekodenya dengan XOR menggunakan kunci tetap, lalu menjalankan kode hasil decode melalui new Function() dengan akses ke require, Buffer, WebAssembly, process, dan __dirname. Perintah apa pun yang memanggil TypeScript bisa memicu tahap pertama.

Anatomi Serangan yang Gagal (Negara?) | grack

Loader kemudian membaca data tersembunyi yang ditambahkan ke file gambar, operators/3.png. File itu membawa chunk WebAssembly kustom dan payload tahap kedua. Malware tersebut membuat proses Node.js yang terpisah dari terminal dan membersihkan jejak melalui beberapa langkah: menggunakan flag skip-worktree milik Git untuk menyembunyikan perubahan patch dari git status, menulis ulang patch setelah run pertama, dan menghapus direktori sementaranya setelah peluncuran.

Payload yang dilaporkan, disebut PinpinRAT dalam tulisan insiden karena string internal, bertindak sebagai remote access trojan. Ia menghasilkan pasangan kunci RSA-2048 lokal, membuat kunci sesi AES-256, dan mengenkripsi lalu lintas perintah dengan AES-256-CBC plus tag integritas HMAC-SHA256.

Setelah startup, malware itu melakukan check-in ke server command-and-control dan mengirim profil host. Data yang dikirim mencakup alamat IP, nama pengguna, hostname, sistem operasi, arsitektur, process ID, argumen command-line, dan versi Node.js.

Set perintahnya memberi operator kontrol yang luas. Malware itu bisa membuang environment variable, mengunggah dan mengunduh file, mem-spawn proses, membuat daftar direktori, mengubah direktori kerja, menyalin file, memindahkan file, menjalankan lookup DNS melalui resolver pilihan, dan menghapus dirinya sendiri.

Kemampuan seperti itu membuat penargetan maintainer berbahaya. Workstation pengembang sering menyimpan token registry paket, SSH key, kredensial cloud, sesi browser, file .npmrc, token GitHub, dan salinan lokal kode privat. Sebuah remote access trojan tidak perlu mencuri satu rahasia tertentu pada run pertama. Ia bisa memeriksa mesin, menunggu, lalu mengambil kredensial yang membuka pintu terbaik.

Sudut open source penting karena target menyebut paket di crates.io, registry paket milik Rust. Akun maintainer yang dikompromikan dapat mengubah intrusi lokal menjadi insiden supply chain paket. Penyerang yang mendapatkan akses publish bisa mendorong versi berbahaya, menargetkan pengguna downstream, atau mempelajari alur rilis untuk percobaan berikutnya.

Anatomi Serangan yang Gagal (Negara?) | grack

Kampanye ini juga menunjukkan bagaimana penyerang memadukan kepercayaan sosial dengan jebakan teknis. Perusahaan palsu itu memiliki situs web dasar. Profil LinkedIn tampak masuk akal sekilas. Penyerang mengadakan panggilan sebelum mengirim repository. Kode dasarnya menyembunyikan payload di bawah noise, termasuk beberapa direktori patch yang terlihat rutin.

Pengembang sering menganggap npm install, npm test, npm run build, dan tsc sebagai langkah setup yang tidak berbahaya. Proyek JavaScript modern membuat kepercayaan itu rapuh. Script lifecycle paket, dependency yang di-patch, test runner, code generator, native build, dan alur kerja Electron semuanya dapat menjalankan kode sebelum reviewer membaca aplikasinya.

Tim keamanan sebelumnya telah memperingatkan tentang malware interview palsu, termasuk kampanye yang menargetkan pekerja crypto, engineer, dan maintainer open source. Penyerang menyukai jalur ini karena tes kerja memberi mereka alasan yang masuk akal untuk meminta target menjalankan kode dari sumber yang tidak dikenal. Bingkai interview juga menciptakan tekanan waktu dan tekanan sosial.

Argumen sebaliknya layak diperhatikan. Banyak startup yang sah menjalankan proses perekrutan dan advisory yang longgar. Perusahaan tahap awal memakai situs web sederhana. Founder sering lalai soal undangan kalender. Tes teknis sering meminta kandidat menjalankan build lokal. Tidak satu pun sinyal itu sendirian membuktikan niat jahat.

Pelajaran yang lebih aman datang dari gabungan sinyal-sinyal tersebut. Persona investor jarak jauh, jejak perusahaan yang tipis, panggilan tanpa kamera, undangan kalender yang hilang, cerita geografis yang aneh, repository yang tidak dikenal, dependency tree yang penuh patch, dan permintaan untuk menjalankan perintah build harus mendorong pengembang masuk ke sandbox.

Pengembang bisa mengurangi risiko dengan beberapa kebiasaan konkret. Buka proyek yang tidak dikenal di VM atau container sekali pakai tanpa secret host. Periksa lifecycle script di package.json sebelum install. Cari postinstall, preinstall, prepare, patch-package, new Function, eval, blob base64, loader WebAssembly, dan file compiler yang di-patch. Perlakukan gambar dan aset lain sebagai kemungkinan pembawa payload ketika kode membaca byte mentah darinya.

Maintainer registry juga sebaiknya memisahkan development harian dari hak publish. Gunakan autentikasi dua faktor berbasis hardware pada akun GitHub, npm, dan crates.io. Batasi ruang lingkup token paket dan buat masa pakainya pendek jika registry mengizinkan. Lakukan publish dari environment yang bersih. Hindari menyimpan token cloud produksi dan kredensial paket pada mesin yang sama yang dipakai untuk memeriksa repository dari orang asing.

Tulisan insiden itu mencantumkan beberapa indikator yang bisa diperiksa tim: lalu lintas command-and-control ke 89.124.107.161:80, scheduled task Windows bernama PinpinWrappedJs, proses macOS yang menyamar sebagai com.apple.WebKit.Networking, environment variable bernama NODT_PAYLOAD_PATH dan NODT_PAYLOAD_ARGS, penjaga chunk WASMPACK, serta string jangkar 12ff4b51 dan ticket-harbor-tsc-shim-anchor di dalam file TypeScript.

Path artefak yang dilaporkan mencakup ~/Library/Caches/runtime-cache/.cache-<randomhex>/ di macOS, /tmp/.cache-<randomhex>/ di Linux, dan %TEMP%\.cache-<randomhex>\ di Windows. Direktori tersebut mungkin berisi payload.js dan mutex.js.

Siapa pun yang menjalankan repository serupa sebaiknya memutus koneksi mesin dari jaringan, mempertahankan bukti jika tim incident response membutuhkannya, mengganti kredensial dari perangkat tepercaya yang terpisah, dan mengaudit aktivitas registry paket. Cookie browser, SSH key, kredensial Git, token cloud, dan token paket layak menjadi prioritas pertama dalam peninjauan.

Anatomi Serangan yang Gagal (Negara?) | grack

Tren yang lebih luas menunjukkan tahun yang berat bagi kepercayaan pengembang. Penyerang tidak lagi perlu membobol registry terlebih dahulu. Mereka bisa mendekati maintainer, meniru ritual rekrutmen, dan membiarkan alat build mengerjakan sisanya.

Komentar

Memuat komentar...