Microsoft’un Azure DevOps için sunduğu resmi MCP sunucusundaki bir açık, görünmeyen pull request yorumlarının yapay zekâ inceleme ajanlarını yanlış yönlendirmesine izin veriyor. Güvenlik araştırmacıları, hidden HTML yorumlarıyla yerleştirilen komutların ajana doğrudan geçebildiğini ve bunun da yorum yapan kullanıcının yetkileriyle başka projelerde işlem yaptırabildiğini ortaya koydu.
Açık, pull request açıklamalarını işleyen bir araçta ortaya çıkıyor. Web arayüzünde HTML yorumu olarak yazılan içerik normal kullanıcıya görünmüyor, ancak Azure DevOps REST API aynı metni ham halde döndürüyor; MCP sunucusu da bu metni herhangi bir prompt-injection korumasından geçirmeden ajana aktarıyor. Böylece saldırgan, ajana hiç konuşmadan, onun daha sonra okuyacağı metne talimat gömebiliyor.
Görünmeyen yorum, görünen yetki
Manifold Security’nin bu hafta ayrıntılarını paylaştığı bulgu, klasik bir confused-deputy zinciri oluşturuyor. Microsoft’un bu sunucuyu, kullanıcıların pull request, pipeline, wiki ve work item’lar üzerinde kendi yetkileriyle işlem yapabilsin diye dağıttığı belirtiliyor. Sorun tam da burada büyüyor: Başka biri tarafından yazılmış içerik, ajan için talimata dönüşebiliyor.
Azure DevOps PR açıklamaları Markdown kabul ettiği için HTML yorumlarını da barındırabiliyor. Web arayüzünde biçimindeki bir yorum görünmüyor; inceleme yapan kişi açıklamayı kaydırırken sıradan bir değişiklik metni görüyor. REST API ise yorumu olduğu gibi döndürüyor ve sunucu bu metni ajana ham biçimde iletiyor.
Manifold’un işaret ettiği kritik ayrım da burada başlıyor. İnsan ile modelin gördüğü içerik farklı olunca, saldırgan ajana hiç erişmeden onu yönlendirebilecek bir taşıma kanalı elde ediyor. Araştırmacılar, bunun delivery mechanism olduğunu ve gizli metnin ajan tarafından daha sonra okunacağını bildikleri bir içeriğe yerleştirildiğini anlattı.
İnceleyen kullanıcı ajandan pull request’i gözden geçirmesini istediğinde, gizli metin ajanın hedefini yeniden yazabiliyor. Ajan, inceleme yapan kişinin kimlik bilgileriyle çalıştığı için saldırganın erişemediği projelerde de işlem yapabiliyor. Manifold, erişimin kaynak kod, secrets ve work item’lara kadar uzandığını, kanıt kavramında ise yalnızca wiki sayfasının dışarı sızdırıldığını belirtti.
Şirket, bu yetki genişlemesini normal vaka olarak tanımladı. Pull request’i açan kişinin çoğu zaman inceleme yapan kişiden daha kıdemsiz olduğunu, buna rağmen saldırganın metin yoluyla inceleme sahibinin erişimini ödünç alabildiğini vurguladı. Doğrudan bir kazanç oluşmuyor; saldırgan, inceleme yapan kişinin görmediği içerik üzerinden onun yetkisini kullanıyor.
Manifold’un anlattığı akışta saldırgan, normal görünen bir pull request açıyor ve açıklamaya gizli bir HTML yorumunun içine payload yerleştiriyor. Yorum web arayüzünde boş göründüğü için insan bir tehdit görmüyor, fakat ajan açıklamayı okuduğunda aynı içerik modele ulaşıyor. Araştırmacılar, bu metnin ajanın görevini değiştirebildiğini ve komutun insan tarafından hiç görülmediğini söylüyor.
Teknik zincir, bir insan ile modelin aynı şeyi okumaması üzerine kuruluyor. Saldırgan ajanla doğrudan konuşmuyor; bunun yerine gelecekte okunacağını bildiği içerikte talimat bırakıyor. Bu sayede pull request açıklaması, ajan için gizli bir komut taşıyıcısına dönüşüyor.
Microsoft’un eklediği savunma yolu bu akışta çalışmadı
Manifold’un en dikkat çektiği nokta, Microsoft’un bu sınıf saldırılar için zaten bir savunma mekanizması yayımlamış olması. Şirketin açık kaynak kodunu inceleyen araştırmacılar, Microsoft’un kendi indirekt prompt injection rehberindeki spotlighting tekniğini sunucuya eklediğini gördü. Bu yöntem, güvenilmeyen içeriği ayırıcılarla sararak modelin veri ile talimatı ayırmasını sağlamayı amaçlıyor.
Ancak bu koruma tüm araçlara eşit şekilde uygulanmamış. Microsoft, PR #1062 içinde wiki sayfası ve build log araçlarının çıktısını createExternalContentResponse adlı ortak bir yardımcı fonksiyondan geçirirken, tek bir pull request’i döndüren repo_get_pull_request_by_id aracı aynı çağrıyı yapmıyor. Sonuçta pull request açıklaması ham halde geri dönüyor; saldırganın metni değiştirmesi gereken yüzey tam da bu nokta oluyor.
The Hacker News, 21 Temmuz itibarıyla mevcut kaynak kodda da aynı yolun açık kaldığını doğruladığını yazdı. Yani sorun geçmişte kapatılmış bir örnek değil; incelenen sürümde hâlâ görülebilen bir eksiklikten söz ediliyor.
Manifold, denemeyi v2.7.0 sürümünün yerel bir kurulumunda yaptı. Bir projedeki katkıcı, dışarıdan bakıldığında sıradan görünen bir PR açtı; gizli yorum içindeki payload ise incelemeyi başlatan komutla birlikte devreye girdi. Ajan, araç zinciri içinde önce farklı bir projede pipeline çalıştırdı, ardından saldırganın erişemediği gizli bir wiki sayfasını okudu ve okuduğu içeriği PR yorumuna yazarak saldırganın görmesini sağladı.
Bu zincirdeki her adım, ajanın normalde yapmasına izin verilen işlemlerden oluşuyor. Araştırmacılar, sorunun komutların tek tek izinli olması değil, “bir insanın hiç görmediği metnin yön verdiği sıra ve niyet” olduğunu yazdı. Aynı zincirin Copilot CLI ve Claude Code ile de yeniden üretildiği belirtildi; yani mesele tek bir ajan ürününe özgü görünmüyor.
Yine de saldırının işlemesi için birkaç koşul gerekiyor. Saldırganın PR metni yazabilmesi, iş akışının bu metni bir ajana vermesi, inceleme yapan kullanıcının erişim düzeyinin saldırgandan geniş olması ve ajanın araçları sormadan çalıştırabilmesi bunların başında geliyor. Manifold, son adımı otomatik onay yaklaşımıyla test ettiğini, yani her araç çağrısı için tek tek onay istemeyen bir yapı kullandığını söyledi; normalde tam da bu kontrol, tuhaf bir cross-project pipeline çağrısını zamanında fark ettirecek eşik olabilirdi.
Bu tabloyu daha riskli yapan şey, ekiplerin giderek otomatik inceleme, triage ve özet üretimine yönelmesi. İnsan her çalıştırmada komut vermiyorsa ve her sonucu okumuyorsa, saldırganın yerleştirdiği açıklama kendi kendine tetiklenebiliyor; sızıntı da kimse fark etmeden daha uzun süre devam edebiliyor.
Benzer bir sınıf saldırı bu yılın başında da gündeme gelmişti. Mayıs 2025’te Invariant Labs, GitHub’ın MCP sunucusuna karşı aynı yöntemi gösterdi; kamuya açık bir issue üzerinden ajanı özel bir depoyu okumaya ve veriyi bir pull request aracılığıyla sızdırmaya yönlendirdi. Aynı teknik, sonrasında otomatik GitHub ajan iş akışlarına da taşındı.
Bu örnek, Simon Willison’ın “lethal trifecta” adını verdiği üçlüye de uyuyor: özel verilere erişim, güvenilmeyen içerikle temas ve dışarı veri çıkarma yolu. Bu üçü aynı ajan içinde birleştiğinde, tek bir metin parçası sistemi sahibine karşı çevirebiliyor. Willison’ın işaret ettiği örneklerde de bu kombinasyonun en tehlikeli tarafı, saldırganın karmaşık bir istismar zincirine değil, doğru yere yazılmış tek bir metne ihtiyaç duymasıydı.
Microsoft cephesi, Manifold’un bulguyu koordineli açıklama süreciyle iletmesinin ardından teşekkür etti ve bunu “bilinen bir yapay zekâ riski sınıfı” olarak tanımladı. Şirket, güvenlik önlemleri üzerinde çalışmayı sürdürdüğünü de ekledi. Ancak mevcut açıklamada kodda değişiklik yapılıp yapılmayacağına ya da bir CVE numarası atanıp atanmayacağına dair net bilgi verilmedi.
Microsoft ayrıca saldırının çalışması için saldırganın zaten bir projeye yazma yetkisine sahip olması ve ikinci bir kullanıcının o içerik üzerinde bir yapay zekâ aracı çalıştırması gerektiğini belirtti. Şirket, müşterilere proje erişimini sınırlandırmalarını ve bir yapay zekâ aracına işlem yaptırmadan önce önerilen değişiklikleri gözden geçirmelerini tavsiye etti. Araştırmacıların işaret ettiği boşluk ise tam da burada kalıyor: insanın gördüğü arayüzde payload görünmüyor.
21 Temmuz itibarıyla açık için yayınlanmış bir düzeltme sürümü bulunmuyor ve kamuya açık veritabanlarında bir CVE kaydı da görünmüyor. En son sürüm olan v2.8.0, 24 Haziran’da yayımlandı. Ayrıca bulgunun Manifold’un kendi testleri dışında sahada kullanıldığına dair kamuya açık bir rapor da yok.
Manifold, sadece yerel ve PAT tabanlı sunucuyu test ettiğini, ancak asıl kök nedenin iletim katmanında değil sunucunun kodunda bulunduğunu söyledi. Bu nedenle araştırmacılara göre barındırılan uzak MCP sunucusu da aynı yapıdan etkilenebilir, fakat bu sürüm üzerinde test yapılmadı ve Microsoft da bu noktaya doğrudan yanıt vermedi.
İnceleme zincirinde kullanılan spotlighting tek başına prompt injection’ı ortadan kaldırmıyor. Aynı teknik, kod inceleme aracında işi olmayan pipeline çalıştırmalarını, wiki okumalarını ve yorum göndermeyi de kapsam dışına bırakacak şekilde kısıtlanmadıkça koruma eksik kalıyor. Manifold, ajan günlüklerinde projeler arası pipeline çalıştırmaları, wiki okumaları ve inceleme sırasında gönderilmiş yorumlar aranmasını, açık PR açıklamalarında ise gizli HTML yorumlarının taranmasını önerdi; çünkü payload’ı göremeyen insan kontrol noktası sayılmıyor.
