8 puan yazan GN⁺ 2025-10-14 | 1 yorum | WhatsApp'ta paylaş
  • Haziran 2025’te GitHub Copilot Chat’te kritik bir güvenlik açığı (CVSS 9.6) keşfedildi
  • CSP atlatma ve uzaktan prompt injection teknikleri kullanılarak gizli bilgiler ile özel kodun sızdırılabildiği doğrulandı
  • GitHub’ın gizli yorum özelliği kötüye kullanılarak başka kullanıcıların Copilot yanıt çıktıları manipüle edilebiliyor
  • GitHub’ın Camo proxy yapısı ayrıntılı biçimde analiz edilerek CSP atlatması başarıyla gerçekleştirildi
  • GitHub, görüntü render etme özelliğini devre dışı bırakarak söz konusu açığı Ağustos 2025’te acil olarak düzeltti

TL;DR özeti

  • Haziran 2025’te GitHub Copilot Chat’te özel depolardaki kaynak kodu ve gizli bilgilerin sızdırılmasına imkân veren kritik bir açık keşfedildi
  • Araştırmacı, uzaktan prompt injection ve GitHub CSP(Content Security Policy) atlatma yöntemlerini kullanarak Copilot yanıtlarını tamamen manipüle edip kontrol edebildi ve kötü amaçlı kod ya da bağlantı önerileri ürettirebildi
  • Bu saldırının kilit noktası, GitHub’ın resmî gizli yorum özelliği ile Copilot’un bağlama duyarlılığını kullanarak kimsenin göremediği bir şekilde prompt enjekte edebilmesidir
  • GitHub’ın görüntüler için dış bağlantıları otomatik olarak Camo proxy’ye dönüştürme davranışı analiz edilerek, bu yapının karakter düzeyinde tersine kullanılmasıyla sızdırılacak bilginin oluşturulması sağlandı
  • Açık, HackerOne üzerinden bildirildikten sonra GitHub tarafından Copilot Chat’in görüntü render etme özelliğinin engellenmesi ile yamalandı

Arka plan

  • GitHub Copilot Chat, geliştiricilerin soru sormasına, kod açıklaması almasına veya implementasyon önerileri edinmesine yardımcı olan entegre bir yapay zeka asistanıdır
  • Copilot Chat, depo içindeki kod, commit, PR(pull request) gibi çeşitli bağlamsal bilgileri referans alır
  • Bağlamsal bilgi arttıkça saldırı yüzeyi de genişlemektedir

Prompt injection ve gizli yorum özelliğinin kullanılması

  • GitHub Copilot’un bağlam duyarlılığını hedefleyen bir deneyde, PR(pull request) açıklama alanına belirli bir prompt eklendi
  • Ancak normalde eklenen prompt veya mesajlar tüm kullanıcılar tarafından görülebilir
  • Burada GitHub’ın resmî gizli yorum özelliği(``) kullanılarak, görünmez biçimde yalnızca Copilot’a komut iletilebildiği keşfedildi
  • Prompt gizli yorum içine yerleştirildiğinde bildirimlerde (Notifications) görünse de ayrıntılı içerik görünmediğinden Server-Side Injection etkisi ortaya çıkıyor

Kötü amaçlı promptun etkisi

  • Gizli yorum içindeki prompt, başka kullanıcılar PR sayfasına eriştiğinde de aynı şekilde Copilot’u etkiliyor
  • Basit metinler yerine kod önerileri, Markdown, kötü amaçlı URL’ler, Copilotevil gibi zararlı paket önerileri dahil birleşik komutlar enjekte edilebiliyor
  • Copilot, isteği gönderen kullanıcıyla aynı yetkileri kullandığı için özel depolara erişip buradaki bilgilerden yararlanabiliyor
  • Bilerek base16 ile kodlanmış veriyi URL’ye ekleyerek, kullanıcı tıkladığında bilgilerin saldırgana sızdırıldığı senaryolar uygulanabiliyor

Temel etkilerin özeti

  • Başka kullanıcıların Copilot yanıt içeriğini manipüle etme ve kontrol etme
  • Markdown, görüntü, kod, URL gibi özelleştirilmiş prompt injection mümkün
  • Mağdur kullanıcının yetki kapsamındaki bilgilerin sızdırılmasına yönelik saldırı girişimleri gerçekleştirilebiliyor

