Konuyu Okuyanlar:

GCP Dataflow Gölge Bağımlılık: Tahmin Edilebilir Bucket ile Kiracılar Arası RCE

GCP Dataflow Gölge Bağımlılık: Tahmin Edilebilir Bucket ile Kiracılar Arası RCE
[Resim: attachment.php?aid=403]

Selamlar,

Varonis Threat Labs, Google Cloud Dataflow'ta kiracılar arası (cross-tenant) bir saldırı yolunu açıkladı: varsayılan staging bucket adının proje kimliği + bölgeden tahmin edilebilir olması. Saldırgan bu adı önceden kendi projesinde oluşturursa (bucket squatting), kurbanın ilk Dataflow işi kodunu saldırganın kovasına yükleyebiliyor. --save_main_session ile pickle edilen oturum değiştirilince Dataflow işçilerinde kod çalışıyor. Google sorunu küresel olarak kapatmış; yine de dersleri kalıcı.

Konuda anlatılacaklar
  1. Saldırı zinciri
  2. Kimler risk altındaydı?
  3. Google'ın üç katmanlı düzeltmesi
  4. Sizin yapmanız gerekenler

1. Saldırı zinciri
  1. Saldırgan dataflow-staging-<bolge>-<md5(proje_id)> adını önceden oluşturur, AllUsers yazma verir.
  2. Kurban, açık staging konumu vermeden Beam Python ile ilk işi çalıştırır; pickle oturumu bu kovaya iner.
  3. Saldırgan pickled_main_session dosyasını kendi zararlı pickle'ı ile değiştirir.
  4. İşçiler unpickle ederken kod, Dataflow servis hesabı yetkisiyle çalışır.
Varonis, kurban projesine hiç IAM izni gerekmediğini vurguluyor; proje ID'si çoğu zaman gizli değildir.

2. Kimler risk altındaydı?
  • Apache Beam Python SDK kullanan işler (Java SDK zaten sahiplik kontrolü yapıyordu).
  • Bölgede henüz varsayılan staging bucket'ı oluşmamış projeler.
  • --save_main_session açık, --staging_location verilmemiş işler.

3. Üç katmanlı düzeltme
  • Beam 2.75.0: istemci tarafı bucket sahiplik doğrulaması.
  • Dataflow kontrol düzlemi: varsayılan kova başka projeye aitse FAILED_PRECONDITION.
  • SHA-256 bütünlük: staging sonrası değiştirilen artefaktlar işçi tarafından reddedilir.
Eski/pinlanmış SDK'lar bile sunucu tarafı kontrol sayesinde korunuyor.

4. Sizin yapmanız gerekenler
Kod:
# Isinizde staging konumunu acikca verin --staging_location=gs://SIZIN-PROJE-staging/beam --temp_location=gs://SIZIN-PROJE-temp/beam
  • Staging kovalarını kod deposu gibi koruyun; yazma yetkisini sıkı tutun.
  • Pickle hâlâ pickle'dır: --save_main_session kullanımını gözden geçirin.
  • Servis hesabına Compute Engine varsayılanı yerine en az yetkili özel hesap verin.

Dataflow/Beam işlerinizde staging_location'ı açık mı veriyorsunuz, yoksa varsayılan mı?

Yasal uyarı
Bu yazı bilgilendirme ve savunma amaçlıdır. Anlatılan kontrolleri yalnızca kendi sistemlerinizde veya yazılı izinle yapın. İzinsiz erişim, tarama ve sömürü girişimleri TCK 243-245 kapsamında suçtur. TurkTeam white-hat bir topluluktur; çalıntı veri, hesap, combo/log paylaşımı ve hack hizmeti talepleri forum kurallarına aykırıdır.

Kaynaklar


Ek DosyalarEkran Görüntüleri
   
Cevapla



Hızlı Menü: