← Radar

Konu: Kodlama3 dk okuma

Claude Code'un kaynak kodu nasıl sızdı? npm paketinde unutulan bir source map

Bu neden önemli?

npm'e paket yayımlayan herkes aynı hatayı yapabilir. Derleme araçları hata ayıklamayı kolaylaştırmak için kaynak haritaları üretiyor ve bunlar fark edilmeden pakete girebiliyor. Bir dosya listesi ve tek bir komutla önlenebilecek bir hata, bir şirketin en çok kullanılan ürününün kodunu açığa çıkardı.

Ne oldu?

31 Mart 2026 sabahı güvenlik araştırmacısı Chaofan Shou, X’te bir şey paylaştı: Anthropic’in kodlama ajanı Claude Code’un npm’deki 2.1.88 sürümünün içinde bir source map dosyası vardı. The Register’a göre bu dosya, aracın sıkıştırılmamış TypeScript kaynağına, yani Anthropic’in bulut depolamasında duran bir zip arşivine işaret ediyordu. Yaklaşık 1.900 dosya ve 512 binden fazla satır kod birkaç saat içinde GitHub’da onlarca depoya kopyalandı.

Anthropic’in açıklaması kısaydı: Bu bir güvenlik ihlali değil, insan hatasından kaynaklanan bir paketleme sorunuydu. Hiçbir müşteri verisi ya da kimlik bilgisi açığa çıkmadı. Sürüm npm’den kaldırıldı. Bir not: Sızan şey modelin kendisi değil. Modelin ağırlıkları ya da eğitim verisi yok, sadece bilgisayarında çalışan komut satırı uygulamasının kodu var.

Source map nedir, neden tehlikeli?

Bir JavaScript projesini yayımlamadan önce genelde paketlersin (bundle): yüzlerce dosya tek bir dosyada birleşir, değişken adları kısalır, boşluklar silinir. Bu kod hızlıdır ama okunmaz. Bir hata olduğunda tarayıcı ya da Node sana “1. satırın 48.213. karakteri” der.

Source map, bu sıkıştırılmış kodu orijinal dosyalara geri bağlayan bir haritadır, genelde .js.map uzantılı bir JSON dosyası. Standarda göre içinde orijinal dosyaların yolları (sources) bulunur. İstersen dosyaların tam metni de (sourcesContent) içine gömülebilir. Hata ayıklarken harikadır: Sıkıştırılmış kod yerine kendi yazdığın satırları görürsün.

Sorun şu: Haritayı paketle birlikte yayımlarsan, kodunu da yorumları ve klasör yapısıyla birlikte yayımlamış olursun. npm’e konan bir JavaScript paketi zaten indirilebilir. Ama sıkıştırılmış kodu okumak zordur. Harita bu zorluğu ortadan kaldırır.

Kendi paketinde bu nasıl olmaz?

  • files alanı kullan. package.json’da files yoksa npm varsayılan olarak her şeyi pakete koyar. Sadece gereken klasörleri listele. Bu bir “izin listesi”, unutulan dosya dışarıda kalır.
  • Yayından önce bak. npm pack --dry-run, pakete girecek dosyaların listesini gösterir. CI’da .map dosyası görürse hata veren bir kontrol eklemek birkaç satır.
  • Haritayı bilinçli üret. Bun’ın paketleyicisinde varsayılan ayar haritasız. Harita ihtiyacın varsa onu hata izleme servisine özel olarak yükle, pakete koyma.

Anthropic olayı bir insan hatası olarak tanımladı. İnsan hatasına karşı en iyi çare, kontrolü bir kişinin dikkatine bırakmak yerine yayın sürecine otomatik bir adım olarak eklemek.

Sızıntının yan etkileri

Anthropic, GitHub’a telif hakkı (DMCA) bildirimiyle kaldırma talebi gönderdi. TechCrunch’a göre bildirim yanlışlıkla yaklaşık 8.100 depoya uygulandı, Anthropic’in kendi herkese açık Claude Code deposunun meşru çatalları da dahil. Şirket bunun kaza olduğunu söyleyip talebi bir depo ve 96 çatala indirdi.

Saldırganlar da fırsatı kaçırmadı. Biri, sızan kodda geçen iç paket adlarıyla npm’de boş paketler açtı (typosquatting). Başkaları “sızan Claude Code” diye sahte depolar kurup indirenlere bilgi çalan zararlı yazılım yükledi. Üstelik aynı gece npm’de axios’un zararlı sürümleri yayındaydı. The Hacker News, o saatlerde Claude Code’u npm ile kuranların zararlı axios’u da çekmiş olabileceği uyarısını yaptı.

Kodun içinden ne çıktığına gelince: Videoya göre henüz duyurulmamış özellik bayrakları, arka planda çalışan bir ajan modu ve rakiplerin modeli kopyalamasını zorlaştırmak için sahte araç tanımları vardı. Bu son fikri damıtma saldırıları yazımızda anlattık.

Sonra ne oldu?

Bugün Claude Code’un belgeleri kurulum için yerel (native) yükleyiciyi öneriyor. npm paketi artık JavaScript kodu değil, yükleyiciyle aynı derlenmiş programı kuruyor. 2.1.89’dan itibaren her sürüm, Anthropic’in GPG anahtarıyla imzalanmış bir sağlama listesiyle (checksum manifest) yayımlanıyor.

Düşün

  • En son yayımladığın paketin içinde hangi dosyalar var? npm pack --dry-run ile bak.
  • Yayın sürecinde elle yaptığın hangi adım, unutulduğunda bir sızıntıya yol açar?

Videoyu izle

Tıklayınca video YouTube'dan yüklenir; o ana kadar bu sayfa YouTube'a hiçbir istek göndermez.
Kaynaklar (11, İngilizce)

Kendi cümlelerimizle yazılmış bir özettir, çeviri değildir. Tüm kaynaklar yukarıda.