Asisten pengkodean AI Anda bisa saja menulis ulang kunci SSH Anda tanpa Anda sadari. Wiz Research mengungkap celah “GhostApproval” yang memungkinkan symlink project_settings.json yang berbahaya mengarah ke kunci privat, dan dialog persetujuan per-tindakan yang muncul hanya menampilkan nama symlink tersebut. Setujui dialog tersebut, dan Anda baru saja memberikan akses tanpa batas kepada asisten tersebut ke kredensial Anda.

Cara kerja eksploitasi ini

  • Penyerang menambahkan file bernama project_settings.json ke dalam repositori.
  • File tersebut bukanlah file JSON biasa; itu adalah tautan simbolis (symlink) yang mengalihkan ke kunci privat ~/.ssh/id_rsa (atau yang setara) milik pengguna.
  • Saat pengembang meminta asisten AI untuk “menyiapkan workspace,” asisten tersebut mengikuti symlink dan bersiap untuk menulis ke file kunci SSH yang asli.
  • Dialog persetujuan yang muncul hanya mencantumkan project_settings.json. Dialog tersebut tidak mengurai symlink untuk menunjukkan jalur (path) sebenarnya di disk.
  • Mengklik “Approve” memberikan izin kepada asisten untuk memodifikasi kunci privat, yang secara efektif membahayakan identitas pengguna pada setiap layanan yang mempercayai kunci tersebut.

Bug ini muncul di enam alat yang banyak digunakan: Amazon Q Developer, Claude Code, Augment, Cursor, Google Antigravity dan Windsurf. Semuanya menampilkan dialog yang menyesatkan dengan cara yang sama karena UI hanya menampilkan nama yang diterimanya, bukan target yang telah diurai.

Mengapa dialog per-tindakan tidaklah cukup

Persetujuan per-tindakan mengasumsikan bahwa manusia dapat meninjau setiap operasi yang dilakukan AI. Dalam praktiknya, hal ini memaksa Anda untuk membuat penilaian yang sempurna setiap beberapa detik—sesuatu yang tidak bisa dilakukan siapa pun lebih cepat daripada tindakan agen tersebut.

Apa yang dilakukan vendor – dan mengapa hal ini penting

  • Amazon, Google, dan Cursor sudah memperbaikinya.
  • Anthropic (pembuat Claude Code) menyatakan bahwa pengguna hanya boleh menyetujui apa yang mereka pahami. Hal ini mengabaikan beban kognitif dalam mendeteksi symlink dan berasumsi bahwa pengguna dapat mengaudit setiap jalur file secara instan—sebuah ekspektasi yang tidak realistis.
  • Cursor juga mengungkapkan masalah terpisah, yang dijuluki DuneSlide, yang memungkinkan penyerang mengeksekusi kode pada mesin tanpa adanya perintah persetujuan. Perusahaan tersebut telah menambal bug tersebut, menunjukkan betapa cepatnya asisten ini dapat menjadi vektor serangan ketika pemeriksaan izin lemah.

Perbedaan respons ini menimbulkan pertanyaan yang lebih mendalam: haruskah keamanan berupa dialog setelah kejadian, atau batasan yang telah ditentukan sebelumnya yang tidak boleh dilanggar oleh asisten?

Izin berbasis cakupan (Scoped permissions): alternatif praktis

Alih-alih meminta persetujuan untuk setiap operasi file, pengembang dapat menetapkan cakupan (scope) bagi asisten sebelum dijalankan:

  • Tentukan pohon direktori (misalnya, /src) yang boleh dibaca atau ditulis oleh AI.
  • Setiap upaya untuk menyentuh file di luar pohon tersebut—seperti ~/.ssh/id_rsa—akan diblokir oleh sistem operasi atau lapisan sandbox.
  • Cakupan ditetapkan sekali saja, mengurangi jumlah keputusan yang harus dibuat manusia sambil tetap membatasi dampak asisten tersebut.

Pemberian cakupan menggeser model keamanan dari “tanya setiap saat” menjadi “izinkan hanya apa yang diperlukan.” Ini mencerminkan bagaimana runtime kontainer dan OS seluler melakukan sandbox pada aplikasi, sehingga membatasi kerusakan saat terjadi kesalahan.

Apa yang perlu diperhatikan selanjutnya

  • Peluncuran vendor: Pantau catatan pembaruan dari enam alat yang terdampak.

Intinya

Eksploitasi GhostApproval membuktikan bahwa mempercayai dialog pop-up memberikan rasa aman yang palsu. Sampai setiap asisten pengkodean AI mengurai symlink dan menampilkan jalur lengkap, pengembang harus menerapkan izin tulis berbasis cakupan—memberitahu asisten dengan tepat di mana ia dapat bekerja sebelum dimulai. Perubahan sederhana tersebut memblokir kelas serangan yang paling berbahaya tanpa menambah kelelahan karena terlalu banyak mengklik.

Sumber: dev.to/girish_r/your-coding-agents-approval-dialog-is-lying-to-you-ih1