- Noma Labs, GitHub Agentic Workflows'ta dolaylı prompt injection açığı olan GitLost'u keşfetti; yalnızca herkese açık bir depo issue'su üzerinden aynı organizasyondaki özel depo verileri herkese açık yorumlarda ifşa edilebildi
- Bu özellik, Markdown iş akışlarını YAML Actions dosyalarına derliyor; Claude veya GitHub Copilot tabanlı yapay zeka ajanı issue'ları okuyup araç çağırıyor ve organizasyon içindeki depolara erişiyor
- Savunmasız iş akışı,
issues.assignedetkinliğinde issue'nun Title ve Body alanlarını okuyupadd-commentile yanıt veriyordu ve hem herkese açık hem de özel depoları okuma iznine sahipti - Saldırganın kod, erişim izni veya kimlik bilgisine ihtiyacı yoktu; yalnızca herkese açık depoda inandırıcı bir issue açması yeterliydi. Testlerde
pocvetestlocaliçindekiREADME.mdiçerikleri herkese açık issue yorumuna gönderildi - GitHub'ın koruma mekanizmaları “Additionally” varyantında amaçlandığı gibi engelleyemedi; ajan tabanlı yapay zekada context window başlı başına bir saldırı yüzeyi olarak görülmeli ve kullanıcı kontrollü içerik güvenilir talimatlardan ayrılmalı
GitLost'un hedef aldığı güven sınırı
- Noma Labs, GitHub'ın yeni Agentic Workflows özelliğinde GitLost adlı bir açık keşfetti
- Kimliği doğrulanmamış bir saldırgan, aynı organizasyonun herkese açık deposuna manipüle edilmiş bir GitHub Issue gönderirse, ajan organizasyon içindeki özel depolardan veri çekmeye yönlendirilebiliyordu
- Saldırı yöntemi, yapay zeka ajanının okuduğu içeriğe kötü niyetli talimatların gizlendiği dolaylı prompt injection kategorisine giriyor
- İşletmecinin amaçladığı talimatlar yerine saldırganın gizlediği talimatlar önce işlenirse, özel veriler herkesin görebildiği herkese açık issue yorumlarına sızabiliyor
GitHub Agentic Workflows nasıl çalışıyor?
- GitHub Agentic Workflows, ekiplerin depo otomasyonunu doğal dilde yazabilmesini sağlıyor
- İş akışları Markdown
.mddosyaları olarak yazılıyor ve YAML biçimindeki GitHub Actions.ymldosyalarına derleniyor - Çalıştırıldığında Claude veya GitHub Copilot tabanlı yapay zeka ajanı, tanımlanmış izinler dahilinde görev yapıyor
- GitHub Issue okuma
- Araç çağırma
- Organizasyon içindeki diğer depolara erişme
Savunmasız iş akışı koşulları
- Noma Labs'ın doğruladığı savunmasız yapılandırma, herkese açık issue'larla ajan izinleri birleştiğinde sorun yaratıyor
- İş akışı, GitHub'ın
issues.assignedetkinliğiyle tetikleniyor - Issue'nun Title ve Body alanlarını okuyor
add-commentaracıyla yorum gönderiyor- Organizasyon içindeki diğer depolar için okuma iznine sahip
- Herkese açık depolar
- Özel depolar
- İş akışı, GitHub'ın
- Saldırganın ayrıca kod yazmasına, erişim iznine veya kimlik bilgisine ihtiyacı yoktu
- Gerekli tek koşul, GitHub Agentic Workflow kullanan organizasyonun herkese açık deposunda bir issue açabilmekti
Saldırı akışı
- Araştırmacılar, müşteri toplantısından sonra VP Sales tarafından istenmiş gibi görünen inandırıcı bir GitHub Issue hazırladı
- Issue atanınca iş akışı aksiyonu tetiklendi; testlerde aynı yöntemin başka GitHub workflow action'larında da çalıştığı görüldü
- GitHub otomasyonu issue'yu atadıktan sonra, olayla çalışan iş akışı ajanı depo içeriğini getirmeye yönlendirdi
- Ajan şu depolardaki
README.mdiçeriğini getirmeye ikna edildipocherkese açık deposutestlocalözel deposu
- Ardından GitHub ajanı bu içerikleri herkese açık depodaki issue yorumuna gönderdi ve herkes tarafından okunabilir hale getirdi
“Additionally” ile koruma mekanizmasını aşmak
- GitHub'da bu senaryoyu engellemek için sınırlı koruma mekanizmaları vardı
- Noma Labs, bir saldırgan gibi birden fazla varyasyonu tekrar tekrar test etti
- “Additionally” anahtar kelimesi eklendiğinde modelin reddetmek yerine çıktıyı yeniden yapılandırdığı, amaçlanmamış bir davranış ortaya çıktı
- Bu atlatma yöntemiyle GitHub'ın koruma mekanizmaları amaçlandığı gibi çalışmadı ve veri sızıntısını önleyemedi
PoC ve açığa çıkan veriler
- Noma Labs, doğrulama sonuçlarını, yeniden üretim iş akışını ve gerçek kanıtları paylaştı
- Sızdırılan veriler şu depolardaki
README.mdiçeriğini içeriyordusasinomalabs/poc: herkese açık deposasinomalabs/remote-ping: herkese açık depo, README olmadığı doğrulandısasinomalabs/testlocal: özel depo
Ajan tabanlı yapay zekada değişen güvenlik varsayımları
- Ajanın context window'u hem çalışma alanı hem de saldırı yüzeyi haline geliyor
- Ajanın okuduğu her içerik silah haline getirilebilir
- Issue'lar
- Pull Request'ler
- Yorumlar
- Dosyalar
- Geleneksel güvenlik modelleri çoğu zaman güven sınırlarının kod tarafından zorlandığını varsayar
- Ajan tabanlı sistemlerde güven sınırının bir kısmı modelin davranışı tarafından uygulanır
- Model doğası gereği talimatları takip ettiği için, prompt injection ajan tabanlı yapay zekada web uygulamalarındaki SQL injection ile aynı türden kategorik bir zafiyete dönüşür
- Bu açık türü için sistematik stratejiler ve savunmalar gerekir
Önerilen savunmalar ve açıklama süreci
- Kullanıcı kontrollü içerik, yapay zeka ajanının güvenilir talimat girdisi olarak ele alınmamalı
- Ajan izinleri gerekli olan en dar kapsamla sınırlandırılmalı
- Birden fazla depoya erişebilen ajanlar özellikle yüksek değerli saldırı hedeflerine dönüşür
- Issue içeriğine yanıt verme gibi durumlarda, ajanın herkese açık şekilde paylaşabileceği içerik sınırlandırılmalı
- Kullanıcı girdisi modele iletilmeden önce talimat bağlamından arıtılmalı veya yalıtılmalı
- GitLost, GitHub'a sorumlu biçimde bildirildi ve açığın ayrıntıları GitHub'ın bilgisi dahilinde paylaşıldı
1 yorum
Hacker News görüşleri
Prompt injection'ın, ajan tipi yapay zekada SQL injection'ın web uygulamalarındaki konumuna denk olduğu benzetmesi tuhaf. Prompt injection bana LLM'ler için SQL injection'dan çok daha ölümcülmüş gibi geliyor
SQL injection, kullanıcı girdisi SQL motoruna gönderilen komut dizgesinin bir parçası olduğunda ortaya çıktı; kötü niyetli girdi mevcut komutu SQL sözdizimi belirteçleriyle sonlandırıp kendi SQL komutunu eklediğinde motor ikisini de çalıştırıyordu. Çözüm, prepared statement gibi sabit, statik, önceden derlenmiş komut dizgeleri kullanmak ve rastgele kullanıcı girdisini yalnızca veri olarak uygulamaktı
Ajanlardaki benzer bir hafifletme, “repo 1 oku”, “repo 2 oku” gibi sabit eylemler tanımlayıp kullanıcı girdisini yalnızca hangi eylemin çalıştırılacağını seçen veri olarak kullanmak olurdu; buna zaten menü denen teknik deniyor. LLM'nin değeri özünde menünün ötesinde olmasında, SQL'in değerinin ise “rastgele verilere uygulanan önceden tanımlı mantık”ın ötesine geçmek zorunda olmamasında yatıyor
Ajanlara yalnızca sınırlı eylemler izin vermek bazı özel sorunları ancak kısmen ele alır; ayrıca kod ile kullanıcı verisini de ayırmaz, dolayısıyla aynı problem değildir. Yalnızca sınırlı eylemler bırakmak, daha sıkı veritabanı izinleri kullanmaya daha çok benzer. Kullanıcının zaten çalıştırabileceği SQL'e izin veriliyorsa SQL injection da büyük ölçüde anlamını yitirir
Menüden seçtirmek bir yöntem ama mümkün eylem aralığı daha geniş tasarlanabilir. Bir e-posta aracı verirsen müşterilere spam gönderebilir; yalnızca yanıt vermeye kilitlersen hasar alanını azaltırsın. Görüntü render etme yoluyla verinin sızması gibi açıklar misali, veri sızıntısı da kısıtlanmalı
Çözüm de aynı. En az ayrıcalıkla rol tabanlı erişim kontrolü uygular, kritik eylemler için yönetici onayı istersin. O zaman LLM'nin tek başına yapabileceği en kötü şey uygunsuz kelimeler üretmek olur
Hafifletmelerden biri prepared statement, ama bir diğeri de hiçbir kullanıcıya tüm veritabanına tam erişim vermemek. Salt okunur bir kullanıcı, SQL injection olsa da olmasa da
DROP TABLEçalıştıramamalıBu ajan sınırsız okuma erişimine sahip ve yanıttaki “alıcı” kavramı yok. Alıcının yetkilerini dahil edersen okuma erişiminin otomatik reddedilmesini sağlamak oldukça basit olur. Tek çözüm bu değil ama bu yönde çözümler düşünmek zor değil
“Menü” örneği de aslında hiçbir şeyin değişmediği anlamına geliyor. İster LLM ister insan çalışan olsun, izin verilen şeyler kontrollü ve sabit bir eylem kümesiyle sınırlı. Serbestlik çoğunlukla ifadede, yetkilendirme ise sabit kümede. Neden menünün ötesine geçmesi gerektiğini bilmiyorum
Bunun neden bir GitHub güvenlik açığı olduğunu anlamıyorum. Araştırmacılar ajana özel depoya erişim izni verip herkese açık depoda soruları yanıtlatmış; dolayısıyla özel bilgilerin çıkarılması elbette mümkün.
Bu, gizli değerlere erişebilen sıradan bir CI işini oluşturup bunu herkese açık bir PR'da çalıştırmakla aynı şey. GitHub'ı, herkese açık kodun ya da LLM talimatlarının hassas verilere erişebilen bir bağlamda çalışmasına izin verecek şekilde yapılandırırsanız sızıntı olur. Bu GitHub'ın hatası değil, o şekilde yapılandıranın hatasıdır.
Token kapsamını çok sıkı tutsanız bile herkese açık depo erişimi her zaman açık kalıyor; örneğin herkese açık depo issue'ları üzerinden sızdırma yolu kalıyor. Güvenli olması için, GitHub'ın sunduğundan daha katı denetimler uygulayan bir MITM proxy ile tamamlamak gerekir.
GitHub Agentic workflows muhtemelen bu sorun için resmî birincil çözüm olacak, ancak gerek güvenlik modeli gerek güvenli kullanılabilirlik açısından hâlâ yapılacak işler var gibi görünüyor.
Ayrıntılar: https://haulos.com/blog/do-not-give-your-agent-github-access...
Bu, açık geliştirmeyle de uyumlu olabilir; dışarıdan kişilerin herkese açık issue açmasına izin verirken her kullanıcı için farklı güven seviyelerini yansıtabilirsiniz. Doğru şekilde düşünülürse seçenekler daha da fazla olacaktır.
Bunun için hem ince kapsam belirleme hem de izinlerin teknik olarak desteklenmesi gerekir; ayrıca ajanla ne başarmak istediğinizi ve bunun için gereken en düşük izin ve yetenekleri zaman ayırıp değerlendirmeniz gerekir.
İlkinin geleceğini düşünüyorum. Ajan kullanımı hâlâ vahşi batı döneminde. İnsanların ajan tasarlarken kapsam ve izinleri bulup tanımlamasındaki sürtünmeyi azaltacak soyutlamaların, ayrıca ajan yeteneklerini kısıtlarken ayrıntı düzeyi ile kullanılabilirlik arasında denge kuran arayüzlerin ne olacağını görmek ilginç olacak.
İkincisi ise yüksek kaliteli yazılım üretmenin önündeki temel engeldi ve hâlâ öyle. Doğru düşünmeye ve doğru uygulamaya zaman ayırmak, ajanları “hızlı hareket et ve kır” anlayışıyla rastgele her yere atma yaklaşımıyla doğrudan çelişiyor.
Bu sorulardan birinin bile cevabı “hayır” ise ortada bir sorun vardır. Klasik GitHub Workflows'ta da PR tetiklemeli workflow'lar üzerinden bir sürü ayrıcalık yükseltme sorunu var, ama bu ayrı bir konu.
Gerçek çözüm, prompt bazlı izin kontrolü UI'ını iyileştirmektir. “Web'de ara” seçeneğini açıp kapatır gibi “özel depolarımı da dahil et” seçeneğini de kolayca açıp kapatabilmek gerekir.
Araştırmacıların “Additionally” gibi tek bir kelimeyle GitHub'ın övündüğü guardrail'leri aşabilmesi komik. Bu, LLM bağlam penceresinin içinde güçlü bir güvenlik sınırı oluşturmaya çalışma girişimlerinin başarısız olmaya mahkûm olduğunu gösteriyor.
Model özünde talimat izlemek üzere yapıldığından, sistem kurallarıyla kullanıcı girdisini karıştırırsanız daha yeni ya da daha ısrarcı talimat kazanacaktır.
“Sorumlu açıklama” bölümünde bunun ne zaman düzeltildiği ya da GitHub'ın bunu kabul edip etmediği neden yok? GitLost'un GitHub'a sorumlu şekilde bildirildiği ve ayrıntıların GitHub'ın bilgisi dâhilinde paylaşıldığı yazıyor; peki bu hâlâ düzeltilmedi mi?
https://github.github.com/gh-aw/reference/cross-repository/#...
Microsoft gibi büyük şirketler, yatırımcı baskısı nedeniyle artık AI şirketi olduklarını iddia edebilmek için her ürüne AI ekliyor. Bu biraz Adobe'nin yaptığını andırıyor.
Tüketiciler bu yarım yamalak AI entegrasyonlarından bıkmaya başladı ve yakında bir sınır noktasına ulaşılacak gibi görünüyor.
Cidden, orada burada tıkladığımda her şey anında tepki veriyor ve runner eklenmiş CI da şahane çalışıyor. Runner kurulumu belgeleri biraz daha net olabilirdi ama onun dışında her şey inanılmaz derecede pürüzsüzdü.
Gelir gerçekten var ve etkileyici; tüketici ve koltuk bazlı gelirin yerini alıyor. Piyasa hâlâ SaaS çarpanlarını aşağı çekiyor ama bunun doğru bir değerlendirme olduğunu düşünüyorum. Çeyrek raporlarında geliri ayırdığınızda, gerçek verimlilikten gelen büyük bir büyüme hikâyesi görüyorsunuz.
Herkese açık depo bağlamında çalışan action’ların neden özel depo erişim yetkisine sahip olduğunu anlamıyorum. Workflow’ya bakınca genelde özel depo izni vermeyen
github tokenkullanıyor gibi görünüyorYoksa ajanın kendisi somehow daha yüksek yetkilere mi sahipti? Öyleyse ajan yanlış yapılandırılmış demektir. Ajanın bir şeyi zorunlu kıldığına güvenmemek gerektiğini zaten biliyoruz
Bu yazı Noma pazarlaması gibi okunuyor. Sevimli bir isim, logo, clickbait başlık ve teknik olmayan okurları hedefliyormuş gibi duran dramatik bir ton var
Gerçek açık şu: LLM’e özel veri verir ve herkesin onunla etkileşime girmesine izin verirseniz, veriler sızabilir. Fazlasıyla bariz
Bu tip insanlar LLM’e tüm diske yazma izni verip yıkıcı işler yaptığında da şikayet eder
Bir AI ajanının özel depoyu okuyamamasını istiyorsanız, ona özel depo erişim izni vermeyin. Bu bir yetki atlatma sorunu değil, prompt injection sorunu ve ajan katmanında güvenilir biçimde çözülemez
Bu ya zaten çözülmüş bir sorun, ya da GitHub hâlâ çözemedi ve bu arada kötü niyetli aktörler depolarda açığı denemeye devam edecek
Depo sayısı çok fazla olduğu için sıfır olmayan bir olasılıkla sızıntılar yaşanabilir. Ama dolandırıcılık mağduriyetlerinde olduğu gibi, neredeyse hiç kimse veri sızdığını kabul etmeyecek