Bayangin: lu lagi buka LinkedIn, ada notif DM dari recruiter startup crypto. Diajak ngobrol beberapa hari, dikasih repo GitHub buat direview. Diminta cek "deprecated Node modules issue." Keliatannya legitimate — repo publik, commit history rapi, author-nya developer beneran dengan profil LinkedIn dan GitHub aktif.

Satu npm install doang. Itu yang mereka tunggu.

Ini bukan skenario fiksi. Ini kejadian nyata yang dialami Roman Imankulov, full-stack Python developer, minggu lalu. Dan kalau lu developer yang lagi job hunting atau open to work, lu bisa jadi target berikutnya.

Apa yang Terjadi?

Roman dihubungi "recruiter" lewat LinkedIn. Profilnya keliatan asli — ada foto, pengalaman kerja, koneksi. Mereka ngobrol santai beberapa hari. Recruiter-nya cerita soal startup crypto yang butuh lead engineer buat ngerjain proof-of-concept yang "rusak." Lalu dia dikasih repo GitHub publik buat direview.

Instruksinya sederhana: "Check out the deprecated Node modules issue."

Nah, di titik ini insting Roman jalan. Dia nggak langsung clone dan npm install. Dia spin up VPS throwaway, clone repo di sana, dan pakai AI agent (Pi CLI) dalam mode read-only buat review kode.

AI agent-nya berhenti hampir seketika di file app/test/index.js.

Gimana Backdoor-nya Bekerja?

Repo ini keliatan kayak React frontend + Node backend biasa. Tapi jebakannya ada di app/test/index.js — sekitar 250 baris kode yang menyamar sebagai test suite.

Di dalam file itu, sebuah URL disusun dari potongan string:

const protocol = "https";
const domain = "store";
const separator = "://";
const path = "/icons/";
const token = "77";
const subdomain = "rest-icon-handler";

Potongan-potongan itu digabung jadi https://rest-icon-handler.store/icons/77. Lalu, di antara dinding kode test yang dikomen, payload-nya menjalankan apa pun yang dikirim server itu ke mesin korban. Iya, apa pun. Bisa keylogger, ransomware, reverse shell — terserah penyerang.

Cara trigger-nya juga licin. Bukan lewat npm test atau perintah eksplisit. Cukup npm install:

  • package.json punya script "prepare": "node app/index.js"
  • npm otomatis menjalankan prepare setelah npm install
  • app/index.js langsung require('./test') — yang isinya backdoor

Ini bukan malware canggih. Nggak ada exploit zero-day, nggak ada obfuscation tingkat dewa. Cukup social engineering + abuse fitur bawaan npm. Dan itulah yang bikin serem: nggak perlu skill hacking tinggi buat jadi korban.

Dua Identitas Palsu dalam Satu Operasi

Yang bikin cerita ini makin gila: penyerangnya curi dua identitas asli sekaligus.

Pertama, identitas developer. Semua commit di repo itu diatribusikan ke developer sungguhan — full-stack engineer dengan LinkedIn, website pribadi, dan GitHub account yang aktif bertahun-tahun. Roman kontak developer ini dan nanya soal "proyek lamanya." Developer itu kaget — dia nggak pernah kerja buat startup crypto mana pun. Ini bukan pertama kali dia diimpersonasi; repo palsu sebelumnya udah pernah di-take-down.

Kedua, identitas recruiter. Profil LinkedIn "recruiter" itu milik jurnalis seni sungguhan — seorang yang cukup dikenal, dengan latar belakang budaya panjang dan nol konten teknis. Tapi begitu Roman pura-pura kesulitan install proyeknya, "jurnalis" ini tiba-tiba jago debat soal versi Node dan npm.

Keduanya — developer dan jurnalis — adalah orang nyata yang identitasnya dicuri. Repo GitHub-nya pun masih online sampai sekarang meskipun udah direport.

Kenapa Ini Bahaya Buat Lo?

Roman sendiri ngaku: "I've heard of these attacks and read about them on HN, but when one came after me it still caught me a bit off guard."

