2 puan yazan GN⁺ 2026-03-14 | 1 yorum | WhatsApp'ta paylaş
  • AWS, S3 bucket squatting (bucketsquatting) sorununu çözmek için yeni bir hesap tabanlı namespace koruma özelliği sundu
  • Yeni namespace, <prefix>-<accountid>-<region>-an biçiminde ve bu ada sahip bucket’ı yalnızca aynı hesap oluşturabiliyor
  • Başka bir hesap aynı adı kullanmaya çalışırsa InvalidBucketNamespace hatası oluşuyor; yanlış region belirtilse bile aynı hata dönüyor
  • Bu namespace’in varsayılan olarak kullanılması öneriliyor ve kuruluş politikalarında (SCP) s3:x-amz-bucket-namespace koşul anahtarıyla zorunlu kılınabiliyor
  • Mevcut bucket’lara geriye dönük uygulanmasa da, yeni bucket’lar için güçlü koruma sağlayarak S3 güvenlik yapısında temel bir iyileştirme anlamına geliyor

Bucketsquatting sorununun özeti

  • Bucketsquatting (veya Bucketsniping), AWS S3’te bucket adlarının küresel olarak benzersiz olmasını kötüye kullanan bir saldırı türü
    • Bir bucket silindiğinde ad yeniden kullanılabilir hale gelir ve saldırgan aynı adla yeni bir bucket kaydedebilir
    • Bu da hassas verilere erişim veya hizmet kesintisi riski yaratabilir
  • Kuruluşlar sıkça myapp-us-east-1 gibi öngörülebilir adlandırma kuralları kullandığı için saldırıya açıklık artıyordu
  • AWS iç ekipleri de bu sorundan etkilendi ve yaklaşık 10 yıl boyunca AWS güvenlik ekibiyle birlikte çözüm aradı

Yeni S3 namespace’inin devreye alınması

  • AWS, sorunu çözmek için hesap başına namespace (account namespace) kavramını tanıttı
    • Biçim: <prefix>-<accountid>-<region>-an
    • Örnek: myapp-123456789012-us-west-2-an
  • Bu namespace, ilgili hesabın yalnızca kendisinin bu adla bucket oluşturabilmesini sağlıyor
    • Başka bir hesap aynı adı oluşturmaya çalışırsa InvalidBucketNamespace hatası oluşuyor
    • Bucket adındaki region gerçek region ile uyuşmazsa da aynı hata dönüyor
  • AWS, bu namespace’in tüm yeni bucket’larda varsayılan olarak kullanılmasını öneriyor
    • Mevcut namespace’lerden (.mrap, --x-s3, -s3alias) farklı olarak bu kez güvenlik amacıyla genel kullanıcılara yönelik bir namespace olarak sunuluyor

Politika uygulaması ve yönetim

  • Güvenlik yöneticileri, s3:x-amz-bucket-namespace koşul anahtarını kullanarak kuruluş genelinde politika (SCP) ile namespace kullanımını zorunlu kılabilir
  • Mevcut bucket’lara veya namespace içermeyen şablonlara otomatik olarak uygulanmaz
    • Mevcut bucket’ları korumak için yeni namespace biçiminde bucket oluşturup verileri taşımanız gerekir
  • Bu adımla bucket squatting fiilen “ortadan kalkma yoluna giriyor” ve yeni bucket’lar için tam koruma sağlanıyor

Diğer bulut sağlayıcılarının yaklaşımı

  • Google Cloud Storage (GCS) zaten alan adı doğrulamasına dayalı bir namespace kullanıyor
    • myapp.com gibi alan adı biçimindeki bucket’ları yalnızca alan adı sahibi oluşturabiliyor
    • Alan adı olmayan bucket’larda ise bucket squatting olasılığı hâlâ mevcut
  • Azure Blob Storage, storage account adı + container adı yapısını kullanıyor
    • En fazla 24 karakter sınırı nedeniyle namespace daha dar ve aynı soruna karşı daha kırılgan olabilir

Sonuç (tl;dr)

  • AWS S3’e yeni bir hesap-bölge namespace’i eklendi
  • Bu namespace, bucket squatting saldırılarını engelliyor ve yeni bucket oluştururken mutlaka kullanılması öneriliyor
  • Mevcut bucket’lar otomatik olarak korunmadığı için gerekirse veri taşıma ile korumanın güçlendirilmesi gerekiyor

