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 d2ab1fd1c..6e81daf83 100644
--- a/src/pentesting-cloud/azure-security/az-services/az-storage.md
+++ b/src/pentesting-cloud/azure-security/az-services/az-storage.md
@@ -4,82 +4,97 @@
## Informations de base
-Azure Storage Accounts sont des services fondamentaux dans Microsoft Azure qui fournissent un stockage cloud évolutif, sécurisé et hautement disponible pour différents types de données, y compris blobs (binary large objects), files, queues et tables. Ils servent de conteneurs regroupant ces différents services de stockage sous un seul namespace pour une gestion simplifiée.
+Les Azure Storage Accounts sont des services fondamentaux dans Microsoft Azure qui fournissent un stockage cloud évolutif, sécurisé et hautement disponible pour divers types de données, y compris les blobs (binary large objects), les fichiers, les queues et les tables. Ils servent de conteneurs regroupant ces différents services de stockage sous un seul espace de noms pour une gestion simplifiée.
-**Principales options de configuration**:
+**Principales options de configuration** :
-- Every storage account must have a **uniq name across all Azure**.
-- Every storage account is deployed in a **region** or in an Azure extended zone
-- It's possible to select the **premium** version of the storage account for better performance
-- It's possible to select among **4 types of redundancy to protect** against rack, drive and datacenter **failures**.
+- Chaque compte de stockage doit avoir un **nom unique sur l'ensemble d'Azure**.
+- Chaque compte de stockage est déployé dans une **région** ou dans une zone étendue Azure.
+- Il est possible de sélectionner la version **premium** du compte de stockage pour de meilleures performances.
+- Il est possible de choisir parmi **4 types de redondance pour se protéger** contre les pannes de rack, de disque et de centre de données.
-**Options de configuration de sécurité**:
+**Options de configuration de sécurité** :
-- **Require secure transfer for REST API operations**: Exiger TLS pour toute communication avec le storage
-- **Allows enabling anonymous access on individual containers**: Si non, il ne sera pas possible d'activer l'accès anonyme ultérieurement
-- **Enable storage account key access**: Sans cela, l'accès via Shared Keys sera interdit
+- **Require secure transfer for REST API operations** : Exiger TLS pour toute communication avec le storage.
+- **Allows enabling anonymous access on individual containers** : Si non activé, il ne sera pas possible d'activer l'accès anonyme plus tard.
+- **Enable storage account key access** : Si désactivé, l'accès avec Shared Keys sera interdit.
- **Minimum TLS version**
-- **Permitted scope for copy operations**: Autoriser depuis n'importe quel storage account, depuis un storage account du même Entra tenant ou depuis un storage account avec private endpoints dans le même virtual network.
+- **Permitted scope for copy operations** : Autoriser depuis n'importe quel storage account, depuis n'importe quel storage account du même Entra tenant ou depuis des storage account avec private endpoints dans le même virtual network.
-**Blob Storage options**:
+**Options Blob Storage** :
- **Allow cross-tenant replication**
-- **Access tier**: Hot (données fréquemment consultées), Cool et Cold (données rarement consultées)
+- **Access tier** : Hot (données fréquemment consultées), Cool et Cold (données rarement consultées)
-**Options réseau**:
+**Options réseau** :
-- **Network access**:
-- Allow from all networks
-- Allow from selected virtual networks and IP addresses
-- Disable public access and use private access
-- **Private endpoints**: Permet une connexion privée au storage account depuis un virtual network
+- **Network access** :
+- Autoriser depuis tous les réseaux
+- Autoriser depuis des virtual networks et des adresses IP sélectionnés
+- Désactiver l'accès public et utiliser l'accès privé
+- **Private endpoints** : Permet une connexion privée au compte de stockage depuis un virtual network
-**Options de protection des données**:
+**Options de protection des données** :
-- **Point-in-time restore for containers**: Permet de restaurer des containers à un état antérieur
-- It requires versioning, change feed, and blob soft delete to be enabled.
-- **Enable soft delete for blobs**: Active une période de rétention en jours pour les blobs supprimés (même écrasés)
-- **Enable soft delete for containers**: Active une période de rétention en jours pour les containers supprimés
-- **Enable soft delete for file shares**: Active une période de rétention en jours pour les file shares supprimés
-- **Enable versioning for blobs**: Conserver les versions précédentes de vos blobs
-- **Enable blob change feed**: Conserver des logs des créations, modifications et suppressions de blobs
-- **Enable version-level immutability support**: Permet de définir une politique de rétention temporelle au niveau du compte qui s'appliquera à toutes les versions de blob.
-- Version-level immutability support and point-in-time restore for containers cannot be enabled simultaneously.
+- **Point-in-time restore for containers** : Permet de restaurer des containers à un état antérieur
+- Cela nécessite l'activation de la versioning, du change feed et du blob soft delete.
+- **Enable soft delete for blobs** : Active une période de rétention en jours pour les blobs supprimés (même écrasés)
+- **Enable soft delete for containers** : Active une période de rétention en jours pour les containers supprimés
+- **Enable soft delete for file shares** : Active une période de rétention en jours pour les file shares supprimés
+- **Enable versioning for blobs** : Conserver les versions précédentes de vos blobs
+- **Enable blob change feed** : Conserver des logs de création, modification et suppression des blobs
+- **Enable version-level immutability support** : Permet de définir une politique de rétention basée sur le temps au niveau du compte qui s'appliquera à toutes les versions de blob.
+- Le support d'immuabilité au niveau des versions et la restauration point-in-time pour les containers ne peuvent pas être activés simultanément.
-**Options de configuration du chiffrement**:
+**Options de chiffrement** :
-- **Encryption type**: Il est possible d'utiliser des clés gérées par Microsoft (MMK) ou des clés gérées par le client (CMK)
-- **Enable infrastructure encryption**: Permet de doubler le chiffrement des données "for more security"
+- **Encryption type** : Il est possible d'utiliser des clés gérées par Microsoft (MMK) ou des clés gérées par le client (CMK)
+- **Enable infrastructure encryption** : Permet de chiffrer les données une seconde fois "pour plus de sécurité"
-### Points de terminaison de stockage
+### Endpoints de stockage
-
### Exposition publique
-If "Allow Blob public access" is **enabled** (disabled by default), when creating a container it's possible to:
+Si "Allow Blob public access" est **activé** (désactivé par défaut), lors de la création d'un container il est possible de :
-- Give **public access to read blobs** (you need to know the name).
-- **List container blobs** and **read** them.
-- Make it fully **private**
+- Donner un **accès public en lecture aux blobs** (il faut connaître le nom).
+- **Lister les blobs d'un container** et les **lire**.
+- Le rendre totalement **privé**
-#### Audit de l'exposition anonyme des blobs
+### Static website (`$web`) exposure & leaked secrets
-- **Locate storage accounts** that can expose data: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. If `allowBlobPublicAccess` is `false` you cannot turn containers public.
-- **Inspect risky accounts** to confirm the flag and other weak settings: `az storage account show --name --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`.
-- **Enumerate container-level exposure** where the flag is enabled:
+- **Static websites** sont servies depuis le conteneur spécial `$web` via un endpoint spécifique à la région tel que `https://.z13.web.core.windows.net/`.
+- Le conteneur `$web` peut renvoyer `publicAccess: null` via la blob API, mais les fichiers restent accessibles via le endpoint du site statique, donc déposer des artifacts de config/IaC là-bas peut leak secrets.
+- Quick audit workflow:
+```bash
+# Identify storage accounts with static website hosting enabled
+az storage blob service-properties show --account-name --auth-mode login
+# Enumerate containers (including $web) and their public flags
+az storage container list --account-name --auth-mode login
+# List files served by the static site even when publicAccess is null
+az storage blob list --container-name '$web' --account-name --auth-mode login
+# 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
+```
+### Auditer l'exposition anonyme des blobs
+
+- **Localiser les comptes de stockage** pouvant exposer des données : `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. Si `allowBlobPublicAccess` est `false`, vous ne pouvez pas rendre les conteneurs publics.
+- **Inspecter les comptes à risque** pour confirmer le flag et d'autres paramètres faibles : `az storage account show --name --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`.
+- **Énumérer l'exposition au niveau des conteneurs** lorsque le flag est activé:
```bash
az storage container list --account-name \
--query '[].{name:name, access:properties.publicAccess}'
```
-- `"Blob"`: lectures anonymes autorisées **uniquement lorsque le nom du blob est connu** (pas d'énumération).
+- `"Blob"`: accès en lecture anonyme autorisé **uniquement lorsque le nom du blob est connu** (pas de listing).
- `"Container"`: **liste + lecture** anonymes de tous les blobs.
-- `null`: privé; authentification requise.
-- **Prouver l'accès** sans identifiants:
-- Si `publicAccess` est `Container`, l'énumération anonyme fonctionne: `curl "https://.blob.core.windows.net/?restype=container&comp=list"`.
-- Pour `Blob` et `Container`, le téléchargement anonyme du blob fonctionne lorsque le nom est connu:
+- `null`: privé ; authentification requise.
+- **Prouver l'accès** sans identifiants :
+- Si `publicAccess` est `Container`, le listing anonyme fonctionne : `curl "https://.blob.core.windows.net/?restype=container&comp=list"`.
+- Pour `Blob` et `Container`, le téléchargement anonyme d'un blob fonctionne lorsque le nom est connu :
```bash
az storage blob download -c -n --account-name --file /dev/stdout
# or via raw HTTP
@@ -87,13 +102,13 @@ curl "https://.blob.core.windows.net//"
```
### Se connecter au stockage
-Si vous trouvez un **stockage** auquel vous pouvez vous connecter, vous pouvez utiliser l'outil [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) pour le faire.
+Si vous trouvez un **stockage** auquel vous pouvez vous connecter, vous pouvez utiliser l'outil [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) pour ce faire.
## Accès au stockage
### RBAC
-Il est possible d'utiliser des principals Entra ID avec des **RBAC roles** pour accéder aux comptes de stockage, et c'est la méthode recommandée.
+Il est possible d'utiliser des principals Entra ID avec des **rôles RBAC** pour accéder aux comptes de stockage, et c'est la méthode recommandée.
### Clés d'accès
@@ -103,15 +118,15 @@ Les comptes de stockage disposent de clés d'accès qui peuvent être utilisées
### **Shared Keys & Lite Shared Keys**
-Il est possible de [**générer Shared Keys**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) signées avec les clés d'accès pour autoriser l'accès à certaines ressources via une URL signée.
+Il est possible de [**generate Shared Keys**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) signées avec les clés d'accès pour autoriser l'accès à certaines ressources via une URL signée.
> [!NOTE]
-> Notez que la partie `CanonicalizedResource` représente la ressource du service de stockage (URI). Et si une partie de l'URL est encodée, elle doit également être encodée à l'intérieur de `CanonicalizedResource`.
+> Notez que la partie `CanonicalizedResource` représente la ressource du service de stockage (URI). Et si une partie de l'URL est encodée, elle doit également être encodée dans la `CanonicalizedResource`.
> [!NOTE]
-> Ceci est **utilisé par défaut par la `az` cli** pour authentifier les requêtes. Pour qu'il utilise les identifiants du principal Entra ID, indiquez le paramètre `--auth-mode login`.
+> Ceci est **utilisé par défaut par la `az` cli** pour authentifier les requêtes. Pour qu'elle utilise les identifiants du principal Entra ID, indiquez le paramètre `--auth-mode login`.
-- Il est possible de générer une **shared key pour les services blob, queue et file** en signant les informations suivantes:
+- Il est possible de générer une **shared key for blob, queue and file services** en signant les informations suivantes:
```bash
StringToSign = VERB + "\n" +
Content-Encoding + "\n" +
@@ -136,7 +151,7 @@ Content-Type + "\n" +
Date + "\n" +
CanonicalizedResource;
```
-- Il est possible de générer une **lite shared key for blob, queue and file services** en signant les informations suivantes :
+- Il est possible de générer un **lite shared key for blob, queue and file services** en signant les informations suivantes :
```bash
StringToSign = VERB + "\n" +
Content-MD5 + "\n" +
@@ -145,12 +160,12 @@ Date + "\n" +
CanonicalizedHeaders +
CanonicalizedResource;
```
-- Il est possible de générer une **clé partagée lite pour table services** en signant les informations suivantes :
+- Il est possible de générer une **lite shared key for table services** en signant les informations suivantes :
```bash
StringToSign = Date + "\n"
CanonicalizedResource
```
-Ensuite, pour utiliser la clé, on peut la placer dans l'en-tête Authorization en suivant la syntaxe :
+Ensuite, pour utiliser la clé, il suffit de la placer dans l'en-tête Authorization en respectant la syntaxe :
```bash
Authorization="[SharedKey|SharedKeyLite] :"
#e.g.
@@ -162,18 +177,18 @@ x-ms-date: Fri, 26 Jun 2015 23:39:12 GMT
Authorization: SharedKey myaccount:ctzMq410TV3wS7upTBcunJTDLEJwMAZuFPfr0mrrA08=
Content-Length: 0
```
-### **Signature d'accès partagée** (SAS)
+### **Signature d'accès partagé** (SAS)
-Les Shared Access Signatures (SAS) sont des URLs sécurisées et limitées dans le temps qui **accordent des autorisations spécifiques pour accéder aux ressources** d'un compte Azure Storage sans exposer les clés d'accès du compte. Alors que les clés d'accès fournissent un accès administratif complet à toutes les ressources, les SAS permettent un contrôle granulaire en spécifiant des permissions (comme read ou write) et en définissant une date d'expiration.
+Les Shared Access Signatures (SAS) sont des URL sécurisées et limitées dans le temps qui **accordent des permissions spécifiques pour accéder aux ressources** d'un compte Azure Storage sans exposer les clés d'accès du compte. Alors que les clés d'accès fournissent un accès administratif complet à toutes les ressources, les SAS permettent un contrôle granulaire en spécifiant les permissions (like read or write) et en définissant une date d'expiration.
#### Types de SAS
-- **User delegation SAS** : Créé à partir d'un **Entra ID principal** qui signera le SAS et délèguera les permissions de l'utilisateur au SAS. Il ne peut être utilisé qu'avec **blob and data lake storage** ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). Il est possible de **révoquer** tous les SAS délégués utilisateur générés.
-- Même s'il est possible de générer un delegation SAS avec des permissions "supplémentaires" par rapport à celles de l'utilisateur, si le principal ne les possède pas, cela ne fonctionnera pas (no privesc).
-- **Service SAS** : Signé en utilisant une des **access keys** du compte de stockage. Il peut être utilisé pour accorder l'accès à des ressources spécifiques dans un seul service de stockage. Si la clé est renouvelée, le SAS cessera de fonctionner.
-- **Account SAS** : Également signé avec une des **access keys** du compte de stockage. Il accorde l'accès aux ressources à travers les services d'un compte de stockage (Blob, Queue, Table, File) et peut inclure des opérations au niveau service.
+- **User delegation SAS** : Celui-ci est créé à partir d'un **Entra ID principal** qui signera le SAS et délèguera les permissions de l'utilisateur au SAS. Il ne peut être utilisé qu'avec **blob and data lake storage** ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). Il est possible de **révoquer** tous les SAS délégués aux utilisateurs générés.
+- Il est même possible de générer un delegation SAS avec des permissions "supplémentaires" par rapport à celles que possède l'utilisateur. Cependant, si le principal ne les possède pas, ça ne fonctionnera pas (no privesc).
+- **Service SAS** : Celui-ci est signé en utilisant une des **clés d'accès** du compte de stockage. Il peut être utilisé pour accorder l'accès à des ressources spécifiques dans un seul service de stockage. Si la clé est renouvelée, le SAS cessera de fonctionner.
+- **Account SAS** : Il est également signé avec une des **clés d'accès** du compte de stockage. Il accorde l'accès aux ressources à travers les services d'un compte de stockage (Blob, Queue, Table, File) et peut inclure des opérations au niveau service.
-Une URL SAS signée par une **access key** ressemble à ceci :
+Une URL SAS signée par une **clé d'accès** ressemble à ceci :
- `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`
@@ -181,10 +196,10 @@ Une URL SAS signée en tant que **user delegation** ressemble à ceci :
- `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`
-Remarquez certains **paramètres HTTP** :
+Remarquer certains **http params** :
-- Le **paramètre `se`** indique la **date d'expiration** du SAS
-- Le **paramètre `sp`** indique les **permissions** du SAS
+- Le paramètre **`se`** indique la **date d'expiration** du SAS
+- Le paramètre **`sp`** indique les **permissions** du SAS
- Le **`sig`** est la **signature** validant le SAS
#### Permissions SAS
@@ -193,41 +208,41 @@ Lors de la génération d'un SAS, il est nécessaire d'indiquer les permissions
- (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
-## Prise en charge de SFTP pour Azure Blob Storage
+## SFTP Support for Azure Blob Storage
-Azure Blob Storage prend désormais en charge le protocole SSH File Transfer Protocol (SFTP), permettant le transfert et la gestion sécurisés de fichiers directement vers Blob Storage sans nécessiter de solutions personnalisées ou de produits tiers.
+Azure Blob Storage prend désormais en charge le SSH File Transfer Protocol (SFTP), permettant le transfert et la gestion sécurisés de fichiers directement vers Blob Storage sans nécessiter de solutions personnalisées ou de produits tiers.
-### Principales fonctionnalités
+### Fonctionnalités clés
-- Protocol Support : SFTP fonctionne avec les comptes Blob Storage configurés avec un espace de noms hiérarchique (HNS). Cela organise les blobs en répertoires et sous-répertoires pour une navigation facilitée.
-- Security : SFTP utilise des identités d'utilisateurs locaux pour l'authentification et ne s'intègre pas à RBAC ou ABAC. Chaque utilisateur local peut s'authentifier via :
+- Support de protocole : SFTP fonctionne avec les comptes Blob Storage configurés avec hierarchical namespace (HNS). Cela organise les blobs en répertoires et sous-répertoires pour une navigation plus simple.
+- Sécurité : SFTP utilise des identités utilisateurs locales pour l'authentification et ne s'intègre pas avec RBAC ou ABAC. Chaque utilisateur local peut s'authentifier via :
- mots de passe générés par Azure
- - paires de clés SSH publique/privée
-- Granular Permissions : Des permissions telles que Read, Write, Delete et List peuvent être attribuées aux utilisateurs locaux pour jusqu'à 100 containers.
-- Networking Considerations : Les connexions SFTP se font via le port 22. Azure prend en charge des configurations réseau comme les firewalls, les private endpoints ou les virtual networks pour sécuriser le trafic SFTP.
+ - paires de clés SSH publique-privée
+- Permissions granulaires : des permissions telles que Read, Write, Delete et List peuvent être assignées aux utilisateurs locaux pour jusqu'à 100 containers.
+- Considérations réseau : les connexions SFTP se font via le port 22. Azure prend en charge des configurations réseau comme les firewalls, private endpoints, ou virtual networks pour sécuriser le trafic SFTP.
### Exigences d'installation
- Hierarchical Namespace : HNS doit être activé lors de la création du compte de stockage.
-- Supported Encryption : Nécessite des algorithmes cryptographiques approuvés par le Microsoft Security Development Lifecycle (SDL) (par exemple, rsa-sha2-256, ecdsa-sha2-nistp256).
-- SFTP Configuration :
+- Chiffrement supporté : nécessite des algorithmes cryptographiques approuvés par Microsoft Security Development Lifecycle (SDL) (par ex. rsa-sha2-256, ecdsa-sha2-nistp256).
+- Configuration SFTP :
- Activer SFTP sur le compte de stockage.
- - Créer des identités d'utilisateurs locaux avec les permissions appropriées.
- - Configurer des home directories pour les utilisateurs afin de définir leur emplacement de départ dans le container.
+ - Créer des identités utilisateurs locales avec les permissions appropriées.
+ - Configurer des home directories pour les utilisateurs afin de définir leur point de départ dans le container.
### Permissions
| Permission | Symbol | Description |
| ---------------------- | ------ | ------------------------------------ |
-| **Lecture** | `r` | Lire le contenu du fichier. |
-| **Écriture** | `w` | Télécharger des fichiers et créer des répertoires. |
-| **Liste** | `l` | Lister le contenu des répertoires. |
-| **Suppression** | `d` | Supprimer des fichiers ou répertoires. |
-| **Création** | `c` | Créer des fichiers ou répertoires. |
-| **Modifier propriétaire** | `o` | Changer l'utilisateur ou le groupe propriétaire. |
-| **Modifier permissions** | `p` | Changer les ACL sur les fichiers ou répertoires. |
+| **Read** | `r` | Lire le contenu du fichier. |
+| **Write** | `w` | Téléverser des fichiers et créer des répertoires. |
+| **List** | `l` | Lister le contenu des répertoires. |
+| **Delete** | `d` | Supprimer des fichiers ou répertoires. |
+| **Create** | `c` | Créer des fichiers ou répertoires. |
+| **Modify Ownership** | `o` | Modifier l'utilisateur ou le groupe propriétaire. |
+| **Modify Permissions** | `p` | Modifier les ACL sur les fichiers ou répertoires. |
-## Enumeration
+## Énumération
{{#tabs }}
{{#tab name="az cli" }}
@@ -357,7 +372,7 @@ az storage account local-user list \
{{#tab name="Az PowerShell" }}
-Énumération Az PowerShell
+Az PowerShell enumeration
```powershell
# Get storage accounts
Get-AzStorageAccount | fl
@@ -426,19 +441,19 @@ New-AzStorageBlobSASToken `
az-file-shares.md
{{#endref}}
-## Privilege Escalation
+## Élévation de privilèges
{{#ref}}
../az-privilege-escalation/az-storage-privesc.md
{{#endref}}
-## Post Exploitation
+## Post-exploitation
{{#ref}}
../az-post-exploitation/az-blob-storage-post-exploitation.md
{{#endref}}
-## Persistence
+## Persistance
{{#ref}}
../az-persistence/az-storage-persistence.md
@@ -449,6 +464,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)
+- [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)
- [https://learn.microsoft.com/en-us/cli/azure/storage/container](https://learn.microsoft.com/en-us/cli/azure/storage/container)