Kredensial Pengembang Bocor di GitHub Lewat Berkas Konfigurasi Claude Code

Berbagai kata sandi serta token API yang diketikkan para pengembang ke dalam instruksi terminal saat disetujui di Claude Code terpapar bebas pada repositori publik GitHub.

Ketika seorang pemrogram menentukan opsi bertuliskan "Yes, and don't ask again," asisten pemrograman berbasis kecerdasan buatan rancangan Anthropic tersebut merekam instruksi terminal itu persis kata demi kata, termasuk seluruh data rahasia di dalamnya, ke dalam dokumen pengaturan proyek lokal.

Firma keamanan perangkat lunak Apiiro menyatakan kemarin bahwa sebanyak 1.122 salinan publik dari berkas tersebut terbukti memuat setidaknya satu kredensial sensitif. Kendati penyelidik tidak menguji secara langsung seluruh temuan, salah satu perusahaan yang dihubungi mengonfirmasi bahwa kunci rahasia milik mereka memang aktif.

Berkas konfigurasi yang bermasalah tersebut bernama .claude/settings.local.json. Menghapus berkas tersebut secara manual dari repositori tidak membatalkan kebocoran data, mengingat versi lama tetap tersimpan dalam riwayat git maupun salinan cabang (forks). Saran utama dari para peneliti keamanan adalah memutar kunci akses terlebih dahulu: ganti seluruh kata sandi, token autentikasi, serta kunci API yang pernah tersimpan, lalu bersihkan repositori secara menyeluruh.

Bagaimana Kredensial Rahasia Masuk ke Dalam Berkas

Berdasarkan konfigurasi dasarnya, Claude Code selalu meminta konfirmasi pengguna sebelum menjalankan sebagian besar perintah shell. Apabila pengguna menekan persetujuan bertuliskan "Yes, and don't ask again," sistem menyimpan aturan izin eksekusi otomatis ke berkas .claude/settings.local.json di direktori kerja proyek, sebagaimana tercantum dalam dokumentasi perizinan resminya. Instruksi yang cocok dengan aturan itu nantinya berjalan otomatis tanpa butuh konfirmasi ulang pada sesi berikutnya.

Aturan yang tersimpan murni mencakup apa saja yang sebelumnya diajukan pada layar terminal. Terkadang isinya berupa pola umum seperti npm test *, dan pada waktu lainnya merupakan satu baris perintah persis. Ketika perintah yang disetujui adalah instruksi tunggal yang terperinci, kata sandi maupun token apa pun di dalamnya turut disimpan utuh dalam format teks polos biasa.

Pada berbagai berkas yang terbuka untuk publik, para peneliti menemukan serangkaian instruksi tersimpan yang memuat data rahasia tersebut, dan berhasil mereplikasi pola perilaku yang sama menggunakan model kecerdasan buatan Opus 5.5 serta Fable 5.1.

Claude Code memiliki mekanisme untuk mencegah berkas pengaturan tersebut masuk ke pelacakan git. Saat pertama kali menuliskan berkas di repositori git, sistem mendaftarkan berkas itu ke dalam konfigurasi pengecualian git global pengguna, berdasarkan keterangan dokumentasi pengaturannya. Perangkat lunak git pada komputer yang bersangkutan kemudian secara otomatis mengabaikan berkas tersebut di seluruh repositori di mesin itu.

Akan tetapi, perlindungan tersebut hanya bertahan pada konfigurasi git milik satu pengguna di satu perangkat komputer. Pencegahan itu sama sekali tidak berpengaruh terhadap berkas yang telanjur dicatat ke dalam commit repositori sebelumnya. Claude Code tidak menyisipkan nama berkas tersebut ke dalam berkas .gitignore milik proyek itu sendiri, sehingga mekanisme perlindungan bawaan tidak ikut berpindah bersama proyek ke komputer lain.

Pada 539 dari total 1.105 repositori yang ditelusuri riwayatnya, ditemukan catatan riwayat commit yang mencantumkan Claude sebagai salah satu kontributor pembuat yang memodifikasi berkas bersangkutan. Peneliti mengartikan temuan ini bahwa Claude sendiri kerap melakukan commit terhadap berkas tersebut ke repositori.

Temuan Investigasi Mendalam Apiiro

Penelusuran Apiiro di GitHub menemukan 104.185 salinan berkas tersebut di dalam 103.617 repositori, sebagaimana dijabarkan dalam laporan teknis mereka. Sekitar 1,1 persen atau 1.122 salinan berkas terbukti menyimpan setidaknya satu data rahasia. Secara keseluruhan, dokumen-dokumen itu menampung 1.379 kredensial rahasia yang berbeda.

Suatu data diklasifikasikan sebagai kredensial rahasia apabila cocok dengan format kunci otorisasi yang dikenal, atau saat kata sandi maupun token diletakkan berdampingan dengan alamat peladen publik, dengan konfirmasi dari peninjau berbasis AI. Peneliti tidak membeberkan apakah ada pihak yang telah menyalahgunakan temuan rahasia ini.

Lebih dari sepertiga data rahasia membuka akses langsung ke sistem basis data, mencakup 379 kata sandi basis data. Data lainnya mencakup 43 kredensial masuk SSH untuk peladen publik, 42 token autentikasi pengembang untuk GitHub, GitLab, serta npm, ditambah 23 kunci akses cloud AWS.

Di antara pemilik repositori terdapat 63 organisasi terdaftar, mayoritasnya perusahaan perangkat lunak dari berbagai skala. Kasus kebocoran paling signifikan mencakup kunci cloud berkategori admin milik vendor basis data independen dan kata sandi pemilik akses terhadap basis data rekam medis pasien.

Hingga Senin, setiap berkas yang mengandung data rahasia masih berada di cabang utama default repositori masing-masing, dan pada separuh repositori tersebut, berkas sensitif telah terpapar setidaknya selama 217 hari penuh.

Catatan riwayat versi lama berkas menyimpan 734 data rahasia tambahan pada 509 repositori yang saat ini tidak tampak di salinan terbaru, umumnya karena telah dihapus pemiliknya. Keberadaan salinan cabang (forks) turut memperluas kebocoran: 211 repositori cabang dari 74 repositori induk masih membawa kredensial rahasia serupa.

Data sensitif juga bersarang pada 298 dari total 76.011 salinan berkas pengaturan bersama .claude/settings.json yang sengaja diunggah tim pemrogram, sebagian besar tersemat di aturan perizinan eksekusi. Bila menjumlahkan dokumen tersebut, riwayat versi lama, beserta catatan riwayat obrolan agen, totalnya mencapai 2.539 kredensial rahasia di 1.994 repositori berbeda.

Dari perbandingan terhadap dokumentasi 16 asisten pengodean berbasis AI, Claude Code merupakan satu-satunya agen yang menyimpan seluruh baris instruksi yang disetujui ke berkas konfigurasi lokal proyek secara otomatis.

Salinan dokumen lokal yang tidak pernah terunggah ke peladen GitHub tetap membawa risiko keamanan. Berkas tersebut berformat teks JSON biasa di folder proyek, dan mungkin tertinggal tanpa disengaja ke dalam paket distribusi pustaka npm, berkas image Docker, arsip zip, maupun direktori penyimpanan yang tersinkronisasi otomatis.

Perangkat perusak sebelumnya pernah memburu kredensial di komputer pengembang. Pada September 2025, program jahat cacing Shai-Hulud mengoperasikan pemindai TruffleHog pada komputer yang terinfeksi dan menandai lebih dari separuh berkas yang diperiksa sebagai berkas penyimpan rahasia.

Alat pemindai kredensial umum nyatanya kerap gagal mendeteksi berkas-berkas ini. Peneliti menguji gitleaks dan TruffleHog pada setiap salinan tanpa mengaktifkan tahapan verifikasi bawaan alat. Dari 1.122 berkas penyimpan kredensial rahasia, gitleaks hanya sanggup menemukan 564 berkas dan TruffleHog mendeteksi 643 berkas, sementara 215 berkas sisanya gagal dikenali oleh kedua pemindai itu sama sekali.

Sebagian besar kegagalan deteksi disebabkan oleh kata sandi yang disematkan langsung di susunan perintah baris. Alat pemindai fokus mencari format kunci baku, sementara kata sandi yang diletakkan persis setelah parameter PGPASSWORD=, perintah sshpass -p, atau opsi mysql -p tampak menyerupai kata biasa dalam sebuah instruksi baris perintah harian.

Laporan Permasalahan Sebelumnya

Para pemakai Claude Code sejatinya telah berulang kali melaporkan kelemahan sistem semacam ini di masa lampau. Salah satu laporan celah keamanan terdahulu yang diajukan pengguna pada 11 Agustus 2025 menyebutkan bahwa instruksi terkonfirmasi yang memuat token dan kunci API disimpan tanpa sensor ke settings.local.json.

Sistem bot otomatis lantas menutup laporan keluhan tersebut dengan status "not planned" pada 3 Januari, sesudah dibiarkan terabaikan selama 60 hari tanpa tindak lanjut.

Hingga hari ini, empat berkas aduan terkait yang diulas peneliti telah resmi ditutup oleh sistem bot yang sama, dengan penutupan teranyar terjadi kemarin. Tak satu pun laporan itu menerima respons resmi dari pihak Anthropic.