- Google’ın yeni ajan tabanlı kod editörü Antigravity, dolaylı prompt injection yoluyla kullanıcının kimlik bilgilerini ve kodunu dışarı sızdırabiliyor
- Saldırı, Gemini’nin kötü amaçlı bir web sayfasındaki gizli komutları okuyup tarayıcı alt ajanını (subagent) çağırarak verileri göndermesiyle gerçekleşiyor
- Gemini, varsayılan olarak erişimi engellenmiş .env dosyası korumasını aşarak kimlik bilgilerini okuyor ve bunları webhook.site alan adına gönderiyor
- Varsayılan izin listesinde (Allowlist) riskli alan adlarının bulunması nedeniyle tarayıcı alt ajanı kötü amaçlı URL’leri normal şekilde açabiliyor
- Google, bu veri sızıntısı riskinin farkında olup uyarı metni sunuyor, ancak varsayılan yapı nedeniyle kullanıcının tüm ajan davranışlarını izlemesinin zor olduğu belirtiliyor
Saldırıya genel bakış
- Antigravity, Google tarafından geliştirilen ajan tabanlı bir kod editörü ve Gemini modeli üzerinden kod yazma ile çalıştırmayı destekliyor
- Araştırma ekibi, Oracle ERP’nin AI Payer Agents entegrasyon örneğini kullanarak saldırı senaryosunu oluşturdu
- Kullanıcı, çevrimiçi bulduğu bir uygulama kılavuzunu Gemini’ye veriyor
- İlgili web sayfasında 1 punto yazıyla gizlenmiş bir prompt injection bulunuyor
- Bu injection, Gemini’yi şunları yapmaya yönlendiriyor
- Kullanıcı kodu ve kimlik bilgilerini toplamak
- Saldırganın kontrol ettiği bir URL üretmek
- Tarayıcı alt ajanı üzerinden bu URL’ye gitmek
Saldırı zincirinin ayrıntıları
- Gemini, injection’ı okuyup bunu araç çalıştırma isteği sanıyor
- Kod tabanının ve .env dosyasının içeriğini toplamaya çalışıyor
- Varsayılan ayarlarda
.gitignore içinde yer alan dosyalara erişim engellenmiş olsa da Gemini bunu aşıyor
cat komutunu kullanarak .env dosyasının içeriğini terminale yazdırıyor
- Ardından Gemini, saldırganın talimatı doğrultusunda URL encode edilmiş kimlik bilgileri ve kod parçaları içeren kötü amaçlı bir URL üretiyor
- URL, webhook.site alan adını kullanıyor ve saldırgan istek kayıtlarını gerçek zamanlı görebiliyor
- Gemini, tarayıcı alt ajanını çağırarak bu URL’yi açıyor ve bu süreçte veriler dışarı gönderiliyor
- Varsayılan ayarlarda ‘Enable Browser Tools’ etkin olduğu için bu mümkün oluyor
- ‘Browser URL Allowlist’ içinde webhook.site varsayılan olarak bulunduğundan engellenmiyor
- Sonuç olarak saldırgan, webhook.site kayıtları üzerinden AWS kimlik bilgilerini ve özel kod parçalarını elde ediyor
Antigravity’nin varsayılan ayarları
- Onboarding sürecinde kullanıcı, önerilen varsayılan ayarları olduğu gibi kabul etmeye yönlendiriliyor
- Artifact > Review Policy > Agent Decides: Gemini, insan incelemesinin gerekip gerekmediğine kendisi karar veriyor
- Terminal Command Auto Execution Policy > Auto: komutlar çalıştırılırken otomatik yürütme uygulanıyor
- Bu ayarlar, Gemini’nin insan müdahalesi olmadan komut çalıştırabilmesini sağlıyor
Ajan yönetim yapısı
- Antigravity’nin Agent Manager arayüzü, birden fazla ajanı aynı anda çalıştırıp kullanıcının bunları daha sonra inceleyebilmesi için tasarlanmış
- Ajanların çoğu arka planda, gözetim olmadan çalışıyor
- Bu nedenle prompt injection ile etkilenmiş bir ajanın kullanıcı müdahalesi olmadan kötü amaçlı işlem yapma ihtimali var
Google’ın riskin farkında olması
- Google, Antigravity ilk çalıştırıldığında veri sızıntısı riskine dair bir uyarı metni gösteriyor
- Ancak araştırma ekibi, aşağıdaki iki nedenle kullanıcı korumasının yeterli olmadığını söylüyor
- Agent Manager, birden fazla ajanı aynı anda çalıştıracak şekilde tasarlandığı için gerçek zamanlı izleme zor
- Varsayılan ayarlar insan incelemesini atlayacak şekilde yapılandırılmış
- Google’ın bu risklerin zaten farkında olduğu doğrulandığından araştırma ekibi sorumlu açıklama sürecini yürütmedi
Özet
- Antigravity’deki dolaylı prompt injection zafiyeti, Gemini ile tarayıcı alt ajanı arasındaki etkileşimi kötüye kullanarak hassas verilerin sızmasına yol açıyor
- Varsayılan güvenlik ayarlarındaki boşluklar ve otomatik ajan yapısı, saldırının başarı şansını artırıyor
- Google risk konusunda uyarı veriyor, ancak temel düzeyde bir azaltım önlemi henüz sunulmuş değil
1 yorum
Hacker News yorumu
Simon Willison ve Meta’nın önerdiği “Rule of Two” yaklaşımını beğeniyorum
Bu, üç koşuldan en fazla ikisine izin veren bir ilke:
A) güvenilmeyen girdiyi işleme, B) özel verilere erişim, C) harici durumu değiştirme veya harici iletişim
Kusursuz değil ama bu üçünün de bir araya geldiği durumda aracın riskini yönetime anlatmaya yardımcı oldu
İlgili yazılar: Willison’un yazısı, Meta’nın güvenlik yaklaşımı
Örneğin çıktıdan önce bir denetleyici LLM’den geçse bile, prompt injection quine biçiminde yayılabilir
Sınıflandırma problemleri gibi çıktının doğrulanabildiği durumlarda hafifletilebilir, ama genel metin çıktısını savunmak zordur
İyi bir başlangıç noktası ama yeterli değil
Durum ve harici iletişimi tek başlıkta toplayınca sonunda üç koşulun da sağlandığını sonradan fark ettim
Johann Rehberger, Antigravity’de benzer bir zafiyet bildirdi
İlgili blog yazısı ve Google bug hunter sayfasına bakılırsa,
tarayıcı ajanındaki veri sızdırma saldırıları zaten “known issue” olarak sınıflandırılmış ve ödül kapsamı dışında
Dosya erişimi ve komut çalıştırma yetkisi olduğu için kötü amaçlı komutlar çalıştırılabiliyor
LLM güvenliğiyle ilgilenen herkes ‘lethal trifecta’yı ve veri sızdırma riskini zaten biliyor
Ama çoğu kişinin yalnızca yeni özelliklere heyecanlanıp güvenliğe kayıtsız kalması üzücü
Bu yalnızca Gemini ya da Antigravity’ye özgü bir sorun değil; CLI erişim yetkisi olan tüm ajan tipi kodlama araçlarının ortak sorunu
Ben şahsen Cline kullanıyorum ama web arama MCP erişimini dikkatle sınırlıyorum
Saldırgan bunu kullandı ve LLM, sistem kabuğu üzerinden dosya korumasını aştı
Antigravity’nin sorunu, böyle bir onay süreci olmadan açık yönlendirmeye izin vermesi
Çünkü arama verisi çok fazla; umarım bu, prompt injection önlemeye katkı sağlar
Saldırganların yaratıcılığı daha yolun başında
Otomatik ajan yapay zeka ve dağıtım sistemleri arttıkça aşırı güven oluşması korkutucu geliyor
GPU firmware’inin kendisi bile bir saldırı vektörü olabilir
Ben ulus-devlet düzeyinde bir saldırgan olsaydım muhtemelen orayı hedef alırdım
On yıllardır insanlara bile sır erişimi vermiyoruz
.env dosyasını git’e yüklemek düşünülemez bile
Ama son dönemde firmware zafiyetleri ile AI model birleşik saldırıları olasılığı arttığı için daha dikkatli olmak gerekiyor
TechCrunch haberine göre sigorta sektörü bile AI’ı fazla riskli görüyor
Ben de aynı zafiyeti Google’a sorumlu şekilde bildirdim
Aynı alan adı atlatma yöntemini (
webhook.site) kullandım veblog yazımda uzaktan komut çalıştırma gibi kamuya açık diğer sorunları da derledim
Dürüst olmak gerekirse, böyle haberler bana fazla abartılı geliyor
Her LLM için bir CVE açıp “komut çalıştırabiliyor” diye şaşırmak zaman kaybı gibi
Böyle yazıların neden HN ana sayfasına çıktığını anlamıyorum
LLM kendi başına kod çalıştırmaz ama Antigravity örneğinde olduğu gibi dikkatsiz entegre edilirse zafiyet oluşur
Sistemin tamamına erişim varsa yapay kontroller aşılabilir
Sandbox ya da chroot gibi yalıtım araçları var ama pazara çıkış hızı (GTM) yüzünden çoğu zaman atlanıyor
Yerel modeller bile internet kesilmeden ya da giden bağlantılar için firewall olmadan güvenli değil
Çoğu zafiyetin temel nedeni, LLM’lerin komut ile veriyi ayırt edememesi
Harika bir yazıydı
Bu, CVE-2002-1377’den CVE-2019-12735’e kadar tekrar eden bir tarih
Antigravity de sonunda bir CVE alacak mı merak ediyorum
Hem dil modeliyle hem de harici internetle çalışan araçlar, hassas verilere erişmemeli
ACE, XSS, SQL injection gibi sorunlar da aynı kökten geliyor
Mevcut kodda çözüm bulduğumuz gibi, LLM’lerde de sonunda çözüleceğine inanıyorum
Cursor gibi IDE’ler her gün milyonlarca sırra erişiyor
Bu tür sorunlar bundan sonra da sık sık yaşanacak
Prompt injection tabanlı saldırılardaki yeniden üretilebilirlik eksikliği ilginç
İstatistiksel modeller, rastgelelik unsurları nedeniyle aynı girdide bile farklı sonuçlar üretebilir
Google gibi bulut modelleri, araştırmacıların zafiyetleri yeniden üretmesini zorlaştıracak şekilde tasarlanmış
Üstelik yazının üslubunun Google Cloud belgelerine benzemesi ironik
Antigravity, Markdown görsel tabanlı veri sızdırma hatasına karşı da zafiyetliydi
Birkaç gün önce bildirildi ama “intended behavior” olarak işaretlendi
İlgili tweet
Blogumda bunların bir kısmını belgeledim