Zafiyetler & Güvenlik Açıkları

8 Kasım 2026

Claude Code'un onay dosyası GitHub'da parolaları sızdırdı

Claude Code'un onay dosyası GitHub'da parolaları sızdırdı

Haber Özeti

Apiiro'ya göre Claude Code'un "bir daha sorma" ile kaydettiği komutlar, içlerindeki parolalarla birlikte 1.122 herkese açık GitHub dosyasında duruyor.

Yazılım güvenliği şirketi Apiiro'nun 6 Kasım'da yayımladığı araştırmaya göre, Anthropic'in yapay zekâ kodlama asistanı Claude Code'da onaylanan komutlar, içlerine yazılmış parola ve API anahtarlarıyla birlikte .claude/settings.local.json dosyasına düz metin olarak kaydediliyor. Araştırmacılar, herkese açık GitHub depolarında bu dosyanın en az bir sır içeren 1.122 kopyasını buldu.

Sorun neden kaynaklanıyor?

Claude Code, kabuk komutlarının çoğunu çalıştırmadan önce kullanıcıdan onay istiyor. Kullanıcı "Yes, and don't ask again" (Evet, bir daha sorma) seçeneğini işaretlediğinde asistan, sonraki oturumlarda yeniden sormamak için bir izin kuralını proje klasöründeki bu dosyaya yazıyor.

Kural bazen npm test * gibi bir kalıp, bazen de komutun birebir kendisi oluyor. Komut birebir kaydedildiğinde, içine yazılmış parola ya da token da dosyada açık biçimde kalıyor. Araştırmacılar bu davranışı Claude Code'un en güncel modelleriyle de tekrar ürettiklerini belirtiyor.

Hangi bilgiler açığa çıktı?

Apiiro, herkese açık GitHub'da dosyanın 104.185 kopyasını taradı. Bunların yaklaşık yüzde 1,1'inde, yani 1.122 kopyada, toplam 1.379 farklı sır bulundu. Öne çıkan bulgular şöyle:

  • 379 veritabanı parolası

  • İnternete açık sunuculara ait 43 SSH giriş bilgisi

  • 42 GitHub, GitLab ve npm token'ı

  • 23 AWS anahtarı

Sızıntının kaynağı olan dosyaların sahipleri arasında 63 kuruluş bulunuyor. Araştırmacılara göre en ciddi örnekler arasında bir veritabanı şirketinin yönetici yetkili bulut anahtarı ve bir tıbbi kayıt veritabanının sahip parolası yer alıyor.

Eski dosya sürümleri, ekiplerin bilerek paylaştığı .claude/settings.json dosyaları ve kaydedilmiş sohbet geçmişleri de hesaba katıldığında sır sayısı, 1.994 depoya yayılmış 2.539'a çıkıyor.

Bu sırlar hâlâ geçerli mi?

Apiiro, bulunan sırların çalışıp çalışmadığını test etmedi. Ancak araştırmacıların bildirim yaptığı şirketlerden biri, anahtarının etkin olduğunu doğruladı.

Araştırmacılara göre 2 Kasım itibarıyla sır içeren dosyaların tamamı deponun varsayılan dalında duruyordu. Bu depoların yarısında dosya en az 217 gündür oradaydı.

Dosyayı silmek yeterli mi?

Hayır. Dosya projeden silinse bile eski sürümleri git geçmişinde ve deponun kopyalarında (fork) kalmaya devam ediyor. Araştırmacılar, eski sürümlerde güncel kopyalarda bulunmayan 734 ek sır ve aynı sırları taşıyan 211 fork tespit etti.

Claude Code, dosyayı ilk oluşturduğunda onu kullanıcının bilgisayarındaki genel git hariç tutma listesine ekliyor. Ancak bu koruma yalnızca o bilgisayarda geçerli. Projenin kendi .gitignore dosyasına eklenmediği için projeyle birlikte taşınmıyor ve daha önce kaydedilmiş (commit edilmiş) dosyaları kapsamıyor.

Güvenlik tarayıcıları bu sırları neden yakalayamıyor?

Yaygın sır tarama araçları bu dosyaların önemli bir kısmını gözden kaçırıyor. Araştırmacıların denemesinde gitleaks 1.122 dosyanın 564'ünü, TruffleHog ise 643'ünü işaretledi. 215 dosyayı iki araç da yakalayamadı.

Bunun nedeni, kaçan sırların çoğunun komut satırına yazılmış parolalar olması. PGPASSWORD= ya da sshpass -psonrasındaki bir parola, tarayıcılara sıradan bir kelime gibi görünüyor.

Anthropic ne dedi?

Araştırmacılara göre aynı davranış ilk kez 11 Ağustos 2025'te bir hata kaydıyla bildirildi. Bu kayıt, 60 gün boyunca işlem görmediği için otomatik bir bot tarafından "planlanmadı" etiketiyle kapatıldı. Araştırmacıların atıf yaptığı dört ilgili kaydın tamamı aynı bot tarafından kapatıldı ve Anthropic bunların hiçbirine yanıt vermedi. Anthropic'in araştırmaya ilişkin kamuya açık bir açıklaması henüz yok.

Geliştiriciler ne yapmalı?

Araştırmacıların önerisi, temizlikten önce sırları değiştirmek:

  • Dosyanın bugüne kadar içerdiği tüm parola, token ve anahtarları değiştirin (rotasyon).

  • .claude/settings.local.json dosyasını mevcut depolarda ve git geçmişinde arayın.

  • Dosyayı projenin .gitignore dosyasına ekleyin.

  • Komutlara gerçek değerler yazmak yerine sır yönetim aracından (secrets manager) gelen ortam değişkenlerini kullanın.

  • Dosyanın npm paketlerine, Docker imajlarına ve arşiv dosyalarına girmediğini kontrol edin.


Kaynak: The Hacker News

Bu içerik yapay zekâ desteğiyle hazırlanmış ve editör tarafından kontrol edilmiştir.