29 Ekim'de yaklaşık 02:27 ile 13:35 Pasifik saati arasında, resmî Claude Code eklentisinin kurcalanmış bir kopyası Cursor Market'te indirilebilir durumdaydı: Windows ve macOS için 2.1.312 ve 2.1.313 sürümleri. Bu aralıkta kuran veya otomatik güncelleyen herkes bir editör yardımcısı değil, makineye SSH anahtarı yerleştiren, ters tünel açan ve kalıcılık yazan bir yükleyici aldı.

Cursor olayı kendisi duyurdu, marketi kapattı, anahtarları döndürdü ve yeniden kurdu. Saldırganın sunucusu kapatıldı. Microsoft enjekte edilen JavaScript'i analiz edip tespit kuralları yayımladı. Anthropic, Microsoft'a kendi sistemlerinin ele geçirilmediğini ve zararlı paketi üretmediğini teyit etti; Visual Studio Market ve npm paketi etkilenmedi.

Yükleyici gerçekte ne yapıyor

İlk aşama keşif. Modül yüklenirken, normal başlatmadan önce kod; ana makine adını, kullanıcı adını, işletim sistemini, mimariyi, ana dizini, çalışma dizinini, yapılandırılmış Git e-postasını ve genel IP'yi topluyor. Ayrıca adında KEY, TOKEN, SECRET, PASS, AWS veya GCP geçen ortam değişkenlerini tarayıp 40 eşleşmeye kadar saklıyor. Hasar değerlendirmesi açısından önemli: iletilen şey değişken adları, değerleri değil.

İkinci aşama erişim. Yükleyici authorized_keys dosyasında svc-telemetry yorumunu arıyor. Yoksa gömülü bir Ed25519 genel anahtarı ekliyor — yani eşleşen özel anahtara sahip olan herkes için yetki. Ardından dışa giden bağlantı için ayrı bir ikinci anahtarı çözüp .stk_ ve on altıgen karakterden oluşan gizli bir dosyaya yazıyor; sunucu anahtarı denetimi kapalı (StrictHostKeyChecking=no, UserKnownHostsFile=/dev/null) bir SSH bağlantısı başlatıp sunucunun atadığı uzak portu yerel 22 portuna yönlendiriyor.

Üçüncü aşama kalıcılık. macOS'ta Apple sistem servisini taklit eden com.apple.sysmond.plist adlı bir LaunchAgent; Linux'ta @reboot cron girdisi; Windows'ta SYSTEM yetkisi isteyen SysMon adlı zamanlanmış görev ve Startup klasörüne yedek toplu iş dosyası. Tünel düşerse yaklaşık her 60 saniyede yeniden deneniyor.

Ne kadar başarılı oldu?

Kodun amaçladığından az — ama zararsız değil. Yerel SSH servisini açmak yönetici hakkı gerektiriyor ve eklenti çoğu macOS ve Windows makinesinde bu hakka sahip değildi; Cursor bu adımın başarısız olduğunu söylüyor. Geriye kalanlar: eklenen anahtar, kalıcılık dosyaları ve iletilen makine bilgileri.

Asıl ders tam burada. Kapıyı açamayan bir saldırı yine de kilidi değiştirebilir. Üstelik yük, betikleri eklenti klasörünün dışına yazdığı için eklentiyi kaldırmak temizlik sayılmaz — birçok temizlik denemesinin takılacağı yer burası.

Kontrol et ve temizle

İşaret, anahtar yorumu. macOS'ta şu yeterli:

grep -qs svc-telemetry ~/.ssh/authorized_keys && echo "anahtar var" || echo "temiz"

Windows'ta %USERPROFILE%\.ssh\authorized_keys ve C:\ProgramData\ssh\administrators_authorized_keys dosyalarına bakılmalı. İşareti bulan herkes makineyi ele geçirilmiş saymalı: yetkisiz anahtarı silmeli, kalıcılık dosyalarını ve çalışan tünel süreçlerini kaldırmalı, kimlik bilgilerini temiz bir sistemden döndürmeli. Cursor, geride bir şey kalırsa sıfırdan farklı kodla çıkan betikler yayımladı.

Bu, eklenti marketleri hakkında ne söylüyor

Zayıf halka Anthropic de değildi, JavaScript'in kendisi de. Zayıf halka, bir marketin güvenilir kaynak olduğu varsayımıydı. Bir eklenti geliştiricinin yetkileriyle çalışır, kendini otomatik günceller ve dosya sistemine, ortam değişkenlerine ve süreçlere erişebilir. Tek bir ele geçirilmiş yayın yolu yeter.

Microsoft'un önerdiği kontroller, paket ekosistemlerinin acı deneyimle öğrendiklerinin aynısı: eklentileri onaylı yayıncılarla sınırlamak ve yeni yayımlanan sürümler için bir bekleme süresi tanımlamak; böylece taze ve zararlı bir sürüm aynı anda her makineye ulaşmıyor. Onlarca geliştirici çalıştıran ekipler için bu bekleme süresi paranoya değil; "yayımlandı" ile "kuruldu" arasındaki tek denetim.