← Teknoloji Radarı

Güvenlik

Shai-Hulud geri döndü: Solucan artık editör ayarlarına saklanıyor

npm'de yayılan Shai-Hulud solucanının yeni bir dalgası Go ekosisteminde de görüldü. Bu kez zararlı kod paket kurulumunda değil, VS Code görevlerinde ve Claude Code ayarlarında gizleniyor. Proje klasörünü açman yetebiliyor.

Bu neden önemli?

Yıllardır 'bağımlılıklarına dikkat et' deniyordu. Artık hedef, projedeki yapılandırma dosyaları ve içindeki yapay zekâ kod araçları. Bu dosyaları da çalıştırılabilir kod gibi düşünmen gerekiyor.

The Largest Supply Chain Attack Ever Just Infected Go · Better Stack, YouTube (İngilizce). Tıklayınca video yüklenir.

Solucan ne demek?

Shai-Hulud, ilk kez Eylül 2025’te npm’de görülen zararlı bir yazılım. Adını Dune’daki dev kum solucanından alıyor. Ona “solucan” denmesinin sebebi, kendi kendine yayılması:

  1. Zararlı bir paketi kuruyorsun. Paket kurulurken bir betik çalışıyor.
  2. Betik bilgisayarında gizli anahtarları arıyor: npm ve GitHub token’ları, AWS, Google Cloud, Azure anahtarları, SSH anahtarları.
  3. Çaldığı npm token’ıyla senin yayımladığın paketlerin zararlı sürümlerini çıkarıyor.
  4. O paketleri kuran bir sonraki kişi de aynı şekilde enfekte oluyor.

Yani arada saldırganın bir şey yapmasına gerek kalmıyor, zincir kendiliğinden ilerliyor. O günden beri benzer dalgalar defalarca geri geldi.

Yeni dalgada ne değişti?

Güvenlik şirketi Socket, 24 Haziran 2026’da yeni bir dalga tespit etti. 23 npm paketinin yanında bir Go modülü de etkilenmişti: Verana adlı bir blokzincir projesinin bir sürümü.

İlginç olan şu: Go’nun kendi araçları bu kodu hiç çalıştırmıyor. Modülün kaynak arşivine JavaScript dosyaları, bir .claude ve bir .vscode klasörü gizlenmiş. Tetikleyiciler bunlar:

  • VS Code görevi: .vscode/tasks.json içindeki bir görev, klasör açıldığında otomatik çalışacak şekilde ayarlanmış. Görev, zararlı JavaScript dosyasını Node ile çalıştırıyor. Socket’e göre bu örnekte gerçekten işe yarayan tetikleyici bu.
  • Claude Code kancası: .claude/settings.json içinde, Claude Code oturumu başlarken çalışan bir hook (kanca) tanımlanmış. Socket’in incelediği örnekte bu kancanın gösterdiği dosya arşivde yoktu, yani büyük ihtimalle çalışmıyordu. Ama fikir ortada.

Kod çalıştıktan sonra asıl yükünü Bun üzerinden açıyor. Token’ları, bulut anahtarlarını, Kubernetes ve Docker ayarlarını topluyor. Hatta CrowdStrike, Defender, SentinelOne gibi güvenlik yazılımlarının kurulu olup olmadığını kontrol ediyor.

Neden daha tehlikeli?

Eski savunmalar burada işe yaramıyor:

  • npm’de kurulum betiklerini kapatan --ignore-scripts bayrağı bir şey değiştirmiyor, çünkü ortada kurulum betiği yok.
  • Paketi kaldırmak da yetmiyor, çünkü zararlı kod node_modules içinde değil, projenin ayar dosyalarında duruyor.

Kısacası hedef artık uygulamanın bağımlılıkları değil, geliştirme ortamının kendisi.

Kendini nasıl korursun?

  • Ayar dosyalarını kod gibi gör. Bir depoyu klonladığında .vscode, .claude ve .github/workflows klasörlerine editörde açmadan önce bir göz at.
  • Otomatik görevleri kapalı tut. VS Code’un Workspace Trust özelliği, güvenmediğin klasörleri kısıtlı modda açıyor. Bu modda görevler senin onayın olmadan çalışmıyor. Tanımadığın projelere “güveniyorum” demekte acele etme.
  • Kısa ömürlü token kullan. Uzun süre geçerli anahtarlar yerine, işi bitince geçersiz olan ve sadece gereken izni veren token’lar tercih et. CI’da bunun yolu genelde OIDC. Çalınamayan ya da çalınınca işe yaramayan bir token, solucanın senin üzerinden yayılmasını engeller.
  • CI’da dışarı çıkışı sınırla. Derleme sunucularının sadece izin verdiğin adreslere bağlanmasını sağla. Kod çalışsa bile çaldığını gönderemez.
  • Yeni sürümleri hemen kurma. Bazı paket yöneticileri, sadece birkaç günden eski sürümleri kurmanı sağlayan bir ayar sunuyor. Zararlı sürümler genelde bu süre içinde yakalanıyor.

Düşün

  • Son klonladığın projede .vscode ya da .claude klasörü var mıydı? İçine baktın mı?
  • Yapay zekâ kod araçlarına verdiğin “otomatik çalıştır” izinleri, bir saldırgan için ne anlama gelir?