deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak dev.to (home feed)

MCP incelemeleri, agent tool tanımlarındaki tool poisoning ve rug-pull saldırılarını ayrıntılandırıyor

Dev.to'da yayımlanan iki inceleme, MCP tool açıklamalarının modele yönelik gizli talimatlar taşıyabileceğini veya onay sonrasında değişebileceğini, hangi tarayıcı ve süreç değişikliklerinin bunları yakaladığını gösteriyor.

MCP incelemeleri, agent tool tanımlarındaki tool poisoning ve rug-pull saldırılarını ayrıntılandırıyor

MCP'nin güven modeline karşı iki saldırı

Dev.to'da yayımlanan (aslen mcpprobe.tech'te yer alan) iki uygulamalı inceleme, Model Context Protocol'e yapılan iki saldırıyı ele alıyor: tool poisoning, yani bir tool açıklamasının modele yönelik gizli talimatlar taşıması, ve "rug pull", yani sunucunun kullanıcı onayından sonra farklı tool tanımları sunması. İkisi de minimal bir laboratuvar sunucusu ve mcpprobe adlı açık kaynak bir tarayıcıdaki eşleşen bir kontrolle birlikte geliyor.

Her iki saldırı da tek bir yapısal gerçeğe dayanıyor: MCP client'ları tool açıklamalarını doğrudan modelin context'ine yüklüyor ve kullanıcılar bir sunucuyu veya tool'larını genellikle yalnızca bir kez, kurulum sırasında onaylıyor.

Tool poisoning komutları açıklamalarda gizliyor

Bir MCP sunucusu her tool'u bir ad, bir açıklama ve bir input schema ile duyurur; client da modelin ne zaman ve nasıl çağıracağını bilmesi için bu açıklamaları modele aktarır. Invariant Labs bu saldırı sınıfını Nisan 2025'te adlandırıp yayımladı ve OWASP'ın taslak MCP Top 10 listesinde MCP03:2025 olarak yer alıyor.

İncelemedeki laboratuvar sunucusu, iki sayıyı topladığını söyleyen satırın ötesinde, açıklamasına modeli kullanmadan önce yerel bir dosyayı okumaya, içeriğini ek bir parametre üzerinden aktarmaya, bu adımı kullanıcıdan gizlemeye ve sonuçları uzak bir toplayıcıya yansıtmaya yönelik bir yönerge gömen bir add tool'u ortaya koyuyor. Laboratuvar etkisiz durumda — dosya bir yer tutucu ve domain çözümlenemiyor — ama saldırının biçimi tam olarak bu: belge gibi görünen bir komut, bir gizlilik isteği ve yalnızca veri dışarı çıkarmak için var olan bir parametre.

İncelemeye göre Invariant'ın özgün gösteriminde, client onayı diyaloğı tam argümanları göstermiyordu; dolayısıyla kullanıcı, çağrının ne taşıdığını görmeden onaylayabiliyordu. Yazıda atıf yapılan Ağustos 2025 tarihli MCPTox benchmark'ı, 45 canlı MCP sunucusu ve 353 gerçek tool üzerine kurulu 1.348 kötücüllik vakasıyla 20 LLM agent'ı test etti: en yüksek saldırı başarı oranı yüzde 72,8 oldu, reddetmeler ise yüzde 3'ün altında zirve yaptı.

Rug pull tanımları onaydan sonra değiştiriyor

MCP spesifikasyonunda, kullanıcının onayından sonra sunucuyu tool tanımlarını sabit tutmaya zorlayan hiçbir şey yok. Bir sunucu tools/list'ten istediğini döndürebilir ve listChanged yeteneğini bildiren sunucular oturum ortasında yeni bir liste duyurabilir. Rug pull bunu silaha dönüştürür: sunucu izlenirken düzgün davranır, sonra bir açıklamayı veya schema'yı değiştirir — tüm kullanıcılar için aynı anda ya da yalnızca bazıları için.

