Seorang klien palsu telah menyelitkan repositori GitHub yang berniat jahat ke dalam peti masuk saya minggu ini, dan hanya dengan menjalankan skrip permulaan, ia telah memadamkan hasil kerja selama dua hari dan mendedahkan setiap kata laluan yang saya simpan dalam pelayar saya.
"Klien" tersebut telah memuat naik tawaran jawatan jurutera kanan dengan gaji tinggi, menghantar mesej dengan pantas, dan menghantar repositori yang kelihatan profesional. Permintaannya mudah: klon, jalankan npm run dev, dan hantar tangkapan skrin untuk membuktikan demo tersebut berfungsi—tanpa kontrak, tanpa semakan latar belakang. Sebaik sahaja pelayan pembangunan bermula, kod tersembunyi dalam fail konfigurasi telah menghubungi pelayan command-and-control (C2), mengambil muatan (payload) peringkat kedua, dan mula menyedut kredential daripada mesin tempatan.
Bagaimana serangan itu berlaku
Muatan berniat jahat tersebut berada di dalam postcss.config.js, sebuah fail yang biasanya diabaikan oleh kebanyakan pembangun kerana ia selalunya hanya mengandungi beberapa peraturan pemprosesan CSS yang ringkas. Dalam kes ini, penyerang telah menambah satu baris JavaScript yang dikaburkan (obfuscated) jauh ke sebelah kanan pernyataan yang sah, dengan ruang kosong tambahan supaya ia kelihatan semula jadi. Apabila arahan npm run dev menjalankan saluran paip (pipeline) PostCSS, baris tersembunyi tersebut berjalan tanpa disedari.
Perisian hasad tersebut melakukan tiga langkah secara berturutan:
- Hubungan C2 – ia membuka sambungan rangkaian ke pelayan yang dikawal oleh penyerang dan memaklumkan hos yang telah diceroboh.
- Muat turun peringkat kedua – ia menarik kod tambahan yang mengandungi logik penyahsaanan data (data-exfiltration) yang sebenar.
- Pencurian kredential pelayar – pada macOS, ia membuat pertanyaan terhadap kunci Chrome Safe Storage yang disimpan dalam system keychain. Jika pengguna meluluskan permintaan keychain tersebut, penyerang akan menuai setiap kata laluan yang disimpan dalam Chrome.
Selain kecurian serta-merta tersebut, muatan itu menulis dirinya sendiri ke dalam beberapa alatan pembangun yang biasa digunakan—VS Code, npm, Discord—supaya sebarang pelancaran aplikasi tersebut pada masa hadapan akan menjalankan semula kod berniat jahat itu. Memulakan semula (reboot) komputer tidak akan menghapuskan jangkitan tersebut; npm install yang seterusnya atau pembukaan editor akan menghidupkan semula pintu belakang (backdoor) tersebut.
Tanda amaran yang sering terlepas pandang
- Permintaan untuk menjalankan kod sebelum sebarang kontrak ditandatangani. Proses pengambilan pekerja yang sah biasanya melibatkan perjanjian rasmi sebelum sebarang kerja hak milik dikongsi.
- Fail mampat yang menyamar sebagai "ringkasan projek". Arkib Zip atau RAR boleh menyembunyikan skrip boleh laksana atau binari berniat jahat.
- Permintaan alamat e-mel peribadi untuk "memintas penapis platform". Taktik ini bertujuan untuk memindahkan perbualan keluar daripada platform yang dilindungi di mana penyalahgunaan boleh dilaporkan.
- Huraian kerja yang meminta calon membiayai dompet kripto atau membeli token ujian. Tuntutan sedemikian adalah tidak lazim bagi kerja pembangunan yang tulen.
Langkah praktikal untuk kekal selamat
- Jangan sekali-kali menjalankan kod orang asing tanpa pemeriksaan. Buka repositori dalam paparan baca-sahaja (contohnya, melalui paparan fail raw di GitHub) dan imbas setiap skrip, terutamanya fail konfigurasi dan entri
scriptsdalampackage.json. - Anggap semua lampiran sebagai teks biasa. Jika fail zip dihantar, ekstrak ia dalam persekitaran sandbox dan periksa kandungannya sebelum membuka apa-apa.
- Gunakan pengurus kata laluan khas dan bukannya storan pelayar. Walaupun keychain pelayar diceroboh, peti simpanan (vault) pengurus tersebut tetap terasing.
- Jalankan kod yang tidak dipercayai dalam mesin maya atau kontena yang terasing tanpa akses rangkaian. Ini menyekat keupayaan penyerang untuk menghubungi pelayan C2.
- Aktifkan pengesahan dua faktor (2FA) pada semua akaun. Jika kata laluan dicuri, faktor kedua akan menghalang log masuk tanpa kebenaran.
- Pastikan alatan pembangun sentiasa dikemas kini dan aktifkan semakan integriti automatik jika tersedia. Sesetengah editor kini memberi amaran apabila fail teras diubah suai secara tidak dijangka.
Jika anda mengesyaki telah menjalankan kod berniat jahat, anggaplah sistem anda telah diceroboh. Sandarkan (back up) data penting, padamkan pemacu (wipe the drive), dan pasang semula sistem operasi. Memulakan semula komputer tidak akan menghapuskan mekanisme persistensi yang menulis semula fail dalam aplikasi biasa.
Kesimpulannya: satu baris JavaScript tersembunyi boleh mengubah demo rutin menjadi operasi kecurian kredential yang besar. Anggap setiap repositori sebagai tidak dipercayai sehingga anda telah mengesahkannya, dan jadikan pengasingan sebagai sebahagian daripada aliran kerja lalai anda. Kos akibat terburu-buru dalam sekelip mata jauh lebih besar daripada usaha yang digunakan untuk menyemak semula sesuatu fail.
