Deretan kata sandi dan kunci API milik pengembang yang dimasukkan ke baris perintah Claude Code kini tergeletak di repositori publik GitHub sehingga dapat dibaca siapa pun. Ketika pengembang memilih opsi "Yes, and don't ask again," asisten pemrograman AI besutan Anthropic ini merekam perintah shell tersebut secara utuh, lengkap bersama data kredensial sensitif di dalamnya, ke berkas konfigurasi proyek.
Perusahaan keamanan siber Apiiro mengumumkan kemarin bahwa 1.122 salinan berkas publik tersebut kedapatan menampung setidaknya satu kunci rahasia, meski mereka tidak menguji apakah setiap kunci masih aktif atau sudah kedaluwarsa. Salah satu korporasi yang diberi tahu oleh peneliti pada awal pekan ini mengonfirmasi secara resmi bahwa token mereka benar-benar masih berfungsi saat ditemukan.
Nama dokumen konfigurasi lokal tersebut adalah .claude/settings.local.json. Menghapus berkas itu dari repositori tidak serta-merta menyelesaikan insiden kebocoran, sebab versi terdahulu tetap tersimpan dalam riwayat git maupun salinan forking repositori bersangkutan. Langkah penanganan mendesak dari para investigator adalah memprioritaskan rotasi kunci: segera perbarui dan ganti semua kata sandi, token akses, serta kunci API apa pun yang pernah tersimpan di sana, baru kemudian membersihkan berkas fisiknya.
Bagaimana Kunci Rahasia Mendarat di Berkas Konfigurasi
Secara bawaan, Claude Code meminta izin persetujuan pengguna sebelum mengeksekusi sebagian besar baris perintah shell di komputer. Jika pengembang memilih "Yes, and don't ask again," sistem menuliskan aturan izin eksekusi otomatis ke .claude/settings.local.json di folder proyek tersebut, sesuai dokumentasi sistem perizinan resminya. Semua perintah dengan format serupa nantinya dieksekusi secara otomatis tanpa konfirmasi ulang pada sesi kerja berikutnya.
Aturan pengecualian tersebut hanya berlaku terbatas pada teks yang diajukan oleh dialog perintah. Terkadang bentuknya menyerupai pola umum perintah, misalnya npm test *, namun tak jarang berupa instruksi baris perintah yang persis. Saat perintah yang tersimpan merupakan baris perintah persis, setiap kata sandi maupun token pengaman yang diketikkan di dalamnya turut disimpan utuh dalam bentuk teks biasa yang tidak terenkripsi.
Pada berkas-berkas publik yang ditemukan, para peneliti menjumpai rekaman baris perintah lengkap dengan kredensial rahasia yang masih melekat, bahkan mereka sukses mereplikasi kelemahan mekanisme ini memakai model Opus 5.5 serta Fable 5.1.
Claude Code sejatinya memiliki mekanisme untuk menjauhkan berkas tersebut dari pelacakan git. Saat pertama kali menulis berkas tersebut di repositori git, sistem menambahkan nama berkas ke konfigurasi global git excludes milik akun pengguna, sebagaimana tertulis dalam dokumentasi pengaturannya. Perangkat lunak git pada komputer itu nantinya otomatis mengabaikan berkas tersebut di semua repositori lokal.
Namun, perlindungan konfigurasi itu hanya bekerja menetap pada pengaturan git satu komputer milik satu pengguna. Proteksi tersebut tidak berguna terhadap berkas yang sudah telanjur tersimpan dan terunggah ke commit git. Claude Code tidak pernah menyisipkan nama berkas tersebut ke dalam dokumen .gitignore lokal milik proyek, sehingga lapisan pengaman itu tidak terbawa saat proyek dipindahkan atau diakses bersama.
Dari total 1.105 repositori publik yang dilacak secara mendalam oleh peneliti, sebanyak 539 repositori menunjukkan adanya commit perubahan berkas konfigurasi yang mencantumkan akun Claude sebagai co-author secara langsung. Fakta ini membawa peneliti pada kesimpulan bahwa Claude sendiri yang sering kali melakukan commit dokumen tersebut ke repositori.
Temuan Investigasi Keamanan Apiiro
Penyelidikan Apiiro di repositori publik GitHub menemukan total 104.185 salinan dokumen pengaturan tersebut yang tersebar di 103.617 repositori terpisah, sebagaimana dipaparkan dalam laporan penelitian mereka. Sekitar 1,1 persen di antaranya, atau setara dengan 1.122 salinan dokumen, terbukti menyimpan setidaknya satu kunci kredensial sensitif. Seluruh dokumen tersebut mengekspos 1.379 rahasia autentikasi yang berbeda.
Sebuah nilai dinilai sahih sebagai rahasia apabila cocok dengan pola struktur kunci yang sudah lazim dikenali, atau jika ditemukan kata sandi dan token yang ditempatkan tepat di samping alamat server publik. Pemeriksaan berbasis kecerdasan buatan peninjau juga diwajibkan untuk memvalidasi temuan itu. Peneliti tidak membeberkan apakah ada pihak luar yang telah memanfaatkan data sensitif tersebut.
Lebih dari sepertiga data sensitif yang terekspos mampu memberikan akses langsung ke sistem basis data, mencakup 379 kata sandi database. Entri lainnya melibatkan 43 akun masuk SSH untuk server publik, 42 token autentikasi akun GitHub, GitLab, serta npm, ditambah dengan 23 kunci akses layanan komputasi awan AWS.
Di antara pemilik berkas yang terekspos ini, terdata 63 entitas organisasi terdaftar, yang mayoritasnya merupakan perusahaan pengembang peranti lunak dari berbagai skala. Temuan paling krusial mencakup kunci cloud berlevel hak akses admin milik salah satu vendor basis data ternama, serta kata sandi hak milik tertinggi untuk pangkalan data rekam medis pasien.
Hingga Senin lalu, setiap berkas konfigurasi yang mengandung kredensial rahasia itu masih terpampang di cabang utama repositori, dan pada separuh repositori tersebut dokumen sensitif telah terbengkalai tanpa penanganan selama setidaknya 217 hari.
Versi riwayat berkas masa lalu tercatat menyimpan 734 kunci rahasia tambahan pada 509 repositori yang tidak terlihat pada salinan versi teranyar saat ini, umumnya diakibatkan oleh tindakan penghapusan berkas semata. Keberadaan salinan cabang atau forking semakin memperluas kebocoran: sebanyak 211 forking dari 74 repositori induk membawa data kredensial rahasia yang identik dengan repositori asalnya.
Kredensial rahasia juga ditemukan pada 298 dari 76.011 salinan berkas bersama .claude/settings.json, yakni berkas konfigurasi tim yang sengaja di-commit bersama repositori, utamanya tersimpan di dalam baris aturan perizinan. Jika dihitung bersama versi riwayat lama dan catatan log obrolan agen yang tersimpan, angkanya menembus 2.539 rahasia di 1.994 repositori.
Dari total 16 peranti agen pengodean otomatis yang dikaji dokumentasinya oleh peneliti, Claude Code adalah satu-satunya asisten yang terbukti secara baku menyimpan seluruh perintah yang telah disetujui ke dalam berkas konfigurasi lokal proyek.
Salinan dokumen lokal yang tidak pernah terunggah ke repositori GitHub sekalipun tetap membawa risiko kerentanan. Dokumen tersebut adalah berkas teks JSON biasa di direktori proyek yang berpotensi ikut terkemas secara tidak sengaja ke dalam paket npm, citra kontainer Docker, arsip zip, maupun folder yang terhubung sinkronisasi cloud.
Malware sebelumnya memang tercatat aktif mengendus kunci rahasia di komputer pengembang. Pada September 2025, worm Shai-Hulud terdeteksi menjalankan pemindai TruffleHog pada komputer-komputer yang terinfeksi, di mana pemindai tersebut berhasil mendeteksi lebih dari separuh dokumen sebagai berkas kunci kredensial berharga.
Alat pemindai rahasia konvensional ternyata kerap melewatkan dokumen-dokumen ini. Peneliti menjalankan pemindaian gitleaks dan TruffleHog pada seluruh salinan tanpa mengaktifkan tahap verifikasi bawaan. Dari 1.122 berkas yang terbukti bocor, gitleaks mendeteksi 564 berkas dan TruffleHog mendeteksi 643 berkas, sementara 215 berkas sisanya luput dari pengawasan kedua sistem tersebut.
Mayoritas kegagalan deteksi berasal dari kata sandi yang disematkan langsung di dalam susunan perintah. Pemindai umumnya hanya mencari format token terstruktur, padahal kata sandi setelah sintaks PGPASSWORD=, sshpass -p, atau mysql -p tampak seperti teks biasa dalam baris perintah standar.
Laporan Permasalahan Sebelumnya
Pengguna Claude Code sejatinya telah berulang kali melaporkan perilaku penyimpanan berbahaya ini. Sebuah laporan bug terdahulu, yang diajukan pada 11 Agustus 2025, secara jelas memperingatkan bahwa baris instruksi yang disetujui beserta kunci API dan token di dalamnya tersimpan mentah pada berkas settings.local.json.
Namun, sistem robot otomatis menutup tiket pengaduan tersebut dengan status "not planned" pada 3 Januari, setelah terbiarkan selama 60 hari berturut-turut tanpa interaksi penanganan lanjutan.
Hingga kini, empat laporan keluhan serupa yang dirujuk oleh tim investigator telah resmi ditutup oleh robot otomatis yang sama, dengan penutupan paling anyar berlangsung kemarin. Seluruh laporan keluhan tersebut tidak memperoleh satu pun respons langsung dari pihak Anthropic.