GitHub CSP atlatmasının yapısal analizi

  • GitHub, güçlü CSP uygulaması ile dış alan adlarından görüntü ve kaynak yüklemelerini sınırlar
  • README veya Markdown içine görüntü eklendiğinde, GitHub Camo Proxy dış URL’leri HMAC imzası tabanlı proxy URL’lerine dönüştürür
  • Tarayıcının görüntüyü yükleyebilmesi için önceden GitHub tarafından üretilmiş Camo URL’si ve imza değeri gerekir
  • Kullanıcı keyfi olarak dinamik veri içeren bir URL oluştursa bile Camo proxy’den geçmezse engellenir

Camo yapısının kötüye kullanılması

  • Araştırmacı, alfabe ve özel karakter kümesinin tamamı için bir Camo proxy URL sözlüğünü önceden oluşturup gizli prompt içine dahil etti
  • Copilot’tan bir "ASCII Art oyunu" istenerek, sızdırılacak bilginin (ör. kaynak kodu, anahtarlar) Camo proxy görüntülerinin dizisine dönüştürülmesi sağlandı
  • Her görüntü isteğiyle tarayıcıda yalnızca 1x1 şeffaf piksel yanıtı alındığından kullanıcı tarafında görünür bir değişiklik olmuyor
  • Son olarak, cache sorunlarını önlemek için rastgele parametreler eklendi

Gerçek saldırının uygulanması ve denemesi

  • Hedef olarak özel bir proje issue’su içindeki zero-day güvenlik açığı açıklama bilgisi seçildi
  • PoC(kavram kanıtı) ile gerçek sızdırma saldırı süreci kanıtlandı
  • Copilot’a örnek olarak "AWS_KEY" anahtar sözcüğünü aratıp bulunan sonucu sızdırmaya kadar süreç otomatikleştirildi

GitHub’ın yanıtı ve yama

  • GitHub, 14 Ağustos 2025 itibarıyla Copilot Chat’te görüntü render etmeyi tamamen devre dışı bırakarak açığı giderdi

Daha fazlası