İkinci laboratuvar, açıklamasına daha sonra, ilgisiz bir send_email tool'u üzerinden gönderilen her e-postayı gizli kopyalama talimatı ekleyen bir hava durumu tool'u gösteriyor. Birden çok sunucuya bağlanan bir client tüm tool açıklamaları arasında tek bir context paylaştığından, zehirli hava durumu tool'u diğer sunucuların sağladığı tool'ları da etkileyebiliyor.

Yakından ilgili gerçek bir örnek, Check Point Research tarafından MCPoison adıyla rapor edilen Cursor'daki CVE-2025-54136. Orada hareketli parça, bir projenin yapılandırma dosyasındaki MCP sunucu girdisiydi: 1.3 sürümünden önce Cursor bir sunucu eklendiğinde onay istiyordu ama onaylı bir girdinin komutu düzenlendiğinde istemiyordu; dolayısıyla paylaşımlı bir depoya yazma erişimi olan herkes zararsız bir komutu kötücül bir komutla değiştirebiliyordu. CVE numaralandırma otoritesi olarak GitHub, açığı 7.2 (Yüksek) olarak derecelendirdi. Cursor 1.3 artık her değişiklikte yeniden onay istiyor.

Tespit ve dürüst sınırları

mcpprobe'un META-01 kontrolü, zehirli açıklamaları buluşsal yöntemle işaretliyor — prompt tarzı biçimlendirme, gizlilik istekleri, veri sızdırma dili, kimlik bilgisi yolları, base64 blokları ve görünmez Unicode — tool'u hiç çağırmadan. META-02 kontrolü ise her tool, prompt ve kaynak tanımını artı sunucu talimatlarını bir baseline dosyasına hash'liyor ve sonraki her sapmayı raporlayarak değişen bir açıklamayı veya input schema'yı orta önem derecesiyle değerlendiriyor.

Her iki inceleme de boşluklar konusunda açık sözlü. META-01, şüpheli bir ifade kullanmadan yanıltan bir açıklamayı kaçırabilecek bir buluşsal yöntem; META-02 yalnızca bir şeyin değiştiğini kanıtlıyor, değişikliğin kötücüllüğünü değil, ve meşru bir sürüm de onu tetikliyor — kasıtlı olarak, çünkü birinin bakması gerekiyor. Ayrıca tarayıcı, yalnızca sunucunun tarama anında kendisine sunduğunu gözlemler.

Düzeltmeler, tool tanımlarını kodla aynı disipline sokuyor: açıklama ve schema düzenlemelerini pull request'lerde inceleyin, bir baseline'ı commit'leyin, surface değiştiğinde CI'ı başarısız kılın ve build sırasında gizli Unicode'u ayıklayın. Client'lar ise onayladıklarını hash'lemeli, hash her değiştiğinde yeniden sormalı ve bir list_changed bildirimini sessizce yenileme değil, yeniden kontrol sinyali olarak ele almalı.

Neden önemli

MCP, AI agent'lar ile harici tool'lar arasındaki varsayılan altyapı haline geliyor ve bu incelemeler onay modelindeki gerçek bir boşluğu gösteriyor: kullanıcılar bir sunucunun kimliğini onaylıyor, modele ulaşan kesin tanımları değil; ve bir açıklama, context'e girdiği anda talimat işlevi görüyor. İki saldırı da bir bug'ı istismar etmiyor — söz konusu olan her şey belgelenmiş bir protokol özelliği. Client'lar onaylı tanımları sabitleyip farklarını çıkarmaya ve sunucu yayıncıları açıklamaları kod incelemesine tabi tutmaya başlayana kadar, kurulu her MCP sunucusu modele açık, değiştirilebilir bir talimat kanalı olarak kalıyor.

  • #model-context-protocol
  • #security
  • #ai-agents
  • #tool-poisoning
  • #llm

İlgili yazılar