deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak dev.to (home feed)

TaintGuard, bir oturumun şimdiye kadar ne yaptığına göre Claude Code araç çağrılarını kısıtlıyor

Bir dev.to yazısı, TaintGuard'ı tanıtıyor: araç başına izinler yerine oturum geçmişine dayanarak araç çağrılarını kısıtlayan bir Claude Code modu; MCP mail erişimi ile Bash'in kesiştiği yerdeki prompt injection açığını kapatıyor.

TaintGuard, bir oturumun şimdiye kadar ne yaptığına göre Claude Code araç çağrılarını kısıtlıyor

Bir gelen kutusu, bir shell ve tek bir context penceresi

dev.to'da yazan bir geliştirici, agent'in e-postaları ayıklaması için Claude Code'u bir Model Context Protocol (MCP) sunucusu üzerinden Gmail'e bağladığını ve aynı oturumda testleri çalıştırmak için Bash'i de açık tuttuğunu anlatıyor. Her yetenek tek başına bakıldığında kabul edilebilir görünüyordu. Birlikte ele alındığında ise, agent'e bir hesabı doğrulaması için tek satırlık bir komut çalıştırmasını söyleyen bir e-posta, gönderene gelen kutusunun içeriğini teslim edebilirdi. Yazarın çözümü TaintGuard: bir oturuma ne tür içeriklerin girdiğini kaydeden ve geçmişe dayanarak sonraki araç çağrılarını kısıtlayan bir Claude Code modu.

Riskin arkasındaki üçlü

Yazı, tehlikeyi Simon Willison'dan gelen bir terimle çerçeveliyor: "lethal trifecta" (öldürücü üçlü). Özel verilere erişebilen, başkalarının yazdığı içeriği işleyen ve dışarıyla iletişim kurabilen bir agent, ilkinin ikinci üzerinden gönderilmesi için ikna edilebilir. Her MCP sunucusu en az bir bileşen ekler — mail, Drive, Slack ve Notion özel malzeme tutar, tarayıcı sunucuları yabancıların yazdığı sayfaları okur, Bash veya WebFetch ise bir çıkış yolu sunar.

Bu örüntü varsayımsal değil. Yazıya göre Invariant Labs, Mayıs 2025'te resmi GitHub MCP sunucusuna yönelik bir saldırıyı açıkladı: herkese açık bir repository issue'suna yerleştirilmiş metin, açık issue'ları incelemesi istenen bir agent'i, kullanıcının özel repository'lerini okumaya ve bulduklarını herkese açık olan repository'de bir pull request içinde yayımlamaya yönlendirdi. Invariant'ın vardığı sonuç, zayıflığın sunucu kodunda olmadığı ve oradan yamanamayacağı yönündeydi; çünkü her çağrı, kullanıcının kendi token'ının izin verdiği bir çağrıydı.

Yine alıntılanan Meta'nın "Agents Rule of Two" ilkesi, bu üçlüyü bir tasarım kuralına dönüştürüyor: bir oturum içinde agent, üç özellikten en fazla ikisine sahip olmalı — güvenilmez girdi işleme, hassas sistemlere veya özel verilere erişme, durum değiştirme veya dışarıyla iletişim kurma. Üçüne de ihtiyaç duyan görevler insan gözetimi gerektirir.

Araç başına izinler yanlış soruya cevap veriyor

Yazara göre mevcut denetimler politikayı araç bazında ifade ediyor. Docker'ın MCP Toolkit'i bir profile'de ayrı ayrı araçları etkinleştirir veya devre dışı bırakır; Claude Code kuralları araç adlarına göre allow, ask veya der. Cevap, oturumun şimdiye kadar ne yaptığından bağımsız olarak aynıdır. Allow, agent'in henüz saldırgan etkisindeki bir e-postayı okuduğu oturumda bile riski kabul eder; deny, hiçbir hassas şeye dokunmayan sıradan kodlama oturumlarında Bash'i feda eder; ask, context temiz olsun ya da yeni bir injection barındırsın aynı prompt'u gösterir. Gateway'ler ikinci bir boşluk ekler: agent ile MCP sunucularının arasında dururlar, dolayısıyla Bash gibi yerleşik araçlar onlardan hiç geçmez ve bir .env dosyasını doğrudan saldırganın sunucusuna gönderen bir curl görünmez kalır.

