GCP - Storage Privesc
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Temel Bilgiler:
GCP - Storage Enumstorage.objects.get
Bu izin, Cloud Storage içinde saklanan dosyaları indirmenize olanak tanır. Bu, bazı durumlarda hassas bilgilerin orada saklanması nedeniyle yetkileri artırmanıza olanak sağlayabilir. Ayrıca, bazı GCP hizmetleri bilgilerini bucket'larda saklar:
GCP Composer: Bir Composer Ortamı oluşturduğunuzda, tüm DAG'ların kodu bir bucket içinde saklanacaktır. Bu görevler, kodlarının içinde ilginç bilgiler içerebilir.
GCR (Container Registry): Konteynerlerin görüntüleri bucket'larda saklanır, bu da bucket'ları okuyabiliyorsanız görüntüleri indirebileceğiniz ve sızıntıları ve/veya kaynak kodunu arayabileceğiniz anlamına gelir.
storage.objects.setIamPolicy
Bu bölümdeki önceki senaryoları istismar etme izni verebilirsiniz.
storage.buckets.setIamPolicy
Bu izni kullanarak izinleri nasıl değiştireceğinize dair bir örnek için bu sayfayı kontrol edin:
GCP - Public Buckets Privilege Escalationstorage.hmacKeys.create
Cloud Storage'ın "işletilebilirlik" özelliği, AWS S3 gibi çapraz bulut etkileşimleri için HMAC anahtarlarının Hizmet Hesapları ve kullanıcılar için oluşturulmasını içerir. Bir saldırgan, yükseltilmiş yetkilere sahip bir Hizmet Hesabı için HMAC anahtarı oluşturarak bunu istismar edebilir ve böylece Cloud Storage içinde yetkileri artırabilir. Kullanıcıya bağlı HMAC anahtarları yalnızca web konsolu aracılığıyla alınabilirken, hem erişim hem de gizli anahtarlar sürekli erişilebilir kalır ve potansiyel yedek erişim depolamasına olanak tanır. Tersine, Hizmet Hesabı ile bağlantılı HMAC anahtarları API erişimine açıktır, ancak erişim ve gizli anahtarları oluşturulduktan sonra alınamaz, bu da sürekli erişim için bir katman karmaşıklığı ekler.
Bu yöntem için başka bir istismar betiği burada bulunabilir.
storage.objects.create
, storage.objects.delete
= Depolama Yazma izinleriBir nesne oluşturmak için bir kovada storage.objects.create
iznine ihtiyacınız var ve belgelere göre, mevcut bir nesneyi değiştirmek için de storage.objects.delete
iznine ihtiyacınız var.
Bulut üzerinde yazma iznine sahip olduğunuz kovaların çok yaygın bir istismar durumu, eğer kova web sunucusu dosyalarını kaydediyorsa, web uygulaması tarafından kullanılacak yeni kodlar depolamak olabilir.
Composer, GCP içinde yönetilen Apache Airflow'dur. Birkaç ilginç özelliği vardır:
GKE kümesi içinde çalışır, bu nedenle kümenin kullandığı SA, Composer içinde çalışan kod tarafından erişilebilir.
Bir composer ortamının tüm bileşenleri (DAG'lerin kodu, eklentiler ve veriler) bir GCP kovasında depolanır. Eğer saldırganın buna okuma ve yazma izinleri varsa, kovayı izleyebilir ve herhangi bir DAG oluşturulduğunda veya güncellendiğinde, arka kapılı bir versiyon gönderebilir, böylece composer ortamı depolamadan arka kapılı versiyonu alır.
Bu saldırının bir PoC'sini repoda bulabilirsiniz: https://github.com/carlospolop/Monitor-Backdoor-Composer-DAGs
Cloud Functions kodu Depolama'da saklanır ve yeni bir versiyon oluşturulduğunda kod kovaya yüklenir ve ardından bu koddan yeni bir konteyner oluşturulur. Bu nedenle, yeni versiyon oluşturulmadan önce kodu üzerine yazarak bulut fonksiyonunun rastgele kod çalıştırmasını sağlamak mümkündür.
Bu saldırının bir PoC'sini repoda bulabilirsiniz: https://github.com/carlospolop/Monitor-Backdoor-Cloud-Functions
AppEngine versiyonları, staging.<project-id>.appspot.com
formatında bir kovada bazı veriler oluşturur. Bu kovada, her AppEngine uygulama versiyonu için bir klasör içerecek ae
adında bir klasör bulmak mümkündür ve bu klasörlerin içinde manifest.json
dosyasını bulmak mümkündür. Bu dosya, belirli bir versiyonu oluşturmak için kullanılacak tüm dosyaların bulunduğu bir json içerir. Ayrıca, dosyaların gerçek adlarını, GCP kovasındaki URL'lerini (kovadaki dosyalar adlarını sha1 hash'leri ile değiştirmiştir) ve her dosyanın sha1 hash'ini bulmak mümkündür.
Bu kovayı önceden ele geçirmenin mümkün olmadığını unutmayın çünkü GCP kullanıcıları appspot.com alan adını kullanarak kova oluşturmak için yetkilendirilmemiştir.
Ancak, bu kovada okuma ve yazma erişimi ile, kovanın izlenmesi ve herhangi bir değişiklik yapıldığında (yeni versiyon) yeni versiyonu mümkün olan en hızlı şekilde değiştirme ile App Engine versiyonuna bağlı SA'ya yetki yükseltmek mümkündür. Bu şekilde, bu koddan oluşturulan konteyner arka kapılı kodu çalıştıracaktır.
Bahsedilen saldırı birçok farklı şekilde gerçekleştirilebilir, hepsi staging.<project-id>.appspot.com
kovanızı izlemeye başlar:
AppEngine versiyonunun tamamını farklı ve mevcut bir kovaya yükleyin ve yeni kova adı ve sha1 hash'leri ile manifest.json
dosyası hazırlayın. Ardından, kova içinde yeni bir versiyon oluşturulduğunda, sadece manifest.json
dosyasını değiştirip kötü niyetli olanı yüklemeniz yeterlidir.
Kötü niyetli bağımlılık kodunu kullanacak değiştirilmiş bir requirements.txt
versiyonu yükleyin ve manifest.json
dosyasını yeni dosya adı, URL ve hash ile güncelleyin.
Kötü niyetli kodu çalıştıracak değiştirilmiş bir main.py
veya app.yaml
dosyası yükleyin ve manifest.json
dosyasını yeni dosya adı, URL ve hash ile güncelleyin.
Bu saldırının bir PoC'sini repoda bulabilirsiniz: https://github.com/carlospolop/Monitor-Backdoor-AppEngine
Google Container Registry, görüntüleri kovalar içinde depolar, eğer bu kovalara yazabiliyorsanız bu kovaların çalıştığı yere yanal hareket etme imkanınız olabilir.
GCR tarafından kullanılan kovanın URL'si gs://<eu/usa/asia/nothing>.artifacts.<project>.appspot.com
gibi olacaktır (En üst düzey alt alan adları burada belirtilmiştir).
Bu hizmet kullanımdan kaldırılmıştır, bu nedenle bu saldırı artık faydalı değildir. Ayrıca, bu hizmetin yerini alan Artifact Registry, görüntüleri kovalar içinde depolamaz.
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)