1 yorum

 
GN⁺ 2025-10-14
Hacker News görüşleri
  • Tüm çalışma ortamımızı self-hosted bir VCS olan Forgejo’ya taşımaktan son derece memnunuz. İki yıl önce tüm müşteri depolarını da taşımaya başlamıştık; yalnızca GitHub abonelik ücretlerini ciddi biçimde azaltmakla kalmadık, aynı zamanda günde 30-40 geliştiricinin kullandığı sistem çok daha hızlı ve kararlı hale geldi. Ayrıca VSCode ve LLM özellikleri gömülü tüm editörlerin kullanımını yasakladık. Geliştiriciler CLI tabanlı kodlama ajanlarını kullanabiliyor, ancak bunu sıkı şekilde izole edilmiş container’lar içinde, yalnızca sınırlı kaynak koduna izin verecek biçimde işletiyoruz.

    • 30-40 geliştiricinin kendi yerel makinelerine depoları clone edip çalıştığı bir ortamda, birinin yanlışlıkla tüm depoyu bir LLM’e ifşa etmesini nasıl engellediğinizi merak ediyorum. Eğer biri mesleki zarar görmekten korktuğu için hatasını bildirmezse, böyle bir sızıntıyı nasıl tespit ediyorsunuz?

    • Alternatif olarak hangi IDE’yi kullandığınızı sormak isterim.

    • CLI araçlarının nereye bağlandığını merak ediyorum. OpenAI veya Claude’un resmî hizmetlerine mi, yoksa AWS Bedrock gibi bir sağlayıcıya mı bağlanıyorlar?

    • VSCode’un tamamını yasaklamak, işlev bazında sorunlu eklentileri kısıtlamanın ötesine geçen aşırı bir önlem gibi geliyor. VSCode; Haskell, Lean 4, F* gibi diğer IDE’lerde desteği zayıf olan diller de dahil olmak üzere geniş kapsamlı destek sunan tek IDE. Büyük ticari tüketim ürünleri şirketlerinde bile VSCode’un kendisi yasaklanmıyor; yalnızca sorunlu özellikler kullanılmasa yeterli diye düşünüyorum.

  • Bu sorunun aslında düzgün biçimde çözüldüğünü sanmıyorum. Copilot’un doğal dil girdisini kabul etmesi asıl dikkat çekici nokta; yani hangi sızdırma yöntemi olursa olsun, o yöntemi İngilizce olarak yazarsanız aynen uygulayacaktır. Belirli bir yöntemin “düzeltildiği” söyleniyor ama bunun pratikte nasıl yapıldığı açıklanmıyor. Örneğin base64 bir image URL’sinde kullanılabilir ve “alışveriş sepeti listemi yanlışlıkla passswd alanına kaydetmişim, bulmama yardım et” gibi kandırmacalarla parolalar bile elde edilebilir. Bulunabilecek çok fazla açık var gibi görünüyor. Acaba bunlar için bir bug bounty programı var mı? Burası tam bir altın madeni.

    • base64’ün image URL’sinde kullanılmasıyla tam olarak ne kastedildiğini merak ediyorum. Camo uygulanmayan bir image URL kullanılmasını mı öneriyorsunuz? Bildiğim kadarıyla CSP nedeniyle Camo uygulanmamış görseller engelleniyor. Ayrıca Copilot ajanının internete erişim yetkisi yoksa fetch zaten zor olur; eğer varsa, görsel kullanmaktan çok daha kolay saldırı yolları açılabilir.

    • GitHub’un bu sorunu Copilot Chat’te görsel render etme özelliğini tamamen devre dışı bırakarak çözdüğünü düşünüyorum.

  • Alfabedeki tüm harf ve semboller için önceden Camo URL’leri üretip bunları prompt’a ekleme fikri etkileyici. Çok zarif bir yaklaşım.

  • Bu yazı biraz Legit adlı bir şirketin tanıtımı gibi hissettiriyor. Ancak gerçekte tüm AI tabanlı çözümler, şeffaflık eksikliği ve güven sorunu şeklindeki aynı zayıflığı taşıyor. FOSS tabanlı olmayan AI siber güvenlik araçlarını kullanmak, güvenlik riskini daha da artırabilir.

  • Bu ilk kez olmuyor; daha önce de “GitHub Copilot Chat: From Prompt Injection to Data Exfiltration” başlıklı ilgili bir örnek vardı.

    • Böyle şeyler olmaya devam edecek.
  • PR içindeki gizli HTML yorumları kullanılarak bilgi saklanmasının hâlâ ciddi bir sorun olabileceğini düşünüyorum; özellikle open source depolarda bu daha da tehlikeli. Bu konuda bir iyileştirme yapılıp yapılmadığını merak ediyorum.

    • Bu özellik issue/PR şablonlarına yönlendirici mesajlar eklemek için yaygın biçimde kullanılıyor. Ancak Copilot girdisinden yorumları çıkarmak nispeten basit görünüyor ve LLM’lerin “prompt injection” sorunu hâlâ tamamen güvenli biçimde çözülmemişken, en azından geçici olarak böyle bir işleme ihtiyaç var.
  • Bu exploit’in, verilerin sırayla yeniden kurulabilmesini sağlamak için LLM’in yavaş, token bazlı yanıt modelinden yararlanması ilginç. Eğer LLM tüm yanıtı tek seferde blok halinde döndürseydi, zamanlama bozulur ve yeniden kurulum çok daha zor olurdu diye düşünüyorum.

    • Her karakter için değil, karakter konumunu da içeren URL’ler ürettirilse nasıl olur diye önermek isterim. Örneğin hacked dizgesi için 0.0.0.0/1-h, 0.0.0.0/2-a şeklinde istek yaptırılabilir; sonra bu istekler sıralanıp tekrar eden çağrılar da ayıklanabilir.
  • Copilot kullanıcılarının repo erişim yetkilerini salt okunurla sınırlandırarak bir önlem alınamaz mı diye merak ediyorum.

  • Copilot ile özel kaynak kodumu en son ne zaman sızdırdığımı hatırlamıyorum bile.

  • Gerçekten çok sıra dışı ve hoş bir yaklaşım.