Geliştiricilerin Claude Code’da onayladıkları komutlara yazdıkları parolalar ve API anahtarları, herkese açık GitHub depolarında açıkça duruyor. Kullanıcı izin isteminde “Yes, and don’t ask again” seçeneğini seçtiğinde, Anthropic’in kodlama asistanı komutu içindeki sır dahil kelimesi kelimesine proje ayar dosyasına kaydedebiliyor.
Güvenlik şirketi Apiiro’nun araştırmasına göre bu dosyanın herkese açık 1.122 kopyasında en az bir sır bulunuyor. Araştırmacılar sırların hâlâ çalışıp çalışmadığını test etmedi; ancak bu hafta bilgilendirdikleri bir şirket anahtarının aktif olduğunu doğruladı.
Söz konusu dosya .claude/settings.local.json. Dosyayı projeden silmek sızıntıyı geri almıyor, çünkü eski sürümler git geçmişinde ve deponun fork’larında kalıyor. Araştırmacıların önerisi önce anahtarları değiştirmek: dosyada bugüne kadar bulunmuş her parola, token ve anahtar yenilenmeli, temizlik ondan sonra yapılmalı.

Sır dosyaya nasıl düşüyor?
Claude Code varsayılan olarak çoğu shell komutunu çalıştırmadan önce onay istiyor. Kullanıcı “Yes, and don’t ask again” seçeneğini seçerse, izin belgelerine göre proje içindeki .claude/settings.local.json dosyasına bir allow kuralı yazılıyor. Sonraki oturumlarda bu kurala uyan komutlar sormadan çalışıyor.
Kural yalnızca istemin önerdiği kapsamı içeriyor. Bu bazen npm test * gibi bir kalıp, bazen de tek bir tam komut oluyor. Tam komut kaydedildiğinde, komuta yazılmış parola ya da token da düz metin olarak dosyaya giriyor.
Araştırmacılar herkese açık dosyalarda sırrı içinde duran kayıtlı komutlar buldu ve davranışı en güncel modeller olan Opus 5.5 ve Fable 5.1 ile yeniden üretti.
Claude Code dosyayı git dışında tutmaya çalışıyor. Ayar belgelerine göre bir git deposunda dosyayı ilk kez yazdığında onu kullanıcının global git excludes listesine ekliyor; böylece o bilgisayardaki git, dosyayı tüm depolarda yok sayıyor.
Ancak bu koruma tek bir bilgisayardaki tek bir kullanıcının git ayarında kalıyor ve araştırmacılara göre daha önce commit edilmiş bir dosya için hiçbir şey yapmıyor. Claude Code dosyayı projenin kendi .gitignore dosyasına eklemediği için koruma projeyle birlikte taşınmıyor.
İzlenebilen 1.105 deponun 539’unda dosyayı değiştiren commit, Claude’u ortak yazar olarak listeliyordu. Araştırmacılar bunu Claude’un dosyayı çoğu zaman kendisinin commit ettiği şeklinde yorumluyor.
Apiiro neler buldu?
Apiiro’nun herkese açık GitHub taramasında 103.617 depoda dosyanın 104.185 kopyası çıktı. Bunların yaklaşık %1,1’i, yani 1.122 kopya, en az bir sır içeriyor ve toplamda 1.379 farklı sır barındırıyor.
Bir değer, bilinen bir anahtar biçimine uyduğunda ya da herkese açık bir sunucu adresinin yanında parola veya token bulunduğunda sır sayıldı; ayrıca bir yapay zekâ incelemecisinin de onaylaması gerekti. Araştırmacılar bu sırların biri tarafından kullanılıp kullanılmadığını belirtmiyor.

