Translated ['', 'src/pentesting-cloud/azure-security/az-services/az-stor

This commit is contained in:
Translator
2026-01-18 15:05:20 +00:00
parent 7ae81607d6
commit 5626c72275
@@ -4,100 +4,115 @@
## Información básica
Las Azure Storage Accounts son servicios fundamentales en Microsoft Azure que proporcionan almacenamiento en la nube escalable, seguro y altamente disponible para diversos tipos de datos, incluyendo blobs (binary large objects), files, queues y tables. Sirven como contenedores que agrupan estos distintos servicios de almacenamiento bajo un único namespace para facilitar la administración.
Azure Storage Accounts son servicios fundamentales en Microsoft Azure que proporcionan almacenamiento en la nube escalable, seguro y altamente disponible para varios tipos de datos, incluyendo blobs (binary large objects), files, queues, and tables. Sirven como contenedores que agrupan estos diferentes servicios de almacenamiento bajo un único namespace para facilitar la gestión.
**Opciones principales de configuración**:
**Opciones de configuración principales**:
- Cada storage account debe tener un **nombre único en todo Azure**.
- Cada storage account se despliega en una **región** o en una zona extendida de Azure.
- Es posible seleccionar la versión **premium** de la storage account para un mejor rendimiento.
- Es posible seleccionar entre **4 tipos de redundancia** para proteger contra fallos de rack, disco y datacenter.
- Cada storage account debe tener un **uniq name across all Azure**.
- Cada storage account se despliega en una **region** o en una Azure extended zone.
- Es posible seleccionar la versión **premium** del storage account para mejor rendimiento.
- Es posible seleccionar entre **4 types of redundancy to protect** contra fallos de rack, disco y datacenter.
**Opciones de configuración de seguridad**:
- **Require secure transfer for REST API operations**: Requerir TLS en cualquier comunicación con el storage.
- **Allows enabling anonymous access on individual containers**: Si no está activado, no será posible habilitar acceso anónimo en el futuro.
- **Enable storage account key access**: Si no está activado, el acceso con Shared Keys quedará prohibido.
- **Require secure transfer for REST API operations**: Requiere TLS en cualquier comunicación con el storage.
- **Allows enabling anonymous access on individual containers**: Si no, no será posible habilitar el acceso anónimo en el futuro.
- **Enable storage account key access**: Si no, el acceso con Shared Keys será prohibido.
- **Minimum TLS version**
- **Permitted scope for copy operations**: Permitir desde cualquier storage account, desde cualquier storage account del mismo Entra tenant o desde storage accounts con private endpoints en la misma virtual network.
- **Permitted scope for copy operations**: Permitir desde cualquier storage account, desde cualquier storage account del mismo Entra tenant o desde storage account con private endpoints en la misma virtual network.
**Opciones de Blob Storage**:
**Blob Storage options**:
- **Allow cross-tenant replication**
- **Access tier**: Hot (datos accedidos con frecuencia), Cool y Cold (datos raramente accedidos).
- **Access tier**: Hot (datos de acceso frecuente), Cool y Cold (datos accedidos raramente)
**Opciones de red**:
- **Network access**:
- Allow from all networks
- Allow from selected virtual networks and IP addresses
- Disable public access and use private access
- **Private endpoints**: Permite una conexión privada al storage account desde una virtual network.
- Allow from all networks
- Allow from selected virtual networks and IP addresses
- Disable public access and use private access
- **Private endpoints**: Permite una conexión privada al storage account desde una virtual network
**Opciones de protección de datos**:
- **Point-in-time restore for containers**: Permite restaurar contenedores a un estado anterior.
- Requiere que versioning, change feed y blob soft delete estén habilitados.
- **Enable soft delete for blobs**: Habilita un periodo de retención en días para blobs eliminados (incluso sobrescritos).
- **Enable soft delete for containers**: Habilita un periodo de retención en días para contenedores eliminados.
- **Enable soft delete for file shares**: Habilita un periodo de retención en días para file shares eliminados.
- **Enable versioning for blobs**: Mantiene versiones previas de tus blobs.
- **Enable blob change feed**: Guarda registros de creación, modificación y eliminación de blobs.
- **Enable version-level immutability support**: Permite establecer una política de retención basada en tiempo a nivel de cuenta que se aplicará a todas las versiones de blobs.
- Version-level immutability support y point-in-time restore for containers no pueden habilitarse simultáneamente.
- Requiere habilitar versioning, change feed y blob soft delete.
- **Enable soft delete for blobs**: Habilita un período de retención en días para blobs eliminados (incluso sobrescritos).
- **Enable soft delete for containers**: Habilita un período de retención en días para contenedores eliminados.
- **Enable soft delete for file shares**: Habilita un período de retención en días para file shares eliminados.
- **Enable versioning for blobs**: Mantener versiones previas de tus blobs.
- **Enable blob change feed**: Mantener registros de creación, modificación y eliminación de blobs.
- **Enable version-level immutability support**: Permite establecer una política de retención basada en tiempo a nivel de cuenta que se aplicará a todas las versiones de blob.
- Version-level immutability support y point-in-time restore for containers no pueden estar habilitados simultáneamente.
**Opciones de cifrado**:
**Opciones de configuración de cifrado**:
- **Encryption type**: Es posible usar claves administradas por Microsoft (MMK) o claves administradas por el cliente (CMK).
- **Enable infrastructure encryption**: Permite cifrar los datos doblemente "para mayor seguridad".
- **Encryption type**: Es posible usar Microsoft-managed keys (MMK) o Customer-managed keys (CMK).
- **Enable infrastructure encryption**: Permite double encrypt los datos para mayor seguridad.
### Puntos de conexión de almacenamiento
### Storage endpoints
<table data-header-hidden><thead><tr><th width="197">Storage Service</th><th>Endpoint</th></tr></thead><tbody><tr><td><strong>Blob storage</strong></td><td><code>https://<storage-account>.blob.core.windows.net</code><br><br><code>https://<stg-acc>.blob.core.windows.net/<container-name>?restype=container&comp=list</code></td></tr><tr><td><strong>Data Lake Storage</strong></td><td><code>https://<storage-account>.dfs.core.windows.net</code></td></tr><tr><td><strong>Azure Files</strong></td><td><code>https://<storage-account>.file.core.windows.net</code></td></tr><tr><td><strong>Queue storage</strong></td><td><code>https://<storage-account>.queue.core.windows.net</code></td></tr><tr><td><strong>Table storage</strong></td><td><code>https://<storage-account>.table.core.windows.net</code></td></tr></tbody></table>
<table data-header-hidden><thead><tr><th width="197">Servicio de almacenamiento</th><th>Punto de conexión</th></tr></thead><tbody><tr><td><strong>Blob storage</strong></td><td><code>https://<storage-account>.blob.core.windows.net</code><br><br><code>https://<stg-acc>.blob.core.windows.net/<container-name>?restype=container&comp=list</code></td></tr><tr><td><strong>Data Lake Storage</strong></td><td><code>https://<storage-account>.dfs.core.windows.net</code></td></tr><tr><td><strong>Azure Files</strong></td><td><code>https://<storage-account>.file.core.windows.net</code></td></tr><tr><td><strong>Queue storage</strong></td><td><code>https://<storage-account>.queue.core.windows.net</code></td></tr><tr><td><strong>Table storage</strong></td><td><code>https://<storage-account>.table.core.windows.net</code></td></tr></tbody></table>
### Exposición pública
Si "Allow Blob public access" está **habilitado** (deshabilitado por defecto), al crear un contenedor es posible:
Si "Allow Blob public access" está **enabled** (disabled por defecto), al crear un container es posible:
- Dar **acceso público para leer blobs** (es necesario conocer el nombre).
- **Listar los blobs del contenedor** y **leerlos**.
- Hacerlo completamente **privado**.
- Dar **public access to read blobs** (necesitas conocer el nombre).
- **List container blobs** y **read** them.
- Hacerlo totalmente **private**
<figure><img src="https://lh7-rt.googleusercontent.com/slidesz/AGV_vUfoetUnYBPWQpRrWNnnlbqWpl8Rdoaeg5uBrCVlvcNDlnKwQHjZe8nUb2SfPspBgbu-lCZLmUei-hFi_Jl2eKbaxUtBGTjdUSDmkrcwr90VZkmuMjk9tyh92p75btfyzGiUTa0-=s2048?key=m8TV59TrCFPlkiNnmhYx3aZt" alt=""><figcaption></figcaption></figure>
#### Auditoría de exposición anónima de blobs
### Static website (`$web`) exposure & leaked secrets
- **Localizar storage accounts** que pueden exponer datos: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. Si `allowBlobPublicAccess` es `false` no puedes convertir contenedores en públicos.
- **Inspeccionar cuentas riesgosas** para confirmar el flag y otras configuraciones débiles: `az storage account show --name <acc> --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`.
- **Enumerar la exposición a nivel de contenedor** donde el flag está habilitado:
- **Static websites** are served from the special `$web` container over a region-specific endpoint such as `https://<account>.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:
```bash
# Identify storage accounts with static website hosting enabled
az storage blob service-properties show --account-name <acc-name> --auth-mode login
# Enumerate containers (including $web) and their public flags
az storage container list --account-name <acc-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 <acc-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 <acc-name> --auth-mode login
```
### Auditoría de exposición anónima de blobs
- **Localiza cuentas de almacenamiento** que puedan exponer datos: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. Si `allowBlobPublicAccess` es `false` no puedes hacer públicos los contenedores.
- **Inspecciona cuentas riesgosas** para confirmar la opción y otras configuraciones débiles: `az storage account show --name <acc> --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`.
- **Enumera la exposición a nivel de contenedor** donde la opción está habilitada:
```bash
az storage container list --account-name <acc> \
--query '[].{name:name, access:properties.publicAccess}'
```
- `"Blob"`: lecturas anónimas permitidas **solo cuando se conoce el nombre del blob** (sin listar).
- `"Container"`: listado anónimo **listado + lectura** de cada blob.
- `"Blob"`: lecturas anónimas permitidas **solo cuando se conoce el nombre del blob** (sin listado).
- `"Container"`: **listado + lectura** anónimos de todos los blobs.
- `null`: privado; se requiere autenticación.
- **Demostrar acceso** sin credenciales:
- Si `publicAccess` es `Container`, el listado anónimo funciona: `curl "https://<acc>.blob.core.windows.net/<container>?restype=container&comp=list"`.
- Para ambos, `Blob` y `Container`, la descarga anónima del blob funciona cuando se conoce el nombre:
- Para ambos `Blob` y `Container`, la descarga anónima de blobs funciona cuando se conoce el nombre:
```bash
az storage blob download -c <container> -n <blob> --account-name <acc> --file /dev/stdout
# or via raw HTTP
curl "https://<acc>.blob.core.windows.net/<container>/<blob>"
```
### Conectar al almacenamiento
### Conectarse al almacenamiento
Si encuentras algún **almacenamiento** al que puedas conectarte, puedes usar la herramienta [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) para hacerlo.
Si encuentras cualquier **almacenamiento** al que puedas conectarte, puedes usar la herramienta [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) para ello.
## Acceso al almacenamiento <a href="#about-blob-storage" id="about-blob-storage"></a>
### RBAC
Es posible usar principales de Entra ID con **RBAC roles** para acceder a cuentas de almacenamiento y es la forma recomendada.
Es posible usar entidades principales de Entra ID con **RBAC roles** para acceder a las cuentas de almacenamiento y es la forma recomendada.
### Claves de acceso
Las cuentas de almacenamiento tienen claves de acceso que pueden utilizarse para acceder a ellas. Esto proporciona **acceso completo a la cuenta de almacenamiento.**
Las cuentas de almacenamiento tienen claves de acceso que pueden usarse para acceder a ellas. Esto proporciona **acceso completo a la cuenta de almacenamiento.**
<figure><img src="../../../images/image (5).png" alt=""><figcaption></figcaption></figure>
@@ -109,9 +124,9 @@ Es posible [**generate Shared Keys**](https://learn.microsoft.com/en-us/rest/api
> Tenga en cuenta que la parte `CanonicalizedResource` representa el recurso del servicio de almacenamiento (URI). Y si alguna parte de la URL está codificada, también debe estar codificada dentro de la `CanonicalizedResource`.
> [!NOTE]
> Esto es **usado por defecto por `az` cli** para autenticar solicitudes. Para hacer que use las credenciales del principal de Entra ID, indique el parámetro `--auth-mode login`.
> Esto es **usado por defecto por la CLI `az`** para autenticar las solicitudes. Para que use las credenciales del principal de Entra ID indica el parámetro `--auth-mode login`.
- Es posible generar una **shared key for blob, queue and file services** firmando la siguiente información:
- Es posible generar una **clave compartida para los servicios blob, queue y file** firmando la siguiente información:
```bash
StringToSign = VERB + "\n" +
Content-Encoding + "\n" +
@@ -128,7 +143,7 @@ Range + "\n" +
CanonicalizedHeaders +
CanonicalizedResource;
```
- Es posible generar una **clave compartida para servicios de tablas** firmando la siguiente información:
- Es posible generar un **shared key for table services** firmando la siguiente información:
```bash
StringToSign = VERB + "\n" +
Content-MD5 + "\n" +
@@ -145,12 +160,12 @@ Date + "\n" +
CanonicalizedHeaders +
CanonicalizedResource;
```
- Es posible generar una **lite shared key for table services** firmando la siguiente información:
- Es posible generar un **lite shared key for table services** firmando la siguiente información:
```bash
StringToSign = Date + "\n"
CanonicalizedResource
```
Luego, para usar la key, se puede hacer en el encabezado Authorization siguiendo la sintaxis:
Luego, para usar la clave, puede hacerse en el encabezado Authorization siguiendo la sintaxis:
```bash
Authorization="[SharedKey|SharedKeyLite] <AccountName>:<Signature>"
#e.g.
@@ -164,68 +179,68 @@ Content-Length: 0
```
### **Firma de acceso compartido** (SAS)
Shared Access Signatures (SAS) son URLs seguras y con tiempo limitado que **otorgan permisos específicos para acceder a recursos** en una cuenta de Azure Storage sin exponer las claves de acceso de la cuenta. Mientras que las claves de acceso proporcionan acceso administrativo completo a todos los recursos, las SAS permiten un control granular al especificar permisos (como lectura o escritura) y definir una fecha de expiración.
Las Shared Access Signatures (SAS) son URLs seguras y con tiempo limitado que **conceden permisos específicos para acceder a recursos** en una cuenta de Azure Storage sin exponer las claves de acceso de la cuenta. Mientras que las claves de acceso proporcionan acceso administrativo completo a todos los recursos, las SAS permiten un control granular al especificar permisos (como lectura o escritura) y definir un tiempo de expiración.
#### Tipos de SAS
- **SAS de delegación de usuario**: Esto se crea a partir de un principal de Entra ID que firmará la SAS y delegará los permisos del usuario a la SAS. Solo puede usarse con blob and data lake storage ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). Es posible **revocar** todas las SAS delegadas de usuario generadas.
- Aunque es posible generar una SAS de delegación con "más" permisos que los que tiene el usuario. Sin embargo, si el principal no los posee, no funcionará (no privesc).
- **SAS de servicio**: Se firma usando una de las claves de acceso de la cuenta de almacenamiento. Puede usarse para otorgar acceso a recursos específicos en un único servicio de almacenamiento. Si la clave se renueva, la SAS dejará de funcionar.
- **SAS de cuenta**: También se firma con una de las claves de acceso de la cuenta de almacenamiento. Otorga acceso a recursos a través de los servicios de una cuenta de almacenamiento (Blob, Queue, Table, File) y puede incluir operaciones a nivel de servicio.
- **User delegation SAS**: Se crea a partir de un **principal de Entra ID** que firmará la SAS y delegará los permisos del usuario a la SAS. Solo puede usarse con **blob and data lake storage** ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). Es posible **revocar** todas las SAS delegadas de usuario generadas.
- Aunque es posible generar una delegation SAS con "más" permisos que los que tiene el usuario, si el principal no los posee, no funcionará (no hay privesc).
- **Service SAS**: Está firmada usando una de las **access keys** de la cuenta de storage. Puede usarse para otorgar acceso a recursos específicos en un único servicio de storage. Si la key se renueva, la SAS dejará de funcionar.
- **Account SAS**: También se firma con una de las **access keys** de la cuenta de storage. Concede acceso a recursos a través de los servicios de una cuenta de storage (Blob, Queue, Table, File) y puede incluir operaciones a nivel de servicio.
A SAS URL signed by an **access key** looks like this:
A SAS URL firmada por una **access key** se ve así:
- `https://<container_name>.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`
A SAS URL signed as a **user delegation** looks like this:
Una SAS URL firmada como **user delegation** se ve así:
- `https://<container_name>.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`
Tome nota de algunos parámetros HTTP:
Nota algunos **http params**:
- El parámetro `se` indica la **fecha de expiración** de la SAS
- El parámetro `sp` indica los **permisos** de la SAS
- El `sig` es la **firma** que valida la SAS
- El parámetro **`se`** indica la **fecha de expiración** de la SAS
- El parámetro **`sp`** indica los **permisos** de la SAS
- El **`sig`** es la **firma** que valida la SAS
#### Permisos de SAS
Al generar una SAS es necesario indicar los permisos que debe otorgar. Dependiendo del objeto sobre el que se genere la SAS se pueden incluir diferentes permisos. Por ejemplo:
Al generar una SAS es necesario indicar los permisos que debe conceder. Dependiendo del objeto sobre el que se genera la SAS, se pueden incluir distintos permisos. Por ejemplo:
- (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
- (a)ñadir, (c)rear, (d)eliminar, (e)ejecutar, (f)filter_by_tags, (i)set_immutability_policy, (l)listar, (m)mover, (r)leer, (t)etiquetar, (w)escribir, (x)delete_previous_version, (y)permanent_delete
## Soporte SFTP para Azure Blob Storage
Azure Blob Storage ahora soporta el SSH File Transfer Protocol (SFTP), permitiendo la transferencia y gestión segura de archivos directamente en Blob Storage sin requerir soluciones personalizadas o productos de terceros.
Azure Blob Storage ahora soporta el SSH File Transfer Protocol (SFTP), permitiendo la transferencia segura de archivos y la gestión directamente en Blob Storage sin requerir soluciones personalizadas o productos de terceros.
### Características clave
- Protocol Support: SFTP funciona con cuentas de Blob Storage configuradas con hierarchical namespace (HNS). Esto organiza los blobs en directorios y subdirectorios para una navegación más sencilla.
- Seguridad: SFTP usa identidades de usuario locales para la autenticación y no se integra con RBAC ni ABAC. Cada usuario local puede autenticarse mediante:
- Azure-generated passwords
- Public-private SSH key pairs
- Permisos granulares: Permisos como Read, Write, Delete y List pueden asignarse a usuarios locales para hasta 100 contenedores.
- Consideraciones de red: Las conexiones SFTP se realizan a través del puerto 22. Azure soporta configuraciones de red como firewalls, private endpoints, o virtual networks para asegurar el tráfico SFTP.
- Security: SFTP usa identidades de usuario locales para la autenticación y no se integra con RBAC ni ABAC. Cada usuario local puede autenticarse mediante:
- Azure-generated passwords
- Public-private SSH key pairs
- Permisos granulares: Permisos como Leer, Escribir, Eliminar y Listar se pueden asignar a usuarios locales para hasta 100 containers.
- Consideraciones de red: Las conexiones SFTP se establecen a través del puerto 22. Azure soporta configuraciones de red como firewalls, private endpoints, o virtual networks para asegurar el tráfico SFTP.
### Requisitos de configuración
- Hierarchical Namespace: HNS debe estar habilitado al crear la cuenta de almacenamiento.
- Encriptación compatible: Requiere algoritmos criptográficos aprobados por Microsoft Security Development Lifecycle (SDL) (p. ej., rsa-sha2-256, ecdsa-sha2-nistp256).
- Configuración SFTP:
- Habilitar SFTP en la cuenta de almacenamiento.
- Crear identidades de usuario locales con permisos apropiados.
- Configurar directorios home para los usuarios para definir su ubicación inicial dentro del contenedor.
- Hierarchical Namespace: HNS debe estar habilitado al crear la cuenta de storage.
- Supported Encryption: Requiere algoritmos criptográficos aprobados por Microsoft Security Development Lifecycle (SDL) (p. ej., rsa-sha2-256, ecdsa-sha2-nistp256).
- SFTP Configuration:
- Enable SFTP on the storage account.
- Create local user identities with appropriate permissions.
- Configure home directories for users to define their starting location within the container.
### Permisos
| Permission | Symbol | Description |
| ---------------------- | ------ | ------------------------------------ |
| **Read** | `r` | Leer el contenido del archivo. |
| **Write** | `w` | Subir archivos y crear directorios. |
| **List** | `l` | Listar el contenido de los directorios. |
| **Delete** | `d` | Eliminar archivos o directorios. |
| **Create** | `c` | Crear archivos o directorios. |
| **Modify Ownership** | `o` | Cambiar el usuario o grupo propietario. |
| **Modify Permissions** | `p` | Cambiar ACLs en archivos o directorios. |
| Permiso | Símbolo | Descripción |
| ---------------------- | ------- | ------------------------------------ |
| **Leer** | `r` | Leer contenido del archivo. |
| **Escribir** | `w` | Subir archivos y crear directorios. |
| **Listar** | `l` | Listar contenidos de directorios. |
| **Eliminar** | `d` | Eliminar archivos o directorios. |
| **Crear** | `c` | Crear archivos o directorios. |
| **Modificar propietario** | `o` | Cambiar el usuario o grupo propietario. |
| **Modificar permisos** | `p` | Cambiar ACLs en archivos o directorios. |
## Enumeración
@@ -233,7 +248,7 @@ Azure Blob Storage ahora soporta el SSH File Transfer Protocol (SFTP), permitien
{{#tab name="az cli" }}
<details>
<summary>enumeración az cli</summary>
<summary>az cli enumeration</summary>
```bash
# Get storage accounts
az storage account list #Get the account name from here
@@ -357,7 +372,7 @@ az storage account local-user list \
{{#tab name="Az PowerShell" }}
<details>
<summary>Enumeración con Az PowerShell</summary>
<summary>Az PowerShell enumeration</summary>
```powershell
# Get storage accounts
Get-AzStorageAccount | fl
@@ -420,7 +435,7 @@ New-AzStorageBlobSASToken `
{{#endtab }}
{{#endtabs }}
### Compartición de archivos
### Comparticiones de archivos
{{#ref}}
az-file-shares.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)