Mod nasıl çalışıyor

TaintGuard bir Claude Code modu — agent'in içinde çalışan TypeScript hook handler'ları, terminal sürümü 2.1.287 veya üzeri — harici bir command hook değil; bu sayede taint kümesini oturum durumunda tutuyor, araç sonuçlarına bir satır ekliyor ve bypassPermissions dahil her izin modunda kendi onay prompt'unu gösteriyor.

Politika üç parçadan oluşuyor. Etiketler risk kategorilerini adlandırır; varsayılan preset private, untrusted ve secret tanımlar. Kaynaklar, etiket ekleyen araç çağrılarıdır — bir mail sunucusunda mesaj okumak private ve untrusted ekler, başarılı bir WebFetch untrusted ekler, .env veya bir SSH anahtarı okumak secret ekler. Sink'ler ise bir etiket koşulunu, engellenecek araçlarla ve bir eylemle eşleştirir: deny, ask veya audit. Ana agent'den mi yoksa bir subagent'ten mi geldiğine, yerleşik mi MCP mi olduğuna bakılmaksızın her çağrı tek bir hook'tan geçer.

Sıralama önemlidir. Sink'ler, çağrı öncesindeki haliyle taint kümesine göre değerlendirilir; dolayısıyla hem kaynak hem sink olan bir araç — örneğin okuduktan sonra mail göndermek — yalnızca önceki taint üzerinden yargılanır. Mail okuma girişimde taint eder, yani yarıda hata veren bir okuma bile oturumu işaretler; WebFetch başarı durumunda taint eder, çünkü başarısız bir fetch üçüncü taraf metni döndürmez. Taint bir konuşma içinde yalnızca büyür — reload, restart ve compaction etiketleri korur ya da ekler, küme konuşma geçmişinden yeniden kurulur ve bu tamamlanana kadar her etiket geçerli kalır — buna karşılık kullanıcının açık komutları onu temizler ve temizlemeler bir audit log'a kaydedilir.

Yazının belirttiğine göre soyağacı daha eskidir: Perl'in taint modu uzun süredir bir programın dışından gelen verinin shell veya dosya işlemlerine ulaşmasını reddetmiştir; Google ve ETH Zurich araştırmacılarından CaMeL ile Microsoft'un Fides planlayıcısı gibi araştırma sistemleri, güveni kontrol ve veri akışı boyunca izler. Bu yaklaşımlar agent'in planlama döngüsüne sahip olmayı gerektirir. TaintGuard ise, kendi yazmadığı bir agent'in araç çağrısı sınırında durur; hangi araçların çalıştığını görür ama modelin aralarında hangi byte'ları taşıdığını görmez, bu yüzden oturumun tamamını taint eder.

Neden önemli

Agent riski bileşimseldir: herhangi bir tek araçtan değil, bir oturumun neyi bir araya getirdiğinden doğar. MCP benimsemesi, tek bir agent'in aynı anda mail, belgeler, shell ve web erişimi tutmasını rutin hale getirdikçe, araç başına allow ve deny listeleri "Bash, mail okumasından önce sorun değildi ve sonrasında şüpheli" ifadesini dile getiremez. Geçmişe duyarlı kısıtlama, kesinlikten ödün verip güvenlik sağlar — bir e-posta context'e girdiğinde, ondan hiçbir şey kullanılmasa bile sonraki tüm giden çağrılar şüpheli sayılır — ama araçları tümüyle devre dışı bırakmak ile her oturumu otomatik onaylamak arasında işleyen bir orta yol sunar.

  • #prompt-injection
  • #mcp
  • #security
  • #claude-code
  • #ai-agents

İlgili yazılar