From 5e141fd392b4386ed3efe48d11f8e4b93a3de909 Mon Sep 17 00:00:00 2001 From: Translator Date: Thu, 9 Jul 2026 16:57:51 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-cloud/azure-security/az-services/az-stor --- .../azure-security/az-services/az-storage.md | 159 +++++++++--------- 1 file changed, 80 insertions(+), 79 deletions(-) diff --git a/src/pentesting-cloud/azure-security/az-services/az-storage.md b/src/pentesting-cloud/azure-security/az-services/az-storage.md index 347409e12..e033ea5a8 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-storage.md +++ b/src/pentesting-cloud/azure-security/az-services/az-storage.md @@ -2,54 +2,54 @@ {{#include ../../../banners/hacktricks-training.md}} -## Basic Information +## Temel Bilgiler -Azure Storage Accounts, Microsoft Azure içinde blobs (binary large objects), files, queues ve tables dahil olmak üzere çeşitli veri türleri için ölçeklenebilir, secure ve yüksek erişilebilir bulut **storage** sağlayan temel hizmetlerdir. Bu farklı storage servislerini kolay yönetim için tek bir namespace altında gruplayan container'lar olarak hizmet verirler. +Azure Storage Accounts, Microsoft Azure içinde, blobs (binary large objects), files, queues ve tables dahil olmak üzere çeşitli veri türleri için ölçeklenebilir, güvenli ve yüksek erişilebilir cloud **storage** sağlayan temel hizmetlerdir. Bunlar, bu farklı storage hizmetlerini kolay yönetim için tek bir namespace altında gruplayan container'lar olarak görev yapar. -**Main configuration options**: +**Ana yapılandırma seçenekleri**: -- Her storage account, tüm Azure genelinde **uniq** bir name'e sahip olmalıdır. -- Her storage account bir **region** içinde veya bir Azure extended zone'da deploy edilir -- Daha iyi performans için storage account'un **premium** versiyonunu seçmek mümkündür -- rack, drive ve datacenter **failures**'a karşı koruma sağlamak için **4 tür redundancy** arasından seçim yapmak mümkündür. +- Her storage account, tüm Azure genelinde **benzersiz bir ada** sahip olmalıdır. +- Her storage account bir **region** içinde veya bir Azure extended zone içinde deploy edilir +- Daha iyi performans için storage account'un **premium** sürümünü seçmek mümkündür +- Rack, drive ve datacenter **failures**'larına karşı koruma sağlamak için **4 tür redundancy** arasından seçim yapmak mümkündür. -**Security configuration options**: +**Güvenlik yapılandırma seçenekleri**: -- **Require secure transfer for REST API operations**: Storage ile herhangi bir iletişimde TLS gerektirir -- **Allows enabling anonymous access on individual containers**: Aksi halde, gelecekte anonymous access'i etkinleştirmek mümkün olmaz -- **Enable storage account key access**: Aksi halde Shared Keys ile access yasaklanır +- **REST API operations için secure transfer zorunlu kıl**: storage ile yapılan herhangi bir iletişimde TLS zorunlu kılar +- **Bireysel container'larda anonymous access etkinleştirmeye izin verir**: Aksi halde, gelecekte anonymous access etkinleştirmek mümkün olmaz +- **storage account key access etkinleştir**: Aksi halde, Shared Keys ile access yasaklanır - **Minimum TLS version** -- **Permitted scope for copy operations**: Herhangi bir storage account'tan, aynı Entra tenant içindeki herhangi bir storage account'tan veya aynı virtual network içindeki private endpoints'e sahip storage account'tan allow eder. +- **copy operations için izin verilen scope**: Herhangi bir storage account'tan, aynı Entra tenant içindeki herhangi bir storage account'tan veya aynı virtual network içindeki private endpoints'e sahip storage account'tan izin ver -**Blob Storage options**: +**Blob Storage seçenekleri**: -- **Allow cross-tenant replication** +- **Cross-tenant replication'a izin ver** - **Access tier**: Hot (sık erişilen data), Cool ve Cold (nadiren erişilen data) -**Networking options**: +**Networking seçenekleri**: - **Network access**: -- Tüm networks'ten allow et -- Seçili virtual networks ve IP addresses'ten allow et -- Public access'i disable et ve private access kullan +- Tüm networks'ten izin ver +- Seçili virtual networks ve IP addresses'lerden izin ver +- Public access'i devre dışı bırak ve private access kullan - **Private endpoints**: Bir virtual network'ten storage account'a private connection sağlar -**Data protection options**: +**Data protection seçenekleri**: -- **Point-in-time restore for containers**: Container'ları daha önceki bir duruma restore etmeye allow eder -- Versioning, change feed ve blob soft delete'in enabled olmasını gerektirir. -- **Enable soft delete for blobs**: Silinmiş blobs (üzerine yazılanlar dahil) için gün cinsinden bir retention period etkinleştirir -- **Enable soft delete for containers**: Silinmiş container'lar için gün cinsinden bir retention period etkinleştirir -- **Enable soft delete for file shares**: Silinmiş file shared için gün cinsinden bir retention period etkinleştirir -- **Enable versioning for blobs**: Blobs'un önceki versions'larını korur -- **Enable blob change feed**: Blobs üzerindeki create, modification ve delete değişikliklerinin logs'larını tutar -- **Enable version-level immutability support**: Account-level'da tüm blob versions'larına uygulanacak time-based retention policy ayarlamanıza allow eder. -- Version-level immutability support ve point-in-time restore for containers aynı anda enabled edilemez. +- **Container'lar için point-in-time restore**: Container'ları daha önceki bir state'e geri yüklemeye izin verir +- Versioning, change feed ve blob soft delete etkinleştirilmiş olmasını gerektirir. +- **Blobs için soft delete etkinleştir**: Silinen (üzerine yazılanlar dahil) blobs için gün cinsinden bir retention period etkinleştirir +- **Container'lar için soft delete etkinleştir**: Silinen container'lar için gün cinsinden bir retention period etkinleştirir +- **File shares için soft delete etkinleştir**: Silinen file shared için gün cinsinden bir retention period etkinleştirir +- **Blobs için versioning etkinleştir**: Blobs'larınızın önceki sürümlerini korur +- **Blob change feed etkinleştir**: Blobs üzerindeki create, modification ve delete değişikliklerinin loglarını tutar +- **Version-level immutability support etkinleştir**: Account-level'da tüm blob sürümlerine uygulanacak time-based retention policy ayarlamanıza izin verir. +- Version-level immutability support ve container'lar için point-in-time restore aynı anda etkinleştirilemez. -**Encryption configuration options**: +**Encryption yapılandırma seçenekleri**: - **Encryption type**: Microsoft-managed keys (MMK) veya Customer-managed keys (CMK) kullanmak mümkündür -- **Enable infrastructure encryption**: Data'yı "daha fazla security" için çift encrypt etmeye allow eder +- **Infrastructure encryption etkinleştir**: Veri için "daha fazla güvenlik" amacıyla çift encryption yapılmasına izin verir ### Storage endpoints @@ -64,19 +64,19 @@ Azure Storage Accounts, Microsoft Azure içinde blobs (binary large objects), fi ### Public Exposure -If "Allow Blob public access" is **enabled** (disabled by default), when creating a container it's possible to: +Eğer "Allow Blob public access" **etkinleştirilmişse** (varsayılan olarak devre dışı), bir container oluşturulurken şunlar mümkündür: -- Give **public access to read blobs** (you need to know the name). -- **List container blobs** and **read** them. -- Make it fully **private** +- Blobs'ları okumak için **public access** verin (adı bilmeniz gerekir). +- Container blobs'larını **listeleyin** ve onları **okuyun**. +- Tamamen **private** yapın
### Static website (`$web`) exposure & leaked secrets -- **Static websites** are served from the special `$web` container over a region-specific endpoint such as `https://.z13.web.core.windows.net/`. -- The `$web` container may report `publicAccess: null` via the blob API, but files are still reachable through the static site endpoint, so dropping config/IaC artifacts there can leak secrets. -- Quick audit workflow: +- **Static websites** özel `$web` container'ından `https://.z13.web.core.windows.net/` gibi bölgeye özgü bir endpoint üzerinden sunulur. +- `$web` container'ı blob API üzerinden `publicAccess: null` döndürebilir, ancak dosyalar static site endpoint'i üzerinden yine de erişilebilir durumdadır; bu yüzden oraya config/IaC artifacts bırakmak secrets leak'e yol açabilir. +- Hızlı audit workflow: ```bash # Identify storage accounts with static website hosting enabled az storage blob service-properties show --account-name --auth-mode login @@ -87,21 +87,21 @@ az storage blob list --container-name '$web' --account-name --auth-mo # Pull suspicious files directly (e.g., IaC tfvars containing secrets/SAS) az storage blob download -c '$web' --name iac/terraform.tfvars --file /dev/stdout --account-name --auth-mode login ``` -### Anonymous blob exposure denetimi +### Anonim blob exposure denetimi -- Veri açığa çıkarabilen **storage accounts**'ları **bulun**: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. Eğer `allowBlobPublicAccess` `false` ise container'ları public yapamazsınız. -- Bayrağı ve diğer zayıf ayarları doğrulamak için **riskli accounts**'ları **inceleyin**: `az storage account show --name --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`. -- Bayrağın etkin olduğu yerlerde **container-level exposure**'ı **enumerate edin**: +- **Veri ifşa edebilen storage account'ları bulun**: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. Eğer `allowBlobPublicAccess` `false` ise container'ları public yapamazsınız. +- **Riskli account'ları inceleyin**: flag'i ve diğer zayıf ayarları doğrulamak için: `az storage account show --name --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`. +- **Flag etkin olduğunda container seviyesindeki exposure'ı enumerate edin**: ```bash az storage container list --account-name \ --query '[].{name:name, access:properties.publicAccess}' ``` -- `"Blob"`: anonymous okumalar **yalnızca blob adı bilindiğinde** yapılabilir (listeleme yok). -- `"Container"`: her blob için anonymous **listeleme + okuma**. -- `null`: private; authentication gerekli. -- **Erişimi kanıtla** credentials olmadan: -- `publicAccess` `Container` ise, anonymous listeleme çalışır: `curl "https://.blob.core.windows.net/?restype=container&comp=list"`. -- Hem `Blob` hem de `Container` için, blob adı bilindiğinde anonymous blob indirme çalışır: +- `"Blob"`: anonim okuma **yalnızca blob adı bilindiğinde** izinlidir (listeleme yok). +- `"Container"`: her blob için anonim **listeleme + okuma**. +- `null`: özel; kimlik doğrulama gerekir. +- **Kimlik bilgileri olmadan erişimi kanıtla**: +- Eğer `publicAccess` `Container` ise, anonim listeleme çalışır: `curl "https://.blob.core.windows.net/?restype=container&comp=list"`. +- Hem `Blob` hem de `Container` için, ad biliniyorsa anonim blob indirme çalışır: ```bash az storage blob download -c -n --account-name --file /dev/stdout # or via raw HTTP @@ -109,31 +109,31 @@ curl "https://.blob.core.windows.net//" ``` ### Connect to Storage -Eğer bağlanabileceğin herhangi bir **storage** bulursan, bunu yapmak için [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) aracını kullanabilirsin. +Eğer bağlanabileceğiniz herhangi bir **storage** bulursanız, bunu yapmak için [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) aracını kullanabilirsiniz. ## Access to Storage ### RBAC -**RBAC roles** ile Entra ID principals kullanarak storage accounts erişmek mümkündür ve önerilen yöntem budur. +**RBAC roles** ile Entra ID principals kullanarak storage accounts’a erişmek mümkündür ve bu önerilen yöntemdir. ### Access Keys -Storage accounts, erişmek için kullanılabilecek access keys’e sahiptir. Bu, storage account’a **full access** sağlar. +Storage accounts, erişim için kullanılabilecek access keys’e sahiptir. Bu, storage account’a **tam erişim sağlar.**
### **Shared Keys & Lite Shared Keys** -Belirli kaynaklara signed URL üzerinden erişimi yetkilendirmek için access keys ile imzalanmış [**Shared Keys**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) oluşturmak mümkündür. +[**Shared Keys oluşturmak**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) mümkündür; bunlar access keys ile imzalanır ve signed URL aracılığıyla belirli resources’a erişimi yetkilendirir. > [!NOTE] -> `CanonicalizedResource` kısmının storage services resource (URI) olduğunu unutma. Ve eğer URL içindeki herhangi bir bölüm encoded ise, bu bölüm `CanonicalizedResource` içinde de encoded olmalıdır. +> `CanonicalizedResource` kısmının storage services resource (URI) temsil ettiğini unutmayın. Ve URL’de herhangi bir bölüm encoded ise, `CanonicalizedResource` içinde de encoded olmalıdır. > [!NOTE] -> Bu, istekleri authenticate etmek için varsayılan olarak **`az` cli** tarafından kullanılır. Bunu Entra ID principal credentials ile kullanmak için `--auth-mode login` parametresini belirtin. +> Bu, istekleri authenticate etmek için varsayılan olarak **`az` cli** tarafından kullanılır. Bunu Entra ID principal credentials kullanacak şekilde yapmak için `--auth-mode login` parametresini belirtin. -- Aşağıdaki bilgileri imzalayarak **blob, queue ve file services** için bir **shared key** oluşturmak mümkündür: +- Şu bilgileri imzalayarak blob, queue ve file services için bir **shared key** oluşturmak mümkündür: ```bash StringToSign = VERB + "\n" + Content-Encoding + "\n" + @@ -158,7 +158,7 @@ Content-Type + "\n" + Date + "\n" + CanonicalizedResource; ``` -- blob, queue ve file services için aşağıdaki bilgileri imzalayarak bir **lite shared key** üretmek mümkündür: +- Aşağıdaki bilgileri imzalayarak blob, queue ve file services için bir **lite shared key** oluşturmak mümkündür: ```bash StringToSign = VERB + "\n" + Content-MD5 + "\n" + @@ -167,12 +167,12 @@ Date + "\n" + CanonicalizedHeaders + CanonicalizedResource; ``` -- Aşağıdaki bilgileri imzalayarak **table services için lite shared key** oluşturmak mümkündür: +- Şu bilgileri imzalayarak **table services için lite shared key** oluşturmak mümkündür: ```bash StringToSign = Date + "\n" CanonicalizedResource ``` -Daha sonra, key’i kullanmak için, Authorization header içinde şu syntax ile yapılabilir: +Ardından, key'i kullanmak için, Authorization header içinde aşağıdaki syntax ile yapılabilir: ```bash Authorization="[SharedKey|SharedKeyLite] :" #e.g. @@ -186,56 +186,56 @@ Content-Length: 0 ``` ### **Shared Access Signature** (SAS) -Shared Access Signatures (SAS), Azure Storage hesabındaki account access keys ifşa etmeden belirli **resource**lara erişim için **specific permissions grant eden** güvenli, zaman sınırlı URL’lerdir. Access keys tüm resource’lara tam administrative access sağlarken, SAS izinleri (read veya write gibi) belirterek ve bir expiration time tanımlayarak ayrıntılı kontrol sağlar. +Shared Access Signatures (SAS), Azure Storage hesabındaki resource**lara** erişmek için **belirli permissions veren** secure, zaman sınırlı URL’lerdir ve account's access keys açığa çıkarmadan çalışır. Access keys tüm resources için tam administrative access sağlarken, SAS izinleri (read veya write gibi) belirtip bir expiration time tanımlayarak granular control sağlar. #### SAS Types -- **User delegation SAS**: Bu, SAS’i imzalayan ve permissions’ları user’dan SAS’e devreden bir **Entra ID principal** tarafından oluşturulur. Yalnızca **blob and data lake storage** ile kullanılabilir ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). Oluşturulan tüm user delegated SAS’leri **revoke** etmek mümkündür. -- User’ın sahip olduğundan daha fazla permission ile bir delegation SAS oluşturmak mümkün olsa bile. Ancak, principal bunlara sahip değilse çalışmaz (no privesc). -- **Service SAS**: Bu, storage account **access keys**’inden biri kullanılarak imzalanır. Tek bir storage service içinde belirli resource’lara erişim vermek için kullanılabilir. Key renewed edilirse SAS çalışmayı durdurur. -- **Account SAS**: Bu da storage account **access keys**’inden biri ile imzalanır. Bir storage account services (Blob, Queue, Table, File) genelindeki resource’lara erişim verir ve service-level operations içerebilir. +- **User delegation SAS**: Bu, SAS’i imzalayan ve permissions’ları user’dan SAS’e delege eden bir **Entra ID principal** üzerinden oluşturulur. Yalnızca **blob and data lake storage** ile kullanılabilir ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). Oluşturulan tüm user delegated SAS’leri **revoke** etmek mümkündür. +- Kullanıcının sahip olduğundan daha “fazla” permissions ile bir delegation SAS üretmek mümkün olsa da, principal bunlara sahip değilse çalışmaz (no privesc). +- **Service SAS**: Bu, storage account **access keys**’den biri kullanılarak imzalanır. Tek bir storage service içinde belirli resources’a erişim vermek için kullanılabilir. Key yenilenirse, SAS çalışmayı durdurur. +- **Account SAS**: Bu da storage account **access keys**’den biriyle imzalanır. Bir storage account services (Blob, Queue, Table, File) genelindeki resources’a erişim verir ve service-level operations içerebilir. -**Access key** ile imzalanmış bir SAS URL’si şöyle görünür: +Bir **access key** ile imzalanmış SAS URL’si şöyle görünür: - `https://.blob.core.windows.net/newcontainer?sp=r&st=2021-09-26T18:15:21Z&se=2021-10-27T02:14:21Z&spr=https&sv=2021-07-08&sr=c&sig=7S%2BZySOgy4aA3Dk0V1cJyTSIf1cW%2Fu3WFkhHV32%2B4PE%3D` -**User delegation** olarak imzalanmış bir SAS URL’si şöyle görünür: +Bir **user delegation** olarak imzalanmış SAS URL’si şöyle görünür: - `https://.blob.core.windows.net/testing-container?sp=r&st=2024-11-22T15:07:40Z&se=2024-11-22T23:07:40Z&skoid=d77c71a1-96e7-483d-bd51-bd753aa66e62&sktid=fdd066e1-ee37-49bc-b08f-d0e152119b04&skt=2024-11-22T15:07:40Z&ske=2024-11-22T23:07:40Z&sks=b&skv=2022-11-02&spr=https&sv=2022-11-02&sr=c&sig=7s5dJyeE6klUNRulUj9TNL0tMj2K7mtxyRc97xbYDqs%3D` -Bazı **http params** not edin: +Bazı **http params** notları: - **`se`** parametresi SAS’in **expiration date**’ini belirtir -- **`sp`** parametresi SAS’in **permissions**’larını belirtir +- **`sp`** parametresi SAS’in **permissions**’unu belirtir - **`sig`** SAS’i doğrulayan **signature**’dır #### SAS permissions -Bir SAS oluştururken, hangi permissions’ları vereceği belirtilmelidir. SAS’in oluşturulduğu objeye bağlı olarak farklı permissions’lar dahil edilebilir. Örneğin: +Bir SAS oluştururken, hangi permissions’ları vereceğinin belirtilmesi gerekir. SAS’in üretildiği objeye bağlı olarak farklı permissions’lar dahil edilebilir. Örneğin: - (a)dd, (c)reate, (d)elete, (e)xecute, (f)ilter_by_tags, (i)set_immutability_policy, (l)ist, (m)ove, (r)ead, (t)ag, (w)rite, (x)delete_previous_version, (y)permanent_delete -## SFTP Support for Azure Blob Storage +## Azure Blob Storage için SFTP Support -Azure Blob Storage artık SSH File Transfer Protocol (SFTP) destekliyor; böylece özel çözümlere veya üçüncü taraf ürünlere ihtiyaç duymadan doğrudan Blob Storage’a güvenli file transfer ve management yapılabiliyor. +Azure Blob Storage artık SSH File Transfer Protocol (SFTP) desteği sunuyor; bu da custom solutions veya third-party products gerektirmeden doğrudan Blob Storage’a secure file transfer ve management yapılmasını sağlar. ### Key Features - Protocol Support: SFTP, hierarchical namespace (HNS) ile yapılandırılmış Blob Storage accounts ile çalışır. Bu, blobs’ları daha kolay navigation için directories ve subdirectories içine organize eder. -- Security: SFTP authentication için local user identities kullanır ve RBAC veya ABAC ile entegre olmaz. Her local user şu yollarla authenticate olabilir: +- Security: SFTP local user identities kullanabilir, ancak authorization için Azure RBAC ile Microsoft Entra ID-based access de destekler. Bu, access’in local SFTP users oluşturmak yerine alışılmış Blob Storage data-plane roles ile verilebileceği anlamına gelir. Local users aşağıdaki yollarla authenticate olabilir: - Azure-generated passwords - Public-private SSH key pairs -- Granular Permissions: Read, Write, Delete ve List gibi permissions’lar local users’a 100 container’a kadar atanabilir. -- Networking Considerations: SFTP connections port 22 üzerinden kurulur. Azure, SFTP traffic’i güvence altına almak için firewalls, private endpoints veya virtual networks gibi network configurations’ları destekler. +- Granular Permissions: Read, Write, Delete ve List gibi permissions’lar local users’a en fazla 100 containers için atanabilir. +- Networking Considerations: SFTP connections port 22 üzerinden yapılır. Azure, SFTP traffic’i güvenceye almak için firewalls, private endpoints veya virtual networks gibi network configurations destekler. ### Setup Requirements -- Hierarchical Namespace: Storage account oluşturulurken HNS etkinleştirilmelidir. -- Supported Encryption: Microsoft Security Development Lifecycle (SDL)-onaylı cryptographic algorithms gerektirir (ör. rsa-sha2-256, ecdsa-sha2-nistp256). +- Hierarchical Namespace: storage account oluşturulurken HNS etkinleştirilmelidir. +- Supported Encryption: Microsoft Security Development Lifecycle (SDL) onaylı cryptographic algorithms gerektirir (ör. rsa-sha2-256, ecdsa-sha2-nistp256). - SFTP Configuration: -- Storage account üzerinde SFTP’yi etkinleştirin. -- Uygun permissions’lara sahip local user identities oluşturun. -- Container içindeki başlangıç konumlarını tanımlamak için users için home directories yapılandırın. +- storage account üzerinde SFTP etkinleştirin. +- local-user access için, uygun permissions’lara sahip local user identities oluşturun. +- local users için, container içindeki başlangıç konumlarını tanımlamak üzere home directories yapılandırın. ### Permissions @@ -379,7 +379,7 @@ az storage account local-user list \ {{#tab name="Az PowerShell" }}
-Az PowerShell numaralandırması +Az PowerShell enumeration ```powershell # Get storage accounts Get-AzStorageAccount | fl @@ -448,7 +448,7 @@ New-AzStorageBlobSASToken ` az-file-shares.md {{#endref}} -## Ayrıcalık Yükseltme +## Privilege Escalation {{#ref}} ../az-privilege-escalation/az-storage-privesc.md @@ -471,6 +471,7 @@ az-file-shares.md - [https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction](https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction) - [https://learn.microsoft.com/en-us/azure/storage/common/storage-sas-overview](https://learn.microsoft.com/en-us/azure/storage/common/storage-sas-overview) - [https://learn.microsoft.com/en-us/azure/storage/blobs/secure-file-transfer-protocol-support](https://learn.microsoft.com/en-us/azure/storage/blobs/secure-file-transfer-protocol-support) +- [https://learn.microsoft.com/en-us/azure/storage/blobs/secure-file-transfer-protocol-support-entra-id-based-access](https://learn.microsoft.com/en-us/azure/storage/blobs/secure-file-transfer-protocol-support-entra-id-based-access) - [Holiday Hack Challenge 2025 – Spare Key (Azure static website SAS leak)](https://0xdf.gitlab.io/holidayhack2025/act1/spare-key) - [Holiday Hack Challenge 2025: Blob Storage (Storage Secrets)](https://0xdf.gitlab.io/holidayhack2025/act1/blob-storage) - [https://learn.microsoft.com/en-us/cli/azure/storage/account](https://learn.microsoft.com/en-us/cli/azure/storage/account)