Di hari yang lebih capek atau buru-buru, dia bisa aja langsung npm install tanpa mikir dua kali. Dan itu poin pentingnya: serangan ini nargetin momen ketika lo nggak waspada.

Beberapa alasan kenapa ini sangat berbahaya buat developer Indonesia:

  • Job market tech lagi kompetitif. Banyak developer lagi aktif job hunting. Fake recruiter dengan technical challenge adalah social engineering yang relatable.
  • Nggak perlu exploit canggih. NPM prepare script adalah fitur, bukan bug. Banyak developer nggak sadar bahwa npm install bisa ngejalanin kode arbitrer.
  • Identitas terverifikasi bukan jaminan. Profil LinkedIn verified, GitHub history panjang, commit author jelas — semua bisa dipalsuin. Trust but verify.
  • Supply chain attack makin personal. Dulu serangan supply chain massal (kayak event-stream atau colors.js). Sekarang udah naik level: ditargetin langsung ke individu.

Cara Aman Review Kode dari Stranger

Kalau lu dapet technical challenge atau repo dari orang yang belum lu kenal, ini checklist yang bisa lu pakai:

  1. Jangan clone + install di mesin utama lu. Pakai VM, container, atau VPS throwaway. Kalau nggak mau ribet, Docker container dengan network isolated udah cukup.
  2. Review dulu package.json. Cek script prepare, preinstall, postinstall. Kalau ada yang nyuruh jalanin Node di luar test/build — curigai.
  3. Gunakan AI agent read-only. Kayak yang Roman lakuin — arahin AI agent cuma dengan tools read, grep, find. Tanpa bash, tanpa write. Hasil dari story ini: AI agent nemuin backdoor dalam hitungan detik.
  4. Baca file yang nggak biasa. File test/index.js yang panjang + banyak kode dikomenin = red flag. Begitu juga file dengan URL yang disusun dari string fragments.
  5. Verifikasi recruiter. Cek profil mereka di luar LinkedIn. Cari GitHub, website pribadi, Twitter. Cross-check informasi. Kalau recruiter tech tiba-tiba nggak ngerti istilah teknis dasar — atau kebalikannya, jurnalis non-tech tiba-tiba jago npm — lari.

Supply Chain Attack: Dari Massal ke Personal

Gua udah beberapa kali bahas supply chain attack di blog ini. Dari LiteLLM yang masuk CISA KEV, skill AI agent yang bisa jadi attack surface, sampai malware atomic-lockfile di AUR Arch Linux.

Tapi kasus LinkedIn ini beda. Ini bukan malware yang disebar massal berharap ada yang kena. Ini targeted attack ke individu — personal, sabar, dan memanfaatkan konteks spesifik korban (lagi job hunting).

Polanya mirip spear-phishing di dunia korporat, tapi targetnya developer individual. Dan payload-nya bukan link phishing, tapi repo GitHub yang keliatan legitimate.

Ini warning keras: developer sekarang jadi high-value target. Bukan cuma perusahaan, tapi individu developernya langsung. Karena satu akses developer bisa membuka pintu ke infrastructure, credentials, dan codebase yang lebih luas.

Takeaway

Serangan ini belum tentu yang terakhir. Polanya udah ketahuan, dan kemungkinan makin banyak yang akan nyoba. Tiga hal yang perlu lu inget:

  • Paranoia sehat itu aset. Kalau sesuatu terasa off, investigasi dulu. Waktu ekstra 10 menit lebih murah daripada credential yang bocor.
  • Isolated environment is your friend. Container 5 menit setup bisa nyelametin lo dari insiden berbulan-bulan.
  • AI agent bisa jadi alat defensif. Ini plot twist menarik — AI agent yang biasanya lo pakai buat nulis kode, kali ini dipakai buat nemuin backdoor.

Gua sendiri setelah baca cerita Roman jadi makin hati-hati. Bukan paranoia berlebihan, tapi security hygiene dasar yang sering kelupaan pas lagi semangat-semangatnya dapat "opportunity."

Jadi, kalau besok ada recruiter LinkedIn yang ngasih lo repo, lu udah tahu apa yang harus dicek duluan.


Referensi / Bacaan Lanjut