Aynı davranış bir üründe açık, diğerinde özellik — ajan tarayıcılarda kimse "güvenlik açığı" ne demek bilmiyor
Zenity Black Hat'te beş ajan tarayıcıda tek tık gerektirmeyen bir saldırı sınıfı gösterdi. Beş şirkete bildirdi, bir kısmı düzeltti, bir kısmı bunun amaçlanan davranış olduğunu söyledi. Asıl mesele o ayrışma.
Bu yazının İngilizcesi: English version.
Ajan tarayıcı kullanıyorum: sayfayı aç, konsolu oku, ekran görüntüsü al. İşe yarıyor ve bırakmayı düşünmüyorum. Bu yazı "kullanmayın" yazısı değil.
Ama ağustosta çıkan bir araştırma, kullandığım şeyin sınırları hakkında düşündüğümden daha temel bir sorun olduğunu gösterdi. Ve ilginç olan kısım açığın kendisi değil — şirketlerin açığa verdiği cevaplar.
Ne buldular
İsrailli Zenity Labs, 6 Ağustos 2026'da Black Hat USA'de "PleaseFix" adını verdikleri bir açık sınıfı sundu. Etkilenenler tek tek ürün değil, bir kategori: Claude in Chrome, Gemini in Chrome, Perplexity Comet, ChatGPT Atlas ve Microsoft'un Copilot Edge'i.
Saldırının önemli özelliği tek tık bile gerektirmemesi. Kurbanın kötü bir bağlantıya tıklaması, bir dosya indirmesi, bir onay vermesi gerekmiyor. Ajan sayfayı okuyor, sayfadaki metin ajana talimat gibi geçiyor, ajan da kullanıcının yetkisiyle hareket ediyor: bilgi sızdırma, hesap devralma, bağlı servislere erişim. Bazı ürünlerde saldırı tarayıcının dışına taşıp yerel geliştirici araçlarına ve iç servislere uzanabiliyor (CTech'in haberi).
Son madde bir geliştirici için soyut bir senaryo değil: tarayıcının yanı başında neredeyse her zaman yerel bir şeyler çalışır — geliştirme sunucuları, iç araçlar, yönetim panelleri. Tarayıcının içindeki bir ajanın "yerel servislere uzanması" tam olarak orayı tarif ediyor.
Asıl haber: cevaplar aynı olmadı
Zenity bulguları yayımlamadan önce beş şirkete de bildirmiş. Sonuç, haberin tek cümlesinde duruyor ve bence yılın en önemli güvenlik cümlelerinden biri: bir kısmı düzeltme yayımladı, bir kısmı bu davranışın amaçlanan işleyişi yansıttığını savundu.
Burada dürüst olmam gereken bir nokta var: haber hangi şirketin hangi cevabı verdiğini yazmıyor. Ben de tahmin etmeyeceğim. Ama tam olarak bu belirsizlik, sorunun kendisini gösteriyor — aynı davranış için beş şirketten en az iki farklı hüküm çıkmış ve dışarıdan bakan kimse hangisinin neyi kabul ettiğini bilmiyor.
Klasik yazılım güvenliğinde bu olmaz. Bir kimlik doğrulama atlatması, üründen ürüne "bazen açık, bazen özellik" olmaz. CVE verilir, puanlanır, yamalanır. Ajan tarayıcılarda ise sektörün elinde ortak bir açık tanımı yok.
Neden ortak tanım yok
Zenity'den Michael Bargury'nin sözü meseleyi iyi özetliyor:
"Bu, yamayla kapatabileceğimiz bir hata değil. Ajan tarayıcılar, tarayıcıların on yıllardır dayandığı güvenlik sınırını söküyor."
Tarayıcı güvenliğinin bel kemiği köken izolasyonu (same-origin). A sitesi B sitesinin verisini okuyamaz. Bu kural otuz yıldır işliyor çünkü tarayıcı, sayfanın içeriğini veri olarak işler; sayfa tarayıcıya emir veremez.
Ajan bu ayrımı ortadan kaldırıyor. Ajanın işi zaten sayfayı okuyup ne yapması gerektiğine karar vermek. Yani sayfa içeriği, tasarımı gereği, davranışı etkileyen bir girdi. Sayfadaki metnin "veri" mi "talimat" mı olduğunu ayıran bir mekanizma yok — çünkü ikisi de aynı şey: doğal dil.
Bunu yamayla çözemezsiniz. Belirli bir kalıbı filtrelersiniz, saldırgan kalıbı değiştirir. Sınır kodda değil, tasarımda.
Bir de şeffaflık tarafı var. Klasik açık bildiriminde satıcı "düzeltmeyeceğiz" diyebilir, ama bunu yazılı ve gerekçeli yapar; kullanıcı da riski bilerek kullanmaya devam eder. Ajan tarafında bu yazışma çoğunlukla görünmüyor. Kullanıcı olarak benim bilmek istediğim şey basit: bu davranış sizce açık mı, değil mi? Cevap "değil" ise de sorun yok — o zaman ben kendi sınırımı ona göre çizerim. Cevabı hiç görmemek, çizecek bir şey bırakmıyor.
Peki "açık" sayıldığında ne oluyor — karşı örnek
Aynı sorun sınıfının açık olarak kabul edildiği bir örneğe bakmak, ayrışmanın ne kadar keyfi olduğunu gösteriyor.
Microsoft, 7 Mayıs 2026'da kendi ajan çerçevesi Semantic Kernel'de iki açık yayımladı (MSRC'nin yazısı):
| CVE | Nerede | Mekanizma |
|---|---|---|
| CVE-2026-26030 | In-Memory Vector Store | Arama filtresi, modelin temizlenmemiş çıktısıyla eval()'e giriyor; şablon dizesinden kaçıp Python sınıf hiyerarşisinden BuiltinImporter'a ulaşan enjeksiyon sistem komutu çalıştırıyor |
| CVE-2026-25592 | SessionsPythonPlugin | DownloadFileAsync, [KernelFunction] ile modele açılmış; dosya yolu tamamen model kontrolünde, doğrulama yok — Windows Başlangıç klasörüne yazıp sanal alandan çıkılabiliyor |
Bu ikisi de özünde PleaseFix ile aynı hikâye: modelin ürettiği metin, güvenilir bir girdi gibi işlenmiş. Fark şu ki burada olay CVE aldı, puanlandı, yamalandı (Python SDK 1.39.4+, .NET SDK 1.71.0+) ve düzeltme dört katmanlı bir izin listesiyle yapıldı.
Yani sorun "bu tür şeyler yamalanamaz" değil. Yamalanabiliyor — çerçeve tarafında sınır çizilebiliyor. Yamalanamayan şey, ajanın işinin kendisi sayfayı okuyup karar vermek olduğu durum. Sınırın nereden geçtiği konusunda ortak bir hüküm olmayınca, aynı davranış bir yerde CVE-2026-26030, başka bir yerde "amaçlanan işleyiş" oluyor.
Microsoft'un aynı yazıdaki uyarısı, bu blogda tekrar edeceğim türden bir cümle: modeliniz bir güvenlik sınırı değildir.
O zaman ne yapmalı
"Kullanmayın" cevabı bana faydasız geliyor; araç gerçekten işe yarıyor. Bunun yerine kendime şu kuralları koydum — hepsi ajanın yetkisini daraltmakla ilgili, davranışını tahmin etmekle değil:
Somut hâliyle:
- Ajan kendi tarayıcı profilinde çalışır. Günlük profilde e-posta, yönetim panelleri ve konsollar oturum açık durur. Ajanın o çerezlere erişmesi için hiçbir sebep yok.
- Sayfa içeriği düşman girdisidir. Ajana bir sayfayı okuttuğumda, o sayfanın metnini kullanıcıdan gelmiş bir talimat gibi değil, doğrulanmamış bir veri gibi düşünüyorum. Beklediğim şey ajanın buna direnmesi değil; direnmediğinde zararın küçük kalması.
- Yerel yüzeyi kapat. Araştırmanın en can sıkıcı bulgusu tarayıcıdan yerel servislere uzanmaydı. Ajanla çalışırken açık duran yerel geliştirme sunucusu sayısını azaltmak, koda hiç dokunmadan alınan bir kazanç.
- Geri alınamaz işi ajana verme. Ödeme, silme, yayına alma, DNS. Bunlar zaten benim kuralımdı; PleaseFix onu güçlendirdi.
Bundan çıkardığım daha genel ders
Yeni bir kategori çıktığında, güvenlik tarafı üründen önce tanımı kurmak zorunda. Ajan tarayıcılarda henüz o tanım yok: bir şirketin "hata" dediğine diğeri "özellik" diyebiliyor ve ikisi de kendi içinde tutarlı olabiliyor, çünkü kimse "ajanın kullanıcı adına yapmaması gereken şey nedir" sorusunu ortak bir yerde cevaplamadı.
Bu netleşene kadar benim tarafımdaki tek savunma, ajanın yetkisini kısmak. Zekâsına güvenerek değil, erişemediği şeye zarar veremeyeceğini bilerek.
Bu blogda reklam vermek ya da birlikte iş yapmak
MCALAB bağımsız bir stüdyo. Sponsorluk, çapraz tanıtım ya da bir iş birliği için:
ads@mcalab.com.trAyrıntılar: Reklam & iş birliği. Kullanıcı desteği için destek sayfası.