Hatalı Yapılandırılmış AWS S3 Bucket Üzerinde Bulunan Güvenlik Açığının Yarattığı Etkiler (Information Disclosure & Subdomain Takeover)
Herkese merhaba, bu yazımda HackerOne platformuna bağlı private bir şirkette bulduğum güvenlik açığından bahsedip burada dikkat etmemiz gereken yerlere değinmeye çalışacağım. Yani bu makalede hem saldırı tarafını hem de savunma tarafını incelemiş olacağız.
Şirketin ismi XYZ olsun.
1- Keşif & Exploit
XYZ şirketinde kapsama xyz.com’un tüm subdomainleri dahil olacak şekilde eklenmişti (*.xyz.com) Burada ilk adım olarak tüm subdomainleri bulmak olacaktır. Bunun için kullanabileceğimiz bir sürü araç mevcut ben subfinder aracını kullanarak yaklaşık 250 tane subdomain buldum. Sonraki aşamamız bu siteleri her açıdan tek tek incelemek. Bulduğum domainlerin hepsini tek seferde açacak bir chrome uzantısı kullanıyorum ve tüm subdomainleri açıp bakmaya başlıyorum. Daha sonra abc.xyz.com adlı subdomain’de bir AWS S3 bucket koştuğunu görüyoruz. Burada okuma (read) yetkisinin kısıtlanmadığını gördüğümüzde yani public olduğunu gördüğümüzde burada hassas bilgilerin sızma ihtimalini olduğunu düşünerek hemen içerideki dosyalara bakmaya başladım. AWS cli üzerinde aşağıdaki komutu çalıştırdıktan sonra bucket’ın public olduğunu doğrulamış oluyoruz.
aws s3 ls abc.xyz.com
Daha sonra samples’ın altına baktığımda 20'ye yakın örnek test projesi gördüm. Bunlar login ve bazı tokenlerin denendiği farklı web uygulamalarıydı.
aws s3 ls abc.xyz.com/samples/
Hepsini tek tek gezmeye başladıktan sonra bir projenin sayfa kaynağında bulunan js kodunda bir kod bloğu dikkatimi çekti.
Bucket’ın içinde başka bir bucket! Yazılımcı burada bucket’ı kullanırken js kodunda ismini unutmuş ve ayrıca kod içinde de kullanmış. Bucket’ın ismine de def diyelim. Bu bucket’a gittiğimde yani def.s3.amazonaws.com, karşıma çıkan response ilginçti.
The specified bucket does not exist
Bu demek oluyor ki bu bucket’ı üzerimize alabiliriz. Bu güvenlik açığı türüne subdomain takeover diyoruz. (Buradaki projeden https://github.com/EdOverflow/can-i-take-over-xyz hangi ürünlerin bu güvenlik açığını barındırdığını ve hangi durumlarda exploit edilebileceğini görebilirsiniz) Yani şirkete ait bir subdomain’i kendi kontrolümüz altına alıyoruz. Aslında kod içinde geçen bucket kullanılıp silinmiş bunda hiçbir sorun yok. Yani dışarıdan bu bir güvenlik açığı gibi görünmüyor fakat her şey bucket’ı üzerimize aldığımızda başlıyor. Birden kod bloğunu keşfettiğimiz sayfayı ziyaret ettiğimizde üzerimize aldığımız yani kod’ta bulunan bucket’a loglar düşmeye başladığını keşfettim. Bu loglar ip adresini ve http isteği ile ilgili bilgiler içerdiğinden devamı gelmedi ve exploit aşaması da son bulmuş oldu. Burada çok daha kritik bilgiler arkadaki bir api’ye veya bu örnekte gördüğümüz üzere cloud’a güvensiz bir şekilde gidebilirdi.
Bu güvenlik açığı için verilen ödül ise 1000$’dı.
2- Olayda dikkat edilmesi gerekenler.
- Kesinlikle ama kesinlikle hassas bilgi içerebilecek bir depolama alanı public olmamalıdır.
- Kullanılan uygulamalar silindiğinde geriye hiçbir şekilde çalışan bir kod’un kalmaması gerekir. Örneğin rest apinizin 3. versiyonunu yazıyorsanız gerekmedikçe v1 kullanımda olmamalıdır.
- S3 bucket kullanıldığında read, upload ve delete yetkileri iyi bir şekilde konfigure edilmelidir. Bu örnekte upload fonksiyonu çalışmıyordu fakat çalışsaydı etkisi çok daha büyük olabilirdi.
- Javascript kodumuzun içinde hassas bilgiler hardcoded şekilde bulunmamalıdır.
Okuduğunuz için teşekkür ederim.