Claude Code'un onay dosyası GitHub'daki 1.994 depoda parola ve anahtarları açığa çıkardı
Güvenlik şirketi Apiiro, Claude Code'un "bir daha sorma" seçeneğiyle onaylanan komutları içlerindeki parola ve anahtarlarla birlikte proje klasöründeki bir dosyaya kaydettiğini ve bu dosyanın kodla birlikte GitHub'a yüklendiğini açıkladı. Şirkete göre herkese açık 1.994 depoda 2.539 gerçek gizli bilgi bulundu.
- 3 dk okuma
- 2 kaynak

Kısaca
- Apiiro'ya göre dosya, .claude/settings.local.json. Claude Code dosyayı geliştiricinin genel gitignore listesine ekliyor, ancak bu kural deponun kendi .gitignore dosyasına girmiyor ve bazı durumlarda dosyayı kapsamıyor.
- Açığa çıkan bilgiler arasında veritabanı parolaları, bulut anahtarları, API token'ları ve SSH root girişleri var. Apiiro 63 kuruluşu 2 ve 3 Kasım'da bilgilendirdi.
- Apiiro, dosyanın depodan çıkarılmasını, içindeki bütün kimlik bilgilerinin değiştirilmesini ve komutlara gizli bilgi yazılmamasını öneriyor.
Güvenlik şirketi Apiiro’nun araştırmacıları Shmulik Cohen ve Matan Giladi, 5 Kasım’da yayımladıkları araştırmada, yapay zekâ kodlama ajanı Claude Code’un onaylanan komutları kaydetme biçimi nedeniyle herkese açık GitHub depolarında binlerce gizli bilginin açığa çıktığını açıkladı. Apiiro’ya göre 1.994 herkese açık depoda 2.539 gerçek gizli bilgi bulundu. Bunlar arasında veritabanı parolaları, bulut anahtarları, API token’ları ve SSH root girişleri var.
Sorunun işleyişi
Apiiro’ya göre Claude Code, bir veritabanını kontrol etmek ya da bir API’yi çağırmak için önerdiği komuta yapılandırma dosyasındaki gizli bilgiyi de koyabiliyor ve komutu çalıştırmadan önce kullanıcıya soruyor. Kullanıcı “Yes, and don’t ask again” seçeneğini seçerse Claude Code o komutu, içindeki gizli bilgiyle birlikte, birebir olarak proje klasöründeki .claude/settings.local.json dosyasına kaydediyor. Şirkete göre depoda bu dosyayı özel olarak işaretleyen bir şey yok ve dosya kodla birlikte commit ediliyor.
Apiiro’ya göre Claude Code bu dosyayı bir git deposunun içinde oluşturduğunda dosyayı geliştiricinin bilgisayarındaki genel gitignore listesine ekliyor. Ancak bu kural deponun kendi .gitignore dosyasına girmiyor. Sonradan depoya dönüştürülen bir klasör, başka bir bilgisayardaki kopya ya da zaten commit edilmiş bir dosya bu kuralın kapsamına girmiyor. Apiiro’ya göre incelenen 1.105 depodan 539’unda dosyayı, Claude’un ortak yazar olarak göründüğü bir commit değiştirmişti.
Şirkete göre sorun modelden değil, Claude Code’un davranışından kaynaklanıyor ve araştırmacılar davranışı Claude Opus 5.5 ve Claude Fable 5.1 ile yeniden üretti. Apiiro’ya göre incelenen 16 kodlama ajanından, onaylanan komutun tamamını varsayılan olarak proje dosyasına yazdığı doğrulanan tek ajan Claude Code. Apiiro’ya göre kullanıcılar bu davranışı Ağustos 2025’ten beri GitHub’daki issue’larda bildiriyor, ancak bu bildirimlerin hiçbirine Anthropic yanıt vermedi ve üçü otomatik olarak kapatıldı.
Bulgular
Apiiro’nun verilerine göre:
- Herkese açık 104.185 settings.local.json kopyasının 1.122’sinde, yani yaklaşık yüzde 1,1’inde gerçek gizli bilgi vardı. Bu dosyalarda 1.379 farklı gizli bilgi bulundu.
- Bunlar arasında 379 veritabanı parolası, 122 Supabase service-role anahtarı, 103 Supabase hesap token’ı, 43 SSH girişi, 42 GitHub, GitLab ve npm token’ı, 23 AWS anahtarı ve 6 özel anahtar var.
- Git geçmişinde, paylaşılan settings.json dosyalarında ve ajan sohbet kayıtlarında 1.160 gizli bilgi daha bulundu. Toplam sayı 1.994 depoda 2.539.
- Bulgular arasında bir veritabanı üreticisinin yönetici düzeyindeki bulut anahtarı, üretimde çalışan bir Azure Postgres veritabanının parolası, bir Square üretim token’ı ve bir tıbbi kayıt veritabanının sahip parolası da var. Etkilenen 63 kuruluşun çoğu yazılım şirketi.
- Dosyaların hepsi 2 Kasım’da depoların varsayılan dalında duruyordu. 211 çatal (fork) aynı gizli bilgileri taşıyor ve dosyaların silinmiş eski sürümlerinde 734 gizli bilgi daha var.
Apiiro’ya göre yaygın gizli bilgi tarama araçları gitleaks ve TruffleHog dosyaların bir kısmını yakalayamadı. İki aracın da işaretlemediği 215 dosyada, gizli bilgi PGPASSWORD=, sshpass -p ya da mysql -p gibi komutların içinde yer alıyordu. Apiiro, etkilenen kuruluşları 2 ve 3 Kasım’da bilgilendirdi ve kuruluşlardan biri anahtarının geçerli olduğunu doğruladı. Şirket hiçbir kimlik bilgisini denemediğini, “gerçek gizli bilgi” ile bir sağlayıcının biçimine uyan ya da herkese açık bir sunucuyu gösteren kimlik bilgilerini kastettiğini belirtiyor.
Önerilen önlemler
Apiiro geliştiricilere şunları öneriyor:
- Dosyayı
git rm --cached .claude/settings.local.jsonkomutuyla depodan çıkarıp deponun kendi .gitignore dosyasına ekleyin. - Dosyada bulunan bütün kimlik bilgilerini değiştirin. Dosya hiç commit edilmemiş olsa bile içinde gizli bilgi bulunan izin kurallarını silin.
- Komutlara gizli bilgi yazmayın, bunun yerine gizli bilgi yöneticisinden gelen ortam değişkenlerini kullanın.
- Komutları birebir onaylamak yerine
Bash(npm run:*)gibi kalıplarla onaylayın.
Şirket güvenlik ekiplerine ise .claude/, .cursor/, .gemini/ ve .specstory/ klasörleriyle ajanların bellek dosyalarını .env dosyaları gibi gizli bilgi taşıyan dosyalar olarak görmelerini, bunları commit öncesi ve CI aşamalarındaki gizli bilgi taramasına geçmiş dahil eklemelerini ve kuruluşun .gitignore şablonuna koymalarını öneriyor.