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 b4b724895..69c030a6c 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}}
-## Informações Básicas
+## Basic Information
-Azure Storage Accounts são serviços fundamentais no Microsoft Azure que fornecem **storage em nuvem escalável, seguro e altamente disponível para vários tipos de dados**, incluindo blobs (binary large objects), files, queues e tables. Eles servem como containers que agrupam esses diferentes serviços de storage sob um único namespace para facilitar o gerenciamento.
+Azure Storage Accounts são serviços fundamentais no Microsoft Azure que fornecem cloud **storage para vários tipos de dados** escalável, seguro e altamente disponível, incluindo blobs (binary large objects), files, queues e tables. Eles servem como containers que agrupam esses diferentes serviços de storage sob um único namespace para facilitar o gerenciamento.
-**Principais opções de configuração**:
+**Main configuration options**:
-- Toda storage account deve ter um **nome único em todo o Azure**.
-- Toda storage account é implantada em uma **região** ou em uma Azure extended zone
-- É possível selecionar a versão **premium** da storage account para melhor performance
-- É possível escolher entre **4 tipos de redundância para proteger** contra falhas de rack, drive e datacenter **failures**.
+- 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**.
-**Opções de configuração de segurança**:
+**Security configuration options**:
-- **Require secure transfer for REST API operations**: Exige TLS em qualquer comunicação com o storage
-- **Allows enabling anonymous access on individual containers**: Caso contrário, não será possível habilitar anonymous access no futuro
-- **Enable storage account key access**: Caso contrário, o acesso com Shared Keys será proibido
+- **Require secure transfer for REST API operations**: Require TLS in any communication with the storage
+- **Allows enabling anonymous access on individual containers**: If not, it won't be possible to enable anonymous access in the future
+- **Enable storage account key access**: If not, access with Shared Keys will be forbidden
- **Minimum TLS version**
-- **Permitted scope for copy operations**: Permite de qualquer storage account, de qualquer storage account do mesmo Entra tenant ou de storage account com private endpoints na mesma virtual network.
+- **Permitted scope for copy operations**: Allow from any storage account, from any storage account from the same Entra tenant or from storage account with private endpoints in the same virtual network.
-**Opções de Blob Storage**:
+**Blob Storage options**:
- **Allow cross-tenant replication**
-- **Access tier**: Hot (dados acessados com frequência), Cool e Cold (dados raramente acessados)
+- **Access tier**: Hot (frequently access data), Cool and Cold (rarely accessed data)
-**Opções de rede**:
+**Networking options**:
- **Network access**:
-- Permitir de todas as networks
-- Permitir de selected virtual networks e IP addresses
-- Desabilitar acesso público e usar acesso privado
-- **Private endpoints**: Permite uma conexão privada para a storage account a partir de uma virtual network
+- Allow from all networks
+- Allow from selected virtual networks and IP addresses
+- Disable public access and use private access
+- **Private endpoints**: It allows a private connection to the storage account from a virtual network
-**Opções de proteção de dados**:
+**Data protection options**:
-- **Point-in-time restore for containers**: Permite restaurar containers para um estado anterior
-- Requer que versioning, change feed e blob soft delete estejam habilitados.
-- **Enable soft delete for blobs**: Habilita um período de retenção em dias para blobs deletados (inclusive sobrescritos)
-- **Enable soft delete for containers**: Habilita um período de retenção em dias para containers deletados
-- **Enable soft delete for file shares**: Habilita um período de retenção em dias para file shared deletados
-- **Enable versioning for blobs**: Mantém versões anteriores dos seus blobs
-- **Enable blob change feed**: Mantém logs de create, modification e delete changes para blobs
-- **Enable version-level immutability support**: Permite definir uma política de retenção baseada em tempo no nível da account que será aplicada a todas as versões de blob.
-- Version-level immutability support e point-in-time restore for containers não podem ser habilitados simultaneamente.
+- **Point-in-time restore for containers**: Allows to restore containers to an earlier state
+- It requires versioning, change feed, and blob soft delete to be enabled.
+- **Enable soft delete for blobs**: It enables a retention period in days for deleted blobs (even overwritten)
+- **Enable soft delete for containers**: It enables a retention period in days for deleted containers
+- **Enable soft delete for file shares**: It enables a retention period in days for deleted file shared
+- **Enable versioning for blobs**: Maintain previous versions of your blobs
+- **Enable blob change feed**: Keep logs of create, modification, and delete changes to blobs
+- **Enable version-level immutability support**: Allows you to set time-based retention policy on the account-level that will apply to all blob versions.
+- Version-level immutability support and point-in-time restore for containers cannot be enabled simultaneously.
-**Opções de configuração de encryption**:
+**Encryption configuration options**:
-- **Encryption type**: É possível usar Microsoft-managed keys (MMK) ou Customer-managed keys (CMK)
-- **Enable infrastructure encryption**: Permite dupla encryption dos dados "for more security"
+- **Encryption type**: It's possible to use Microsoft-managed keys (MMK) or Customer-managed keys (CMK)
+- **Enable infrastructure encryption**: Allows to double encrypt the data "for more security"
### Storage endpoints
@@ -64,10 +64,10 @@ Azure Storage Accounts são serviços fundamentais no Microsoft Azure que fornec
### Public Exposure
-Se "Allow Blob public access" estiver **habilitado** (desabilitado por padrão), ao criar um container é possível:
+Se "Allow Blob public access" estiver **enabled** (disabled by default), ao criar um container é possível:
-- Dar **public access para ler blobs** (você precisa saber o nome).
-- **Listar blobs do container** e **lê-los**.
+- Dar **public access to read blobs** (você precisa saber o nome).
+- **List container blobs** e **read** them.
- Torná-lo totalmente **private**
@@ -89,17 +89,17 @@ az storage blob download -c '$web' --name iac/terraform.tfvars --file /dev/stdou
```
### Auditing anonymous blob exposure
-- **Localizar contas de storage** que podem expor dados: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. Se `allowBlobPublicAccess` for `false` você não pode tornar containers públicos.
-- **Inspecionar contas arriscadas** para confirmar a flag e outras configurações fracas: `az storage account show --name --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`.
-- **Enumerar exposição no nível de container** onde a flag está habilitada:
+- **Localize storage accounts** that can expose data: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. Se `allowBlobPublicAccess` for `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:
```bash
az storage container list --account-name \
--query '[].{name:name, access:properties.publicAccess}'
```
- `"Blob"`: leituras anônimas permitidas **somente quando o nome do blob é conhecido** (sem listagem).
-- `"Container"`: **listagem anônima + leitura** de cada blob.
-- `null`: privado; autenticação necessária.
-- **Prove access** sem credenciais:
+- `"Container"`: **list + read** anônimos de cada blob.
+- `null`: privado; autenticação é necessária.
+- **Comprove acesso** sem credenciais:
- Se `publicAccess` for `Container`, a listagem anônima funciona: `curl "https://.blob.core.windows.net/?restype=container&comp=list"`.
- Para ambos `Blob` e `Container`, o download anônimo do blob funciona quando o nome é conhecido:
```bash
@@ -107,33 +107,33 @@ az storage blob download -c -n --account-name --file /d
# or via raw HTTP
curl "https://.blob.core.windows.net//"
```
-### Conectar-se ao Storage
+### Connect to Storage
-Se você encontrar qualquer **storage** ao qual possa se conectar, pode usar a ferramenta [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) para isso.
+Se você encontrar qualquer **storage** ao qual possa se conectar, você pode usar a ferramenta [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) para fazer isso.
## Access to Storage
### RBAC
-É possível usar principais do Entra ID com **RBAC roles** para acessar storage accounts, e essa é a forma recomendada.
+É possível usar principals do Entra ID com **RBAC roles** para acessar storage accounts, e essa é a forma recomendada.
### Access Keys
-As storage accounts têm access keys que podem ser usadas para acessá-las. Isso fornece f**ull access to the storage account.**
+As storage accounts têm access keys que podem ser usadas para acessá-las. Isso fornece acesso **total à storage account.**
### **Shared Keys & Lite Shared Keys**
-É possível [**generate Shared Keys**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) assinadas com as access keys para autorizar acesso a determinados recursos por meio de uma signed URL.
+É possível [**generate Shared Keys**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) assinadas com as access keys para autorizar acesso a certos recursos via uma signed URL.
> [!NOTE]
-> Observe que a parte `CanonicalizedResource` representa o recurso dos storage services (URI). E, se qualquer parte da URL estiver encoded, ela também deve ser encoded dentro de `CanonicalizedResource`.
+> Note que a parte `CanonicalizedResource` representa o resource (URI) dos storage services. E se qualquer parte da URL estiver encoded, ela também deve estar encoded dentro de `CanonicalizedResource`.
> [!NOTE]
-> Isso é **used by default by `az` cli** para autenticar requests. Para fazê-lo usar as credenciais do principal do Entra ID, indique o parâmetro `--auth-mode login`.
+> Isso é **used by default by `az` cli** para autenticar requests. Para fazer com que ele use as credentials do principal do Entra ID, indique o param `--auth-mode login`.
-- É possível generate uma **shared key para blob, queue and file services** assinando as seguintes informações:
+- É possível gerar uma **shared key para os serviços blob, queue e file** assinando as seguintes informações:
```bash
StringToSign = VERB + "\n" +
Content-Encoding + "\n" +
@@ -158,7 +158,7 @@ Content-Type + "\n" +
Date + "\n" +
CanonicalizedResource;
```
-- É possível gerar uma **lite shared key for blob, queue and file services** assinando a seguinte informação:
+- É possível gerar uma **lite shared key for blob, queue and file services** assinando as seguintes informações:
```bash
StringToSign = VERB + "\n" +
Content-MD5 + "\n" +
@@ -167,7 +167,7 @@ Date + "\n" +
CanonicalizedHeaders +
CanonicalizedResource;
```
-- É possível gerar uma **lite shared key for table services** assinando as seguintes informações:
+- É possível gerar uma **lite shared key para table services** assinando a seguinte informação:
```bash
StringToSign = Date + "\n"
CanonicalizedResource
@@ -186,14 +186,14 @@ Content-Length: 0
```
### **Shared Access Signature** (SAS)
-Shared Access Signatures (SAS) são URLs seguras e com tempo limitado que **concedem permissões específicas para acessar recursos** em uma conta de Azure Storage sem expor as chaves de acesso da conta. Enquanto as access keys fornecem acesso administrativo completo a todos os recursos, SAS permite controle granular ao especificar permissões (como read ou write) e definir um tempo de expiração.
+Shared Access Signatures (SAS) são URLs seguras e limitadas por tempo que **concedem permissões específicas para acessar resources** em uma Azure Storage account sem expor as access keys da conta. Enquanto as access keys fornecem acesso administrativo total a todos os resources, SAS permite controle granular ao especificar permissões (como read ou write) e definir um tempo de expiração.
#### SAS Types
-- **User delegation SAS**: É criado a partir de um **Entra ID principal** que assinará o SAS e delegará as permissões do usuário para o SAS. Só pode ser usado com **blob and data lake storage** ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). É possível **revogar** todos os user delegated SAS gerados.
-- Mesmo sendo possível gerar um delegation SAS com permissões "maiores" do que as que o usuário possui. No entanto, se o principal não tiver essas permissões, não funcionará (sem privesc).
-- **Service SAS**: É assinado usando uma das **access keys** da storage account. Pode ser usado para conceder acesso a recursos específicos em um único storage service. Se a chave for renovada, o SAS deixará de funcionar.
-- **Account SAS**: Também é assinado com uma das **access keys** da storage account. Concede acesso a recursos em serviços de uma storage account (Blob, Queue, Table, File) e pode incluir operações em nível de serviço.
+- **User delegation SAS**: Isso é criado a partir de um **Entra ID principal** que assinará o SAS e delegará as permissões do user para o SAS. Só pode ser usado com **blob and data lake storage** ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). É possível **revogar** todos os user delegated SAS gerados.
+- Mesmo que seja possível gerar um delegation SAS com permissões "maiores" do que as que o user tem. No entanto, se o principal não as tiver, isso não funcionará (no privesc).
+- **Service SAS**: É assinado usando uma das **access keys** da storage account. Pode ser usado para conceder acesso a resources específicos em um único storage service. Se a key for renovada, o SAS deixará de funcionar.
+- **Account SAS**: Também é assinado com uma das **access keys** da storage account. Concede acesso a resources entre os serviços da storage account (Blob, Queue, Table, File) e pode incluir operações em nível de service.
Uma SAS URL assinada por uma **access key** se parece com isto:
@@ -203,11 +203,11 @@ Uma SAS URL assinada como **user delegation** se parece com isto:
- `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`
-Observe alguns **http params**:
+Note alguns **http params**:
-- O parâmetro **`se`** indica a **data de expiração** do SAS
-- O parâmetro **`sp`** indica as **permissões** do SAS
-- O **`sig`** é a **assinatura** que valida o SAS
+- O param **`se`** indica a **data de expiração** do SAS
+- O param **`sp`** indica as **permissões** do SAS
+- O **`sig`** é a **signature** que valida o SAS
#### SAS permissions
@@ -217,16 +217,16 @@ Ao gerar um SAS, é necessário indicar as permissões que ele deve conceder. De
## SFTP Support for Azure Blob Storage
-Azure Blob Storage agora suporta o SSH File Transfer Protocol (SFTP), permitindo transferência e gerenciamento seguros de arquivos diretamente para o Blob Storage sem exigir soluções personalizadas ou produtos de terceiros.
+Azure Blob Storage agora suporta o SSH File Transfer Protocol (SFTP), permitindo transferência segura de arquivos e gerenciamento diretamente para Blob Storage sem exigir soluções personalizadas ou produtos de terceiros.
### Key Features
-- Protocol Support: SFTP funciona com contas de Blob Storage configuradas com hierarchical namespace (HNS). Isso organiza blobs em diretórios e subdiretórios para facilitar a navegação.
-- Security: SFTP usa identidades de usuários locais para autenticação e não se integra com RBAC ou ABAC. Cada usuário local pode autenticar via:
+- Protocol Support: SFTP funciona com Blob Storage accounts configuradas com hierarchical namespace (HNS). Isso organiza blobs em directories e subdirectories para facilitar a navegação.
+- Security: SFTP pode usar local user identities, mas também suporta acesso baseado em Microsoft Entra ID com Azure RBAC para autorização. Isso significa que o acesso pode ser concedido com os roles de Blob Storage data-plane usuais, em vez de criar local SFTP users. Local users podem autenticar via:
- Azure-generated passwords
- Public-private SSH key pairs
-- Granular Permissions: Permissões como Read, Write, Delete e List podem ser atribuídas a usuários locais para até 100 containers.
-- Networking Considerations: Conexões SFTP são feitas pela porta 22. Azure suporta configurações de rede como firewalls, private endpoints ou virtual networks para proteger o tráfego SFTP.
+- Granular Permissions: Permissões como Read, Write, Delete e List podem ser atribuídas a local users para até 100 containers.
+- Networking Considerations: Conexões SFTP são feitas pela porta 22. Azure suporta configurações de network como firewalls, private endpoints ou virtual networks para proteger o tráfego SFTP.
### Setup Requirements
@@ -234,20 +234,20 @@ Azure Blob Storage agora suporta o SSH File Transfer Protocol (SFTP), permitindo
- Supported Encryption: Requer algoritmos criptográficos aprovados pelo Microsoft Security Development Lifecycle (SDL) (por exemplo, rsa-sha2-256, ecdsa-sha2-nistp256).
- SFTP Configuration:
- Habilite SFTP na storage account.
-- Crie identidades de usuários locais com permissões apropriadas.
-- Configure home directories para os usuários definirem sua localização inicial dentro do container.
+- Para acesso de local-user, crie local user identities com as permissões apropriadas.
+- Para local users, configure home directories para definir sua localização inicial dentro do container.
### Permissions
| Permission | Symbol | Description |
| ---------------------- | ------ | ------------------------------------ |
-| **Read** | `r` | Ler conteúdo do arquivo. |
-| **Write** | `w` | Fazer upload de arquivos e criar diretórios. |
-| **List** | `l` | Listar conteúdos de diretórios. |
-| **Delete** | `d` | Excluir arquivos ou diretórios. |
-| **Create** | `c` | Criar arquivos ou diretórios. |
-| **Modify Ownership** | `o` | Alterar o usuário ou grupo proprietário. |
-| **Modify Permissions** | `p` | Alterar ACLs em arquivos ou diretórios. |
+| **Read** | `r` | Read file content. |
+| **Write** | `w` | Upload files and create directories. |
+| **List** | `l` | List contents of directories. |
+| **Delete** | `d` | Delete files or directories. |
+| **Create** | `c` | Create files or directories. |
+| **Modify Ownership** | `o` | Change the owning user or group. |
+| **Modify Permissions** | `p` | Change ACLs on files or directories. |
## Enumeration
@@ -379,7 +379,7 @@ az storage account local-user list \
{{#tab name="Az PowerShell" }}
-Enumeração Az PowerShell
+Enumeração do Az PowerShell
```powershell
# Get storage accounts
Get-AzStorageAccount | fl
@@ -442,35 +442,36 @@ New-AzStorageBlobSASToken `
{{#endtab }}
{{#endtabs }}
-### File Shares
+### Compartilhamentos de Arquivos
{{#ref}}
az-file-shares.md
{{#endref}}
-## Privilege Escalation
+## Escalação de Privilégio
{{#ref}}
../az-privilege-escalation/az-storage-privesc.md
{{#endref}}
-## Post Exploitation
+## Pós-Exploitation
{{#ref}}
../az-post-exploitation/az-blob-storage-post-exploitation.md
{{#endref}}
-## Persistence
+## Persistência
{{#ref}}
../az-persistence/az-storage-persistence.md
{{#endref}}
-## References
+## Referências
- [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)