Sırların üçte birinden fazlası doğrudan bir veritabanına erişim sağlıyor:
- 379 veritabanı parolası
- Herkese açık sunucular için 43 SSH girişi
- GitHub, GitLab ve npm için 42 token
- 23 AWS anahtarı
Dosya sahipleri arasında çoğu farklı büyüklükte yazılım şirketi olan 63 kuruluş var. Araştırmacılara göre en ciddi örnekler arasında bir veritabanı üreticisinin yönetici düzeyindeki kendi bulut anahtarı ve bir tıbbi kayıt veritabanının sahip parolası bulunuyor.
Pazartesi itibarıyla sır içeren dosyaların tamamı hâlâ deponun varsayılan dalında duruyordu ve bu depoların yarısında dosya en az 217 gündür oradaydı.
Dosyanın eski sürümleri, 509 depoda güncel hiçbir kopyada bulunmayan 734 sır daha içeriyor; bunun nedeni genellikle dosyanın silinmiş olması. Fork’lar da dosyaları yayıyor: 74 deponun 211 fork’u orijinallerle aynı sırları taşıyor.
Ekiplerin bilerek commit ettiği paylaşımlı .claude/settings.json dosyasının 76.011 kopyasının 298’inde de, çoğunlukla allow kuralları içinde, sır bulundu. Bunlar, eski sürümler ve kayıtlı ajan sohbet günlükleri eklendiğinde toplam 1.994 depoda 2.539 sıra ulaşılıyor.
Araştırmacıların belgelerini karşılaştırdığı 16 kodlama ajanı arasında, onaylanan komutun tamamını varsayılan olarak bir proje dosyasına kaydettiği doğrulanan tek araç Claude Code.
Geliştiriciler ne yapmalı?
- GitHub organizasyonunuzda
.claude/settings.local.jsonve.claude/settings.jsondosyalarını arayın; dosyalar silinmiş olsa bile her deponun git geçmişini kontrol edin. - Temizlikten önce dosyalarda bugüne kadar bulunmuş her parola, token ve anahtarı değiştirin.
- Yerel dosyayı
git rm --cached .claude/settings.local.jsonile git takibinden çıkarın ve deponun kendi.gitignoredosyasına ekleyin. - Hiç commit edilmemiş olsa bile dosyayı kendi bilgisayarınızda açıp sır içeren tüm kuralları silin.
- Sırları komutlara yazmayın. Onlara bir secrets manager üzerinden
$DB_URLgibi değişkenlerle başvurun; böylece kayıtlı kural sırrı değil değişken adını tutar. - Tek tek komutlar yerine
Bash(npm run:*)gibi kalıpları onaylayın.
Araştırmacılara göre GitHub’a hiç ulaşmayan kopyalar da önemli. Dosya proje klasöründe düz JSON olarak duruyor ve bir npm paketinin, Docker imajının, zip arşivinin ya da senkronize edilen bir klasörün içinde unutulabiliyor.
Zararlı yazılımlar daha önce de geliştirici makinelerinde sır aradı. Eylül 2025’te Shai-Hulud solucanı, enfekte bilgisayarlarda TruffleHog sır tarayıcısını çalıştırmıştı; tarayıcı bu dosyaların yarısından fazlasını sır içeriyor olarak işaretledi.
Yaygın tarayıcılar çoğunu kaçırıyor
Araştırmacılar gitleaks ve TruffleHog’u, araçların doğrulama adımı olmadan tüm kopyalar üzerinde çalıştırdı. Sır içeren 1.122 dosyanın 564’ünü gitleaks, 643’ünü TruffleHog işaretledi; 215 dosyayı ikisi de yakalamadı.
Kaçırılanların çoğu komut içine yazılmış parolalar. Tarayıcılar bilinen anahtar biçimlerine bakıyor; PGPASSWORD=, sshpass -p ya da mysql -p sonrasındaki bir parola ise sıradan bir komut satırındaki sıradan bir kelime gibi görünüyor.
Güvenlik ekipleri için öneriler
.claude/,.cursor/,.gemini/ve.specstory/gibi ajan klasörlerini ve ajan bellek dosyalarını,.envdosyaları gibi sır barındıran dosyalar olarak ele alın; hem dizüstü bilgisayarlarda hem depolarda.- Bunları git geçmişi dahil pre-commit ve CI sır taramasına ekleyin; tarayıcının yalnızca bilinen anahtar biçimlerini değil, komut içindeki parolaları da yakaladığından emin olun.
.claude/settings.local.jsondosyasını kuruluşun.gitignoreşablonlarına ekleyin.- İlk olarak herkese açık bir sunucuyla eşleşen kimlik bilgilerini kontrol edin; erişim sağlayanlar onlar.
Daha önceki raporlar
Claude Code kullanıcıları bu davranışı daha önce de bildirmişti. 11 Ağustos 2025’te açılan bir hata raporu, API anahtarı ve token içeren onaylı komutların settings.local.json dosyasında olduğu gibi saklandığını söylüyordu.
Bu rapor 60 gün hareketsiz kaldıktan sonra 3 Ocak’ta otomatik bir bot tarafından “not planned” olarak kapatıldı. Araştırmacıların atıf yaptığı ilgili dört raporun tamamı aynı bot tarafından kapatılmış, sonuncusu dün. Araştırmacılara göre hiçbirine Anthropic’ten yanıt gelmedi.
Buradaki sorun yeni bir açık değil, kolaylık sağlayan bir özelliğin yan etkisi: “bir daha sorma” dediğiniz komut olduğu gibi diske yazılıyor ve global exclude ayarı ilk commit’ten sonra işe yaramıyor. Claude Code kullanan ekiplerin .claude/settings.local.json dosyasını hemen .gitignore‘a eklemesi, geçmişi taraması ve komutlarda sırları değişkenle geçirmeyi alışkanlık hâline getirmesi en hızlı önlem. Rakamların Apiiro’nun kendi taramasına dayandığını ve sırların geçerliliğinin test edilmediğini de akılda tutmak gerekiyor.
Kaynak: https://thehackernews.com/2026/11/claude-codes-dont-ask-again-file.html