1 yorum

 
GN⁺ 2026-03-14
Hacker News görüşleri
  • Kısa süre önce, AWS hesabı silindikten sonra bile root kullanıcı e-posta adresinin yeniden kullanılamadığını öğrendim
    Kuruluşumuzdan biri, kapatılan hesabın root kullanıcısını şirketin ana e-posta adresiyle oluşturmuş, yeni hesabı ise başka bir e-postayla açmıştı; şimdi silme kurtarma süresi de geçmiş durumda
    Sonuç olarak bu e-posta, silinmiş root hesaba kalıcı olarak bağlı kaldı ve harici IdP üzerinden SSO girişi yapmak imkansız hale geldi
    AWS destek ekibiyle görüştüm ama neredeyse hiç yardımcı olamadılar

    • Kısa süre önce müşteri desteğine yardım ederken, önceki kilit mühendisin şirketten ayrılmasıyla birlikte root hesabın MFA'sının onun telefonuna bağlı kaldığı bir durum yaşadım
      Parola belgelenmişti ama MFA'yı kaldırmanın bir yolu yoktu; AWS destek, hesap yöneticisi ve başkalarıyla görüştük ama çözülemedi
      Sonunda root hesaba erişim kilitlendi ve karmaşık bir ortamı tamamen yeni bir hesaba taşımamız gerekebilir
    • E-posta sağlayıcınız destekliyorsa plus addressing kullanabilirsiniz
      AWS, artı işareti eklenmiş e-postaları ayrı adresler olarak görüyor
    • Root hesabı insan kullanımı için değil, acil durumlara özel bir hesap olarak oluşturup kimlik bilgilerini güvenli şekilde saklamalısınız
      Onu yalnızca gerçekten ciddi bir sorun çıktığında kullanmak en iyisi
    • Güvenliğin ne kadar kırılgan olabildiğini yeniden fark ettiriyor
      Sonuçta bir phishing saldırganı müşteri destek ekibini kandırıp 10 puanlık değerlendirme alırsa her şey çökebilir
    • IdP'nin e-postayı bir role eşlediği bir yapıdaysa, “silinmiş root hesaba kalıcı olarak bağlandı” ifadesinin tam olarak ne anlama geldiğini merak ediyorum
      Pratikte kullanımı engelleyen mekanizmanın ne olduğunu bilmek isterim
  • Yazarın Azure Blob Storage'taki account name kavramını yanlış anlamış gibi görünüyor
    Bu fiilen S3'teki bucket adıyla aynı seviyede ve küresel olarak benzersiz olmak zorunda olduğu için hâlâ büyük bir rahatsızlık kaynağı
    Özellikle ad uzunluğunun 24 karakterle sınırlı olması daha da can sıkıcı
    Microsoft'un da AWS gibi müşteri başına namespace getirmesini isterim

    • Yaklaşık 10 yıl önce S3 ekibi de bu sorunun farkındaydı
      Ama ilk tasarımın kısıtları yüzünden değiştiremediler
      Kişisel olarak neden hâlâ S3 v2 API yapmadıklarını anlamıyorum
      Yeni API ile kademeli geçişi teşvik edebilirlerdi, ama bunun yerine hem müşteriler hem mühendisler gereksiz yere acı çekiyor
    • Azure'yu ilk kullandığımda, kaynakların hesap bazında namespace'lenmediğini görünce bunun gerçekten garip bir tasarım olduğunu düşünmüştüm
    • Yazının sahibi doğrudan gelip geri bildirimleri yansıtarak yazıyı güncellediğini belirtiyor
    • Sınır sadece 24 karakter değil; tire, alt çizgi ve nokta da yasak
      Yani yalnızca rakam ve küçük harf kullanabiliyor olmak çok rahatsız edici
      Keşke S3 ya da GCS gibi en azından tireye izin verilse
    • Storage account adında tire bile kullanamamak gerçekten berbat bir tasarım gibi geliyor
      Container registry gibi başka kaynaklarda da durum aynı
  • Paket adı, bucket adı, GitHub hesap adı gibi şeylerde Discord'daki gibi @isim-rastgele4hane formatı kullanılabilir mi diye düşünüyorum
    Bu şekilde ad alanı daha demokratik olur ve squatting ya da yeniden kullanım saldırıları engellenebilir
    Hesap silinince tüm adın emekli edilmesi de temiz bir çözüm olur

    • Ama Discord bu formatı 2 yıl önce kaldırıp küresel benzersiz ad sistemine geçti
      Gerekçesi resmî duyuruda anlatılıyor;
      4 haneli sayıyı hatırlama ve büyük-küçük harf ayrımını yönetme zorluğu yüzündendi
    • Bana göre UUID + petname sistemi daha iyi olurdu
      Özellikle chat uygulamalarında dahili ID kullanıp kullanıcıya yalnızca takma ad göstermek daha temiz
      Bucket'larda ise insanın okuyabileceği bir ad önemli olduğundan, orada kendi domaininizi kullanmak daha mantıklı olabilir
    • Bucket için olabilir ama paket ele geçirmeyi önleme açısından 4 haneli kod çok işe yaramaz
      Hatta sadece yazım hatası riskini artırır
    • Keşke domain doğrulama tabanlı adları (@example.com) her yerde kullanabilsek
    • Dahili araçlar geliştirirken kullanıcılara opak dahili ID'ler verip adlarını serbestçe değiştirebilmelerini sağladım
      Çevrimiçi topluluklarda isim çakışması gayet doğal bir şeyken,
      neden ille de küresel benzersiz isimler dayatılıyor, emin değilim
  • Yazının sahibi Ian Mckay'e teşekkürler
    AWS'nin resmî olarak hesap ve bölge bazlı namespace getirmesi iyi bir değişiklik
    Terraform gibi IaC araçlarının bu kuralı varsayılan olarak benimsemesi daha da iyi olurdu
    Terraform zaten bucket adı sonuna rastgele hash soneki ekleyerek çakışmaları önlüyor
    İlgili bilgi AWS resmî blogunda da var

  • Bulut sağlayıcılarının dahili scratch alanlarında tahmin edilebilir bucket adları kullanırken ortaya çıkan bucket squatting saldırıları ilginç
    AWS'de hash yüzünden gerçek saldırı zordu ama GCP yakın zamanda da benzer sorunlar yaşadı
    İlgili sunumlar: DC32 AWS bucket squatting konuşması,
    GCP açığı: CVE-2026-1727

    • O sunum gerçekten çok etkileyiciydi
      Bucket adlarının tahmin edilebilir olduğunu gördüğüm anda tehlikeyi hissettim
      Bucket squatting + public bucket + CloudFormation'ın TOCTOU sorunu birleşince
      başka hesaplara bile kaynak dağıtımı yapılabilirdi
      AWS güvenlik ekibinin bunu daha erken fark etmemiş olmasına şaşırdım
  • DNS adlarında da benzer bir sorun var
    Domain yenilenmezse başkası tarafından yeniden kaydedilebilir,
    biri MX kaydı ekleyip parola sıfırlama e-postaları gibi iletileri ele geçirebilir

    • Bu yöntemle legacy IPv4 blokları gibi varlıkların geri alındığı durumlar da oluyor
  • AWS bucket'ları hâlâ yalnızca hostname ile aynı ada sahip olduklarında özel işlevler sunuyor
    İlgili belge: Virtual Hosting in S3

  • Bir ad, işaret ettiği şeyle aynı olmamalı
    Ad yeniden kullanıldığında bambaşka bir şeyi işaret eder,
    anlamı da bağlama göre değişir
    Yalnızca adı kendiniz yeniden atadığınızda aynı şey olarak kabul edilebilir

  • Hesap kimliğini açık etmenin güvenlik açısından riskli olup olmadığını merak ediyordum

    • AWS resmî olarak hesap kimliğinin gizli bilgi olmadığını belirtiyor
      resmî belgelere göre,
      dikkatli ele alınmalı ama hassas bilgi sayılmıyor
    • Bence bu, e-posta adresi gibi bir tanımlayıcıdır; bir kimlik doğrulama unsuru değildir
      Fazla yaymazsanız sorun olmaz
    • Hijyen açısından iyi değil ama yalnızca hesap kimliğiyle saldırı yapılamaz
      IAM kurallarında saldırgan zaten * kullanabildiği için, asıl önemli olan savunma tarafının politika yapılandırmasıdır
    • S3 imzalı URL paylaşırsanız içinde Access Key ID bulunur
      Bunu base32 ile decode ederseniz Account ID'yi çıkarabilirsiniz
      Not: ilgili analiz yazısı
  • S3'ün bucket adını tek başına erişim anahtarı olarak kullanması, tasarımdaki en sinir bozucu kararlardan biriydi