Yazılar

Claude Code Gizli Anahtar Sızıntısı: .claude/settings.local.json Tuzağı ve Korunma Rehberi

Güvenlik firması Apiiro'nun araştırmasına göre GitHub'da herkese açık 104.000'den fazla .claude/settings.local.json dosyası tespit edildi ve 1.122 tanesinde aktif veritabanı şifreleri ile API anahtarları bulundu. Sızıntı nasıl gerçekleşiyor ve projelerinizi tek komutla nasıl korursunuz?

Furkan Özay13 Kasım 2026 · 3 dk okuma
czCZAY.DEV // EDITORIALTR
SYSTEM ARCHITECTURE

#Güvenlik · 3 DK OKUMA

FURKAN ÖZAYVOL. 2026 // #478D

Yapay zeka kodlama ajanlarını kullanırken "Evet, bir daha sorma" butonuna tıklamak size hız kazandırırken, tüm veritabanı şifrelerinizi ve API anahtarlarınızı herkese açık GitHub repolarına taşıyor olabilir.

Güvenlik firması Apiiro tarafından yayınlanan güncel araştırmaya göre, GitHub üzerinde herkese açık 104.000'den fazla .claude/settings.local.json dosyası tespit edildi. Daha da kritik olanı, bu dosyaların 1.122 tanesinin içinde aktif canlı veritabanı bağlantı cümleleri, bulut sağlayıcı admin anahtarları ve API tokenları düz metin olarak yer alıyordu. Araştırma git geçmişi ve ajan sohbet dökümlerini kapsayacak şekilde genişletildiğinde 1.994 farklı repoda 2.539 benzersiz gizli anahtar sızıntısı belgelendi.

· · ·

Sızıntı Nasıl Gerçekleşiyor?

Sorun üç küçük varsayılan davranışın birleşmesinden doğuyor:

  1. İzin Onayının Kaydedilmesi: Claude Code terminalde bir komut çalıştırırken onay ister. Geliştirici "Yes, and don't ask again" (Evet, bir daha sorma) seçeneğini işaretlediğinde, onaylanan komutun tamamı projenin içindeki .claude/settings.local.json dosyasına yazılır.
  2. Düz Metin Şifreler: Eğer onayladığınız komutun içinde DATABASE_URL=..., curl -H "Authorization: Bearer ...", psql şifresi veya bir bulut erişim anahtarı geçiyorsa, bu değerler maskelenmeden doğrudan JSON dosyasına işlenir.
  3. Proje .gitignore Eksikliği: Claude Code bu dosyayı genellikle geliştiricinin kendi bilgisayarındaki global git exclude listesine ekler; ancak projenin kök dizinindeki .gitignore dosyasına eklemez. Proje başka bir bilgisayara klonlandığında, bir ekipten başka bir geliştirici git add . çalıştırdığında veya Docker COPY . . ile imaj oluşturulduğunda dosya takip edilmeye başlar ve uzaktaki repoya/imaja gönderilir.
· · ·

1. Adım: Projelerinizi ve Git Geçmişinizi Hemen Tarayın

Çalışma dizininizde veya geçmiş commit'lerde .claude/settings.local.json dosyasının takip edilip edilmediğini şu komutlarla kontrol edebilirsiniz:

Bash
# 1. Mevcut çalışma dizininde takip edilen .claude dosyalarını kontrol et
git ls-files | grep -E '\.claude/'
 
# 2. Tüm git geçmişinde bu dosyanın yer alıp almadığını kontrol et
git log --all --full-history -- "**/.claude/settings.local.json" "**/.claude/settings.json"

Eğer ikinci komut tek bir commit bile döndürüyorsa, dosyayı sonradan silmiş olsanız bile şifreler git geçmişinde durmaya devam ediyor demektir.

· · ·

2. Adım: Proje .gitignore Dosyasına Ekleyin

Global git exclude ayarlarına güvenmek yerine her projenin kök dizinindeki .gitignore ve varsa .dockerignore dosyasına şu satırları ekleyin:

gitignore
# AI Kodlama Ajanı Yerel İzin ve Oturum Dosyaları
.claude/settings.local.json
.claude/*.local.*
.cursor/mcp.json

Dosya halihazırda git tarafından takip ediliyorsa, yerelden silmeden takipten çıkarmak için:

Bash
git rm --cached .claude/settings.local.json
· · ·

3. Adım: Sızmış Anahtarları İptal Edin ve Yenileyin

GitHub gibi herkese açık veya ekip içi bir repoya düşmüş tek bir anahtar bile saniyeler içinde botlar tarafından taranıp kopyalanabilir. Bu nedenle:

  • .claude/settings.local.json dosyasını açıp içinde düz metin parola, sk-..., ghp_..., AKIA..., postgres:// veya JWT token geçip geçmediğini kontrol edin.
  • Şüpheli bir değer geçmişte tek bir kez bile pushlandıysa, yalnızca commit'i silmek yeterli değildir; ilgili API anahtarını, veritabanı parolasını ve bulut erişim jetonunu derhal iptal edip yenisini (rotate) üretin.
  • Komut içinde ham şifre yazmak yerine .env değişkenleri üzerinden referans vermeyi ($DATABASE_URL gibi) alışkanlık haline getirin.

Bunu da oku