Yapay zekâ kodlama ajanlarında “her seferinde sorma” kolaylığı, sessiz bir güvenlik borcuna dönüşebiliyor. Yazılım güvenliği şirketi Apiiro, 6 Kasım 2026’da yayımladığı araştırmada Anthropic’in kodlama asistanı Claude Code’un onaylanan komutları kaydettiği proje dosyasının herkese açık GitHub depolarında parola ve API anahtarlarını açığa çıkardığını gösterdi. Söz konusu dosya .claude/settings.local.json. Araştırmacılar bu dosyanın 1.122 herkese açık kopyasında en az bir sır buldu.
Sorun bir yazılım açığından çok bir tasarım tercihi: Geliştirici bir komutu “Evet, bir daha sorma” diyerek onayladığında, komut bazen kelimesi kelimesine kaydediliyor. Komutun içinde parola ya da token varsa o da düz metin olarak dosyaya giriyor. Dosya bir kez depoya gönderildiğinde ise silmek yetmiyor; eski sürümler git geçmişinde ve çatallarda (fork) kalıyor.
Sır dosyaya nasıl düşüyor?
Claude Code varsayılan olarak çoğu kabuk komutunu çalıştırmadan önce kullanıcıya soruyor. Kullanıcı “Yes, and don’t ask again” seçeneğini işaretlerse, proje içindeki .claude/settings.local.json dosyasına bir izin kuralı yazılıyor ve eşleşen komutlar sonraki oturumlarda sorulmadan çalışıyor.
Kural, onay ekranının sunduğu şeyi kapsıyor. Bu bazen npm test * gibi bir kalıp, bazen de tek ve birebir bir komut oluyor. İkinci durumda komuta yazılmış parola veya token da kuralla birlikte saklanıyor. Araştırmacılar bu davranışı en yeni modeller olan Opus 5.5 ve Fable 5.1 ile de yeniden üretebildiklerini belirtiyor.
Claude Code dosyayı git dışında tutmaya çalışıyor: Bir git deposunda dosyayı ilk kez yazdığında onu kullanıcının global git excludes listesine ekliyor. Ancak bu koruma tek bir bilgisayardaki tek bir kullanıcının ayarlarında kalıyor. Projenin kendi .gitignore dosyasına eklenmediği için koruma projeyle birlikte taşınmıyor ve daha önce commit edilmiş bir dosyayı da korumuyor. Araştırmacıların izlediği 1.105 depodan 539’unda, Claude’u ortak yazar olarak gösteren bir commit bu dosyayı değiştirmiş. Apiiro bunu, dosyanın çoğu zaman Claude tarafından da commit edildiği şeklinde yorumluyor.
Rakamlar ne söylüyor?
Apiiro, herkese açık GitHub’da 103.617 depoda 104.185 settings.local.json kopyası buldu. Bunların yaklaşık yüzde 1,1’i, yani 1.122 kopya en az bir sır taşıyor; toplamda 1.379 farklı sır var. Araştırmacılar sırların hâlâ çalışıp çalışmadığını test etmedi; ancak bilgilendirdikleri bir şirket anahtarının etkin olduğunu doğruladı.
- Sırların üçte birinden fazlası doğrudan bir veritabanını açıyor; bunlar arasında 379 veritabanı parolası var.
- Herkese açık sunucular için 43 SSH girişi, GitHub, GitLab ve npm için 42 token, ayrıca 23 AWS anahtarı bulundu.
- Dosya sahipleri arasında çoğu yazılım şirketi olmak üzere 63 kuruluş yer alıyor. En çarpıcı örnekler, bir veritabanı satıcısının yönetici düzeyindeki bulut anahtarı ve bir tıbbi kayıt veritabanının sahip parolası.
- Kontrol tarihinde sır içeren dosyaların tamamı depoların varsayılan dalındaydı; bu depoların yarısında dosya en az 217 gündür duruyordu.
Silinen dosyalar da sorunu bitirmiyor. Eski sürümlerde, artık güncel kopyalarda bulunmayan 509 depoda 734 ek sır tespit edildi. Çatallar sızıntıyı daha da yaydı: 74 deponun 211 çatalı asıllarıyla aynı sırları taşıyor. Ekiplerin bilerek paylaştığı .claude/settings.json dosyasında da 76.011 kopyanın 298’inde sır çıktı. Bunlar, eski sürümler ve kaydedilmiş ajan sohbet kayıtları eklendiğinde toplam 1.994 depoda 2.539 sır ortaya çıkıyor.
Sır tarayıcıları neden kaçırıyor?
Yaygın sır tarama araçları bu dosyaların önemli bir kısmını yakalayamıyor. Araştırmacılar doğrulama adımı olmadan gitleaks ve TruffleHog araçlarını tüm kopyalarda çalıştırdı. Sır içeren 1.122 dosyadan gitleaks 564’ünü, TruffleHog 643’ünü işaretledi; 215 dosyayı ise ikisi de kaçırdı.
Kaçırılanların çoğu komutların içine yazılmış parolalar. Tarayıcılar bilinen anahtar biçimlerini arıyor; oysa PGPASSWORD=, sshpass -p ya da mysql -p sonrasına yazılan bir parola, sıradan bir komut satırındaki sıradan bir kelime gibi görünüyor. Bu risk soyut değil: Eylül 2025’te Shai-Hulud solucanı, bulaştığı bilgisayarlarda TruffleHog çalıştırarak sır avlamıştı. Dosya yalnızca GitHub’da değil; bir npm paketinde, Docker imajında, zip arşivinde veya senkronize bir klasörde de kalabiliyor.
Claude Code’u diğer ajanlardan ayıran ne?
Apiiro, belgelerini karşılaştırdığı 16 kodlama ajanı arasında onaylanan tam komutu varsayılan olarak bir proje dosyasına kaydettiği doğrulanan tek aracın Claude Code olduğunu söylüyor. Davranış yeni de değil: Onaylanan komutlardaki API anahtarlarının settings.local.json’a birebir yazıldığını bildiren ilk hata raporu 11 Ağustos 2025’te açılmış. Bu rapor 60 gün hareketsiz kaldıktan sonra 3 Ocak’ta otomatik bir bot tarafından “not planned” olarak kapatılmış. Araştırmacılara göre ilgili dört raporun hepsi aynı bot tarafından kapatıldı ve hiçbirine Anthropic’ten yanıt gelmedi.
Geliştiriciler ve güvenlik ekipleri ne yapmalı?
Araştırmacıların sıralaması önemli: Önce değiştirin, sonra temizleyin.
- GitHub organizasyonunuzda .claude/settings.local.json ve .claude/settings.json dosyalarını arayın; dosya silinmiş olsa bile git geçmişini kontrol edin.
- Bu dosyalarda bulunmuş her parolayı, token’ı ve anahtarı temizlikten önce değiştirin (rotate).
- Yerel dosyanın izlenmesini git rm --cached .claude/settings.local.json ile bırakın ve dosyayı deponun kendi .gitignore’una ekleyin.
- Hiç commit edilmemiş olsa bile kendi bilgisayarınızdaki dosyayı açıp sır içeren her kuralı silin.
- Sırları komutlara yazmayın; $DB_URL gibi bir sır yöneticisi değişkeni kullanın ki kayıtlı kuralda yalnızca değişken adı kalsın.
- Tek tek komutlar yerine Bash(npm run:*) gibi kalıpları onaylayın.
Güvenlik ekipleri için öneri, .claude/, .cursor/, .gemini/ ve .specstory/ gibi ajan klasörlerini ve ajan bellek dosyalarını tıpkı .env dosyaları gibi sır taşıyan alanlar olarak ele almak. Bu klasörler, git geçmişi dahil olmak üzere commit öncesi ve CI sır taramasına eklenmeli; tarayıcının yalnızca bilinen anahtar biçimlerini değil, komut içindeki parolaları da yakaladığından emin olunmalı. Herkese açık bir sunucu adresiyle eşleşen kimlik bilgileri, gerçek erişim sağladığı için öncelikle kontrol edilmeli.
Ders, Claude Code’un ötesine uzanıyor: Ajanlara verilen her kalıcı izin bir yapılandırma kaydı, her yapılandırma kaydı da potansiyel bir sızıntı noktası. “Bir daha sorma” demek, sorunun bir daha sorulmayacağı anlamına geliyor; riskin ortadan kalktığı anlamına gelmiyor.
Kaynak: Apiiro araştırması, The Hacker News







