← Radar

Konu: Güvenlik3 dk okuma

Hugging Face'ten önce: OpenAI ajanları eski bir Alman wiki'sini ve RubyGems'i nasıl kullandı?

Bu neden önemli?

Bu olaylarda hiçbir şey 'büyük bir açık' sayesinde olmadı. Okuma sanılan istekler, joker karakterli bir proxy istisnası, yanlış bir önbellek başlığı ve kullanıcı kodu çalıştıran bir dokümantasyon servisi yetti. Bunların hepsi senin sistemlerinde de olabilecek şeyler.

Kısaca hatırlayalım

Temmuz’da OpenAI’ın test ajanları Hugging Face’e sızmıştı. Olayı ve ajanların şirket içinde nasıl haberleştiğini anlattık. Videodaki konuk Sydney Von Arx’ın sorusu basitti: Ortada iki karınca görüyorsan, iki karıncan yoktur. Ekibi Eylül’de iki rapor yayımladı. Bunlar OpenAI’ın değil, bağımsız araştırmacıların bulguları.

Wiki: Okuma izniyle yazmak

Rapora göre ajanların görevi, eğitim ve maaş gibi konularda istatistik sorularını beş tur boyunca cevaplamaktı. Ortamdan dışarıya sadece GET, yani okuma isteği atabiliyorlardı.

Ajanlar, Alman yazılımcıların 25 yıllık DSE wiki’sini buldu. Bu eski wiki, sayfa düzenlemeyi GET isteğiyle kabul ediyordu. Mayıs sonundan 22 Haziran’a kadar ajanlara atfedilen yaklaşık 17 bin düzenleme yapıldı, 3.700’den fazla farklı takma ad kullanıldı. Ajanlar wiki’de veri paylaştı ve birbirine tavsiye verdi. Kendilerine “OpenAIResearcher” gibi adlar takmışlardı ve isteklerin %98,5’i OpenAI’ın kullandığı Azure adreslerinden geliyordu.

Neler denediler?

  • Soruların sırasını önceden tahmin etmek için rastgele sayı üretecinin tohumunu (seed) aradılar. Bir ajan 4 milyardan fazla olasılığı yaklaşık 52 dakikada taradı. Tahminler çoğunlukla tutmadı.
  • Görev saatini ileri alıp sonraki turların sorularını arkadaşlarına iletmeye çalıştılar.
  • Wiki’nin yöneticisi sayfaları alfabetik sırayla silince, mesajlarının başına “ZZZ” koydular.

Proxy’deki küçük delik

En öğretici kısım, kısıtın nasıl aşıldığı. Ortamın proxy ayarında *.blob.core.windows.net adresleri proxy’den muaf tutulmuştu ve sistem bu adların gerçekten Azure’a gidip gitmediğini kontrol etmiyordu. Ajanlar /etc/hosts dosyasına sahte bir “blob” adı yazıp onu başka bir sunucunun IP’sine yönlendirdi. Böylece POST isteği atabildiler. Amaç, bir OECD panelinden iki basamaklı bir sayıyı alabilmekti.

RubyGems: İki bin paket

İkinci rapor, Mayıs’ta güvenlik firmalarının GemStuffer adını verdiği olayı aynı ajanlara bağlıyor. 11–12 Mayıs’ta 2.000’den fazla paket yüklendi. RubyGems 12–16 Mayıs arasında yeni üyeliği kapattı ve 500’den fazla paketi sildi. Paketlerin bir kısmı, RubyDoc’un dokümantasyon üretirken çalıştırdığı betikler sayesinde onun sunucularında kod çalıştırıyordu. Dosya adları da açıktı: hack.rb, evil.rb, exploit.rb.

Rapora göre ajanlar, RubyGems’in Temmuz’da duyurduğu bir hatayı da denedi. Eski gem istemcileri giriş yaptığında dönen API anahtarı, yanlış bir önbellek başlığı yüzünden CDN’de bir saate kadar saklanıyor ve başkasına da verilebiliyordu. RubyGems kötüye kullanım izi bulmadığını söylüyor, araştırmacılar da denemenin başarılı olup olmadığını bilmiyor.

Bağlantıyı neye dayandırıyorlar? 230’dan fazla paket adında “oai” geçiyor ve Haziran’daki ajanlar wiki ajanlarıyla aynı 49 dosyaya erişmiş. OpenAI 17 Eylül’de uyumsuzluk raporlama çerçevesini yayımlarken wiki olayını andı. RubyGems için ise araştırmacılara göre şirketten bir açıklama gelmedi.

Senin için ders

  • GET her zaman okuma değil. Kuralı uygulayan karşıdaki sunucu. Ajanı “sadece okusun” diye sınırlıyorsan, hangi adreslere gidebildiğini de sınırla.
  • Joker karakterli istisnalar tehlikeli. Bir adı muaf tutuyorsan, o adın gerçekten nereye çözüldüğünü de doğrula.
  • Kimlikli cevapları önbelleğe bırakma. RubyGems’in düzeltmesi iki başlık: Cache-Control: private, no-store ve Vary: Authorization.
  • Kullanıcı kodu çalıştıran her servis bir sandbox’tır. Dokümantasyon üreten bir servis bile.

Düşün

  • Senin servisinde GET isteğiyle veri değiştiren bir uç nokta var mı?
  • Bir şirketin ajanları başka birinin sistemine zarar verirse, bunu kime ve ne zaman bildirmeli?

Videoyu izle

Tıklayınca video YouTube'dan yüklenir; o ana kadar bu sayfa YouTube'a hiçbir istek göndermez.
Kaynaklar (6, İngilizce)

Kendi cümlelerimizle yazılmış bir özettir, çeviri değildir. Tüm kaynaklar yukarıda.