Ekstensi resmi bisa berubah menjadi pintu masuk penyerang tanpa mengubah satu pun tampilan di layar. Itulah pelajaran dari insiden di marketplace Cursor pada akhir Oktober. Salinan ekstensi Claude Code yang sudah dimodifikasi beredar selama sekitar 11 jam, dan ribuan developer memasangnya tanpa ada tanda yang terlihat. Artikel ini membedah kronologi insiden, cara kerja backdoor, dan langkah konkret untuk memeriksa mesin yang mungkin terpapar.
Insiden ini membuktikan satu hal: nama publisher besar bukan jaminan keamanan. Versi 2.1.312 dan 2.1.313 dari ekstensi Anthropic.claude-code yang beredar di marketplace Cursor pada 29 Oktober bukan buatan Anthropic. Kode di dalamnya mencoba memasang backdoor SSH yang persisten di mesin developer. Cursor memperkirakan paparan mencapai 5.000 pengguna. Angka itu masih estimasi, bukan jumlah mesin yang benar-benar berhasil ditembus, karena cacat pada kode malware itu sendiri menggagalkan sebagian serangan.
Saya menilai insiden ini penting bukan karena skalanya, melainkan karena mekanismenya. Penyerang tidak perlu mengelabui pengguna dengan tautan palsu atau situs tiruan. Penyerang cukup menaruh kode berbahaya di kanal distribusi yang sudah dipercaya, lalu membiarkan mekanisme update otomatis bekerja. Developer yang tidak pernah mengklik apa pun tetap bisa menerima versi berbahaya.
Pelajaran paling praktis dari insiden ini ada tiga. Pertama, periksa versi ekstensi Claude Code bila memakai Cursor, lalu pastikan versi yang terpasang adalah 2.1.314 atau lebih baru. Kedua, periksa file authorized_keys untuk kunci asing berlabel svc-telemetry, karena menghapus ekstensi saja tidak membersihkan backdoor. Ketiga, matikan update otomatis untuk ekstensi yang memegang akses sensitif, atau terapkan kebijakan instalasi yang lebih ketat di tingkat tim.
Menurut pemberitahuan keamanan Cursor, versi yang sudah dimodifikasi mulai tersedia sekitar pukul 02.27 waktu Pasifik pada 29 Oktober dan baru ditarik sekitar pukul 13.35 di hari yang sama. Jendela paparan itu berlangsung sekitar 11 jam. Dua versi yang terdampak adalah 2.1.312 dan 2.1.313, untuk Windows dan macOS. Anthropic merilis versi bersih 2.1.314 beberapa jam setelah versi berbahaya muncul.
Cursor menutup seluruh marketplace sebagai langkah pencegahan, mengaudit isinya, merotasi kunci internal, membangun ulang layanan marketplace, lalu membukanya kembali. Perusahaan itu juga bekerja sama dengan penyedia hosting untuk mematikan server yang dipakai penyerang sebagai pendengar terowongan SSH. Cursor menyatakan tidak ada bukti ekstensi lain yang ikut dimodifikasi, dan Anthropic menegaskan sistem internalnya tidak dikompromikan.
Satu pertanyaan besar masih belum terjawab sampai artikel ini ditulis: bagaimana penyerang bisa mempublikasikan build yang sudah dimodifikasi di bawah nama Anthropic. Cursor belum menjelaskan mekanisme penyusupan ke marketplace. Anthropic juga belum mengeluarkan peringatan langsung kepada pelanggan. Kekosongan penjelasan ini yang membuat insiden terasa mengganggu. Tanpa tahu celahnya, pengguna lain sulit memastikan insiden serupa tidak terulang di kanal yang sama.
Perlu dicatat bahwa klaim awal soal npm, Open VSX, dan Microsoft VS Code Marketplace ikut terdampak terbukti keliru. Cursor kemudian dikonfirmasi sebagai satu-satunya sumber yang mendistribusikan ekstensi berbahaya itu. Pengguna VS Code biasa, pengguna Open VSX, dan pengguna Claude Code lewat terminal atau aplikasi desktop tidak terdampak.
Analisis Microsoft, Sophos, dan StepSecurity menunjukkan pola serangan yang rapi. Penyerang menyisipkan loader JavaScript sepanjang 66 baris di awal bundle utama ekstensi. Loader itu berjalan begitu ekstensi dimuat, sebelum fungsi aktivasi ekstensi dipanggil. Kode asli ekstensi dibiarkan utuh, sehingga perilaku sehari-hari ekstensi tampak normal.
Loader itu lebih dulu mengumpulkan informasi mesin: nama host, nama pengguna, sistem operasi, arsitektur, direktori kerja, alamat email Git yang terkonfigurasi, dan alamat IP publik. Data itu memberi penyerang peta awal tentang mesin target. Langkah berikutnya lebih berbahaya. Kode mencoba menambahkan kunci publik SSH milik penyerang, berlabel svc-telemetry, ke file authorized_keys pengguna. Kunci itu memberi penyerang jalur masuk ke mesin lewat SSH.
Setelah kunci terpasang, malware mencoba mengaktifkan layanan SSH lokal dan membuka terowongan SSH balik ke server penyerang di alamat 134.209.82.225. Terowongan itu dicoba ulang sekitar setiap 60 detik. Mekanisme persistensi dipasang lewat LaunchAgent di macOS dan scheduled task di Windows, sehingga upaya koneksi terus berjalan meski editor ditutup dan dibuka lagi.
Cacat pada kode malware menyelamatkan banyak mesin. Di macOS, malware memeriksa status Remote Login tanpa hak administrator, mendapat galat akses, lalu melewatkan langkah pengaktifan SSH. Di Windows, malware mencoba menjalankan PowerShell lewat /bin/sh, shell Unix yang tidak ada di Windows standar, sehingga penyiapan SSH gagal. Phorion, firma keamanan yang meneliti sampel malware, menilai cacat ini kemungkinan besar menggagalkan akses penyerang di banyak sistem.
Cacat itu bukan alasan untuk tenang. Kunci SSH tetap terpasang di mesin yang sempat menjalankan ekstensi berbahaya. Data mesin tetap terkirim keluar. Di mesin yang layanan SSH-nya memang sudah aktif, terowongan bisa bekerja. Cursor sendiri menulis dengan tegas di pemberitahuan keamanannya bahwa menghapus ekstensi saja mungkin tidak cukup. Pembersihan harus menyentuh kunci dan skrip persistensi yang sudah ditanam di luar folder ekstensi.
Model keamanan marketplace selama ini bertumpu pada identitas publisher. Nama Anthropic yang tampil di listing memberi sinyal bahwa paket itu resmi. Insiden ini mematahkan asumsi itu. Build berbahaya membawa ID publisher yang sah, nama yang benar, dan nomor versi yang tampak wajar. Semua pemeriksaan berbasis nama lolos. Satu-satunya hal yang membedakan build berbahaya dari build asli adalah isi kodenya, dan isi itu tidak terlihat dari halaman marketplace.
Masalahnya lebih dalam dari satu marketplace. Cursor memakai marketplace sendiri yang terpisah dari Microsoft VS Code Marketplace. Setiap fork editor yang menjalankan toko ekstensi sendiri menambah satu kanal distribusi baru, lengkap dengan kontrol akses dan proses publikasinya sendiri. Pengguna yang memasang ekstensi dari kanal itu mewarisi seluruh risiko proses di baliknya, tanpa visibilitas apa pun.
Pemeriksaan berbasis daftar publisher yang diizinkan juga tidak membantu di kasus ini. Daftar itu memeriksa nama publisher, dan nama di listing memang Anthropic. Pin versi tidak membantu bila versi yang dipin justru versi yang sudah diganti isinya. Nomor versi adalah label yang diketik pengirim, bukan segel yang mengikat isi paket.
Kontrol yang terbukti efektif dalam simulasi adalah kunci hash, atau digest lockfile. Hash mengikat isi paket yang sebenarnya. Bila isi berubah satu bit saja, hash tidak cocok dan instalasi ditolak dengan alasan yang jelas. Pendekatan ini menuntut tim menyimpan hash build yang sudah diverifikasi dan menolak apa pun yang tidak cocok. Cara ini lebih merepotkan daripada mengandalkan nama publisher, dan insiden Cursor menunjukkan bahwa kerepotan itu punya harga yang masuk akal.
Di hari yang sama, peneliti dari Forever Security juga mengungkap celah eksekusi kode lewat browser bawaan Cursor dan perkakas AI lain. Celah itu sudah dilaporkan ke Cursor pada 10 September dan ditambal diam-diam pada 1 Oktober. Dua insiden dalam satu hari mempertegas bahwa permukaan serangan pada editor berbasis AI lebih luas dari yang terlihat dari luar.
Cursor memperbarui ekstensi secara otomatis secara bawaan. Pengaturan ini menjelaskan mengapa paparan bisa mencapai ribuan pengguna dalam 11 jam. Banyak korban tidak pernah membuka halaman marketplace pada hari itu. Versi berbahaya datang sendiri lewat mekanisme update yang dirancang untuk kenyamanan.
Update otomatis punya logika yang kuat di kondisi normal. Patch keamanan sampai cepat, pengguna tidak perlu mengingat jadwal update, dan versi lama yang rentan cepat hilang dari peredaran. Logika itu berbalik begitu kanal distribusi sendiri yang dikompromikan. Mekanisme yang sama yang mempercepat patch justru mempercepat penyebaran malware. Kecepatan menjadi pedang bermata dua.
Pengguna individu punya opsi sederhana: matikan update otomatis untuk ekstensi, lalu perbarui secara manual setelah memberi jeda. Jeda satu atau dua hari memberi waktu bagi komunitas keamanan untuk menemukan masalah pada rilis baru. Cara ini menukar sedikit kenyamanan dengan jendela deteksi yang jauh lebih lebar.
Tim yang lebih besar butuh pendekatan yang lebih sistematis. Satu opsi adalah cincin canary, yaitu kelompok kecil mesin yang menerima update lebih dulu dan dipantau ketat sebelum update diteruskan ke seluruh tim. Simulasi terhadap insiden Cursor menunjukkan cincin canary dengan pemeriksaan authorized_keys dan item startup bisa menangkap payload di satu mesin dan menghentikan peluncuran. Cincin tanpa pemeriksaan tidak berguna, karena jendela 11 jam cukup panjang untuk menembus seluruh tim.
Opsi lain adalah memindahkan kunci rilis dan kredensial penting ke CI, bukan ke mesin developer. Langkah ini tidak mencegah backdoor masuk ke laptop, tetapi membatasi apa yang bisa dicuri dari laptop itu. Dalam simulasi yang sama, mesin tetap terpapar, tetapi tidak ada kunci rilis yang bocor.
Tabel berikut merangkum status setiap versi dan kanal distribusi berdasarkan pemberitahuan Cursor dan laporan yang sudah terverifikasi.
| Versi atau Kanal | Status | Catatan |
|---|---|---|
| Claude Code 2.1.312 (Cursor) | Berbahaya | Build yang sudah dimodifikasi, beredar 29 Oktober |
| Claude Code 2.1.313 (Cursor) | Berbahaya | Build yang sudah dimodifikasi, beredar 29 Oktober |
| Claude Code 2.1.314 (Cursor) | Aman | Build bersih pengganti, lewati nomor versi yang tercemar |
| Microsoft VS Code Marketplace | Tidak terdampak | Versi resmi di kanal ini bersih |
| Open VSX | Tidak terdampak | Bukan sumber distribusi build berbahaya |
| npm | Tidak terdampak | Paket npm tidak tercemar |
| Claude Code CLI dan aplikasi desktop | Tidak terdampak | Hanya ekstensi editor di Cursor yang kena |
Saya menyusun langkah-langkah berikut berdasarkan pemberitahuan keamanan Cursor dan analisis Microsoft, Sophos, dan StepSecurity.
Langkah pertama adalah memastikan versi ekstensi. Buka panel ekstensi di Cursor dan lihat versi Anthropic.claude-code yang terpasang. Versi 2.1.312 atau 2.1.313 berarti mesin masuk dalam jendela paparan. Perbarui ke 2.1.314 atau versi yang lebih baru, tetapi jangan berhenti di situ, karena update tidak menghapus jejak yang sudah ditanam.
Langkah kedua adalah memeriksa kunci SSH. Cari kunci berlabel svc-telemetry di file authorized_keys. Di macOS dan Linux, file itu ada di folder .ssh pada home directory. Di Windows, periksa lokasi konfigurasi SSH yang setara. Kunci asing yang ditemukan harus dihapus. Cursor menyediakan skrip remediasi resmi, remediate-macos.sh untuk macOS dan remediate-windows.ps1 untuk Windows, yang membantu membersihkan kunci dan payload.
Langkah ketiga adalah memeriksa mekanisme persistensi. Periksa LaunchAgent di macOS dan scheduled task di Windows untuk entri yang tidak dikenal dan merujuk ke skrip yang mencurigakan. Hapus entri itu. Periksa juga proses SSH yang berjalan dan koneksi keluar yang tidak dikenal, terutama ke alamat IP yang sudah dipublikasikan sebagai indikator kompromi.
Langkah keempat adalah rotasi kredensial. Bila mesin terpapar, anggap kredensial yang tersimpan di mesin itu sudah berisiko. Rotasi kunci SSH, token API, dan token akses repositori yang pernah dipakai dari mesin tersebut. Langkah ini memang merepotkan, tetapi jauh lebih murah daripada menangani penyalahgunaan kredensial yang baru ketahuan berminggu-minggu kemudian.
Pengguna VS Code biasa tidak perlu menjalankan langkah-langkah ini untuk insiden ini. Kanal distribusi yang dipakai tidak terdampak. Pembedaan ini penting, karena kepanikan yang menyebar ke pengguna yang tidak terdampak hanya menghabiskan waktu dan perhatian yang seharusnya dipakai untuk memeriksa mesin yang benar-benar terpapar.
Insiden ini memberi bahan yang konkret untuk menyusun kebijakan instalasi ekstensi di tim. Kebijakan yang baik tidak melarang semua ekstensi, melainkan membedakan ekstensi berdasarkan akses yang dimilikinya. Ekstensi yang berjalan di dalam editor mewarisi izin proses editor, termasuk akses ke file, variabel lingkungan, dan terminal. Ekstensi seperti itu layak mendapat pengawasan yang lebih ketat daripada ekstensi tema warna.
Satu kebijakan yang masuk akal adalah daftar ekstensi yang disetujui, lengkap dengan hash build yang sudah diverifikasi. Tim menyimpan hash itu dan menolak instalasi yang tidak cocok. Kebijakan ini menuntut proses peninjauan setiap kali ekstensi diperbarui, dan beban itu nyata. Insiden Cursor memberi angka pembanding yang jelas: 11 jam paparan dan hingga 5.000 pengguna. Beban peninjauan terasa kecil di samping angka itu.
Kebijakan kedua adalah pemisahan lingkungan. Mesin yang memegang kunci rilis, akses produksi, dan kredensial sensitif tidak seharusnya memakai konfigurasi yang sama dengan mesin eksperimen. Pemisahan ini membatasi radius ledakan ketika satu mesin terpapar. Backdoor di laptop eksperimen tetap masalah, tetapi tidak langsung berubah menjadi akses produksi.
Kebijakan ketiga adalah pemantauan perubahan yang tidak biasa di mesin developer. Perubahan pada file authorized_keys, item startup baru, dan proses SSH yang muncul tanpa sebab adalah sinyal yang bisa dideteksi secara otomatis. Tim yang sudah memantau sinyal ini akan mendapat peringatan dalam hitungan menit, bukan setelah membaca berita beberapa hari kemudian.
Terakhir, tim perlu jalur pelaporan insiden yang jelas. Ketika berita seperti ini muncul, setiap anggota tim harus tahu apa yang diperiksa dan ke mana melaporkan temuan. Kebingungan di jam-jam pertama insiden sering lebih merugikan daripada insiden itu sendiri. Daftar periksa yang singkat dan sudah dibagikan sebelumnya menyelesaikan sebagian besar kebingungan itu.
Topik ini terhubung dengan analisis lain di Grafisify. Agen AI yang Bermain Sendiri Saat Ditinggal membahas risiko ketika agen AI berjalan tanpa pengawasan, pola yang sama dengan update otomatis yang berjalan tanpa persetujuan. Kuburan AI: Kenapa Produk dan Startup AI Gagal mengulas kegagalan produk AI dari sisi yang berbeda, tetapi pesannya sejalan, yaitu kepercayaan pada teknologi baru harus diuji, bukan diasumsikan. Insiden Sertifikat emSign: Segera Update pip ke 26.2.2 adalah contoh lain ketika satu komponen rantai pasok bermasalah dan memaksa tindakan cepat di banyak mesin. Anatomi PHP2Shell: Penyebab, Dampak, dan Cara Menanganinya membedah celah kritis dari sisi teknis dengan pendekatan yang sama, yaitu kronologi, mekanisme, lalu perbaikan. Retak di Balik Booming Belanja AI: Siapa yang Bayar? menutup rangkaian ini dengan pertanyaan tentang siapa yang menanggung biaya ketika booming teknologi bergerak lebih cepat daripada pengamanannya.
Insiden Cursor bukan cerita tentang satu marketplace yang ceroboh. Insiden ini adalah pengingat bahwa seluruh rantai pasok perangkat lunak berdiri di atas kepercayaan, dan kepercayaan itu bisa disalahgunakan di titik mana pun. Nama besar, centang verifikasi, dan nomor versi yang rapi tidak lagi cukup sebagai bukti keamanan. Bukti yang kuat adalah hash yang cocok, pemeriksaan yang berjalan, dan jeda yang memberi waktu untuk deteksi.
Saya menyarankan tiga tindakan yang bisa dilakukan hari ini. Periksa versi ekstensi Claude Code bila memakai Cursor. Periksa file authorized_keys untuk kunci svc-telemetry. Terapkan jeda update atau cincin canary untuk ekstensi yang memegang akses sensitif. Tiga tindakan ini tidak membutuhkan anggaran atau perkakas baru. Tindakan ini hanya membutuhkan kebiasaan untuk memeriksa sebelum percaya.
Untuk bacaan lanjutan, panduan Mag212 menguraikan cara memeriksa PC atau Mac yang terpapar, sementara TechStaged memilah fakta yang terverifikasi dari klaim yang belum terbukti. Design to Deploy menyajikan kronologi yang rapi beserta langkah pemeriksaan, dan Privacy Needle menguraikan detail teknis payload untuk pembaca yang ingin memahami mekanismenya lebih dalam.