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 c769598fd..6076a8ea5 100644
--- a/src/pentesting-cloud/azure-security/az-services/az-storage.md
+++ b/src/pentesting-cloud/azure-security/az-services/az-storage.md
@@ -4,94 +4,114 @@
## Informazioni di base
-Gli Azure Storage Accounts sono servizi fondamentali in Microsoft Azure che forniscono **storage cloud scalabile, sicuro e altamente disponibile per vari tipi di dati**, inclusi blob (oggetti binari di grandi dimensioni), file, code e tabelle. Servono come contenitori che raggruppano questi diversi servizi di storage sotto un unico namespace per una gestione facile.
+Azure Storage Accounts sono servizi fondamentali in Microsoft Azure che forniscono storage cloud scalabile, sicuro e altamente disponibile per vari tipi di dati, inclusi blobs (oggetti binari di grandi dimensioni), file, queue e table. Servono come contenitori che raggruppano questi diversi servizi di storage sotto un unico namespace per una gestione semplice.
-**Opzioni di configurazione principali**:
+**Principali opzioni di configurazione**:
-- Ogni storage account deve avere un **nome unico in tutti gli Azure**.
+- Ogni storage account deve avere un **nome univoco in tutto Azure**.
- Ogni storage account è distribuito in una **regione** o in una zona estesa di Azure.
- È possibile selezionare la versione **premium** dello storage account per migliori prestazioni.
-- È possibile scegliere tra **4 tipi di ridondanza per proteggere** contro guasti di rack, disco e datacenter.
+- È possibile scegliere tra **4 tipi di ridondanza per proteggere** da guasti a livello di rack, disco e datacenter.
**Opzioni di configurazione della sicurezza**:
-- **Richiedere trasferimento sicuro per le operazioni API REST**: Richiedere TLS in qualsiasi comunicazione con lo storage.
-- **Consente di abilitare l'accesso anonimo su contenitori individuali**: In caso contrario, non sarà possibile abilitare l'accesso anonimo in futuro.
-- **Abilitare l'accesso con chiave dello storage account**: In caso contrario, l'accesso con chiavi condivise sarà vietato.
-- **Versione minima TLS**.
-- **Ambito consentito per le operazioni di copia**: Consenti da qualsiasi storage account, da qualsiasi storage account dello stesso tenant Entra o da storage account con endpoint privati nella stessa rete virtuale.
+- **Require secure transfer for REST API operations**: Richiede TLS in qualsiasi comunicazione con lo storage.
+- **Allows enabling anonymous access on individual containers**: Se disabilitato, non sarà possibile abilitare l'accesso anonimo in futuro.
+- **Enable storage account key access**: Se disabilitato, l'accesso con Shared Keys sarà proibito.
+- **Minimum TLS version**
+- **Permitted scope for copy operations**: Permette da qualsiasi storage account, da qualsiasi storage account dello stesso Entra tenant o da storage account con private endpoints nella stessa virtual network.
-**Opzioni di Blob Storage**:
+**Opzioni Blob Storage**:
-- **Consenti replicazione cross-tenant**.
-- **Livello di accesso**: Hot (dati accessibili frequentemente), Cool e Cold (dati raramente accessibili).
+- **Allow cross-tenant replication**
+- **Access tier**: Hot (dati accessati frequentemente), Cool e Cold (dati raramente accessati)
-**Opzioni di rete**:
+**Opzioni di networking**:
-- **Accesso di rete**:
-- Consenti da tutte le reti.
-- Consenti da reti virtuali e indirizzi IP selezionati.
-- Disabilita l'accesso pubblico e utilizza l'accesso privato.
-- **Endpoint privati**: Consente una connessione privata allo storage account da una rete virtuale.
+- **Network access**:
+- Allow from all networks
+- Allow from selected virtual networks and IP addresses
+- Disable public access and use private access
+- **Private endpoints**: Permette una connessione privata allo storage account da una virtual network
**Opzioni di protezione dei dati**:
-- **Ripristino point-in-time per contenitori**: Consente di ripristinare i contenitori a uno stato precedente.
-- Richiede versioning, change feed e blob soft delete per essere abilitati.
-- **Abilitare soft delete per i blob**: Abilita un periodo di retention in giorni per i blob eliminati (anche sovrascritti).
-- **Abilitare soft delete per i contenitori**: Abilita un periodo di retention in giorni per i contenitori eliminati.
-- **Abilitare soft delete per le condivisioni di file**: Abilita un periodo di retention in giorni per le condivisioni di file eliminate.
-- **Abilitare versioning per i blob**: Mantieni le versioni precedenti dei tuoi blob.
-- **Abilitare blob change feed**: Tieni traccia dei log di creazione, modifica ed eliminazione dei blob.
-- **Abilitare il supporto per l'immutabilità a livello di versione**: Consente di impostare una politica di retention basata sul tempo a livello di account che si applicherà a tutte le versioni dei blob.
-- Il supporto per l'immutabilità a livello di versione e il ripristino point-in-time per i contenitori non possono essere abilitati simultaneamente.
+- **Point-in-time restore for containers**: Consente di ripristinare i container a uno stato precedente.
+- Richiede l'abilitazione di versioning, change feed e blob soft delete.
+- **Enable soft delete for blobs**: Abilita un periodo di retention (in giorni) per i blob eliminati (anche sovrascritti).
+- **Enable soft delete for containers**: Abilita un periodo di retention (in giorni) per i container eliminati.
+- **Enable soft delete for file shares**: Abilita un periodo di retention (in giorni) per i file share eliminati.
+- **Enable versioning for blobs**: Mantiene versioni precedenti dei tuoi blob.
+- **Enable blob change feed**: Conserva log di create, modification e delete dei blob.
+- **Enable version-level immutability support**: Consente di impostare una policy di retention basata sul tempo a livello di account che si applicherà a tutte le versioni dei blob.
+- Version-level immutability support e point-in-time restore for containers non possono essere abilitati simultaneamente.
-**Opzioni di configurazione della crittografia**:
+**Opzioni di crittografia**:
-- **Tipo di crittografia**: È possibile utilizzare chiavi gestite da Microsoft (MMK) o chiavi gestite dal cliente (CMK).
-- **Abilitare la crittografia dell'infrastruttura**: Consente di crittografare i dati "per maggiore sicurezza".
+- **Encryption type**: È possibile usare Microsoft-managed keys (MMK) o Customer-managed keys (CMK).
+- **Enable infrastructure encryption**: Permette di cifrare i dati due volte "per maggiore sicurezza".
-### Endpoint di storage
+### Storage endpoints
-
### Esposizione pubblica
-Se "Consenti accesso pubblico ai blob" è **abilitato** (disabilitato per impostazione predefinita), durante la creazione di un contenitore è possibile:
+Se "Allow Blob public access" è **enabled** (disabled by default), quando si crea un container è possibile:
-- Dare **accesso pubblico per leggere i blob** (è necessario conoscere il nome).
-- **Elencare i blob del contenitore** e **leggerli**.
-- Renderlo completamente **privato**.
+- Dare **accesso pubblico in lettura ai blob** (è necessario conoscere il nome).
+- **Listare i blob del container** e **leggerli**.
+- Rendersi completamente **privato**.
-### Connettersi allo Storage
+#### Auditing anonymous blob exposure
-Se trovi qualche **storage** a cui puoi connetterti, puoi utilizzare lo strumento [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) per farlo.
+- **Individuare gli storage accounts** che possono esporre dati: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. Se `allowBlobPublicAccess` è `false` non puoi rendere i container pubblici.
+- **Ispezionare gli account a rischio** per confermare il flag e altre impostazioni deboli: `az storage account show --name --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`.
+- **Enumerare l'esposizione a livello di container** dove il flag è abilitato:
+```bash
+az storage container list --account-name \
+--query '[].{name:name, access:properties.publicAccess}'
+```
+- `"Blob"`: letture anonime consentite **solo quando il nome del blob è noto** (nessuna enumerazione).
+- `"Container"`: anonimo **elenco + lettura** di ogni blob.
+- `null`: privato; autenticazione richiesta.
+- **Dimostrare l'accesso** senza credenziali:
+- Se `publicAccess` è `Container`, l'elenco anonimo funziona: `curl "https://.blob.core.windows.net/?restype=container&comp=list"`.
+- Per entrambi `Blob` e `Container`, il download anonimo del blob funziona quando il nome è noto:
+```bash
+az storage blob download -c -n --account-name --file /dev/stdout
+# or via raw HTTP
+curl "https://.blob.core.windows.net//"
+```
+### Connettersi allo storage
-## Accesso allo Storage
+Se trovi uno **storage** a cui puoi connetterti, puoi usare lo strumento [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) per farlo.
+
+## Accesso allo storage
### RBAC
-È possibile utilizzare i principi di Entra ID con **ruoli RBAC** per accedere agli storage account ed è il modo raccomandato.
+È possibile usare i principal di Entra ID con i **ruoli RBAC** per accedere agli storage accounts ed è il metodo raccomandato.
### Chiavi di accesso
-Gli storage account hanno chiavi di accesso che possono essere utilizzate per accedervi. Questo fornisce **accesso completo allo storage account.**
+Gli account di storage dispongono di chiavi di accesso che possono essere usate per accederci. Questo fornisce l'**accesso completo all'account di storage.**
-### **Chiavi condivise & Chiavi condivise Lite**
+### **Shared Keys & Lite Shared Keys**
-È possibile [**generare Chiavi Condivise**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) firmate con le chiavi di accesso per autorizzare l'accesso a determinate risorse tramite un URL firmato.
+È possibile [**generare Shared Keys**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) firmate con le chiavi di accesso per autorizzare l'accesso a risorse specifiche tramite una URL firmata.
> [!NOTE]
-> Nota che la parte `CanonicalizedResource` rappresenta la risorsa dei servizi di storage (URI). E se qualche parte nell'URL è codificata, dovrebbe essere codificata anche all'interno del `CanonicalizedResource`.
+> Nota che la parte `CanonicalizedResource` rappresenta la risorsa del servizio di storage (URI). E se qualsiasi parte dell'URL è encoded, dovrebbe essere codificata anche dentro il `CanonicalizedResource`.
> [!NOTE]
-> Questo è **utilizzato per impostazione predefinita da `az` cli** per autenticare le richieste. Per farlo utilizzare le credenziali del principale Entra ID, indica il parametro `--auth-mode login`.
+> Questo è **usato di default dalla `az` cli** per autenticare le richieste. Per farla usare le credenziali del principal Entra ID indica il parametro `--auth-mode login`.
-- È possibile generare una **chiave condivisa per i servizi blob, queue e file** firmando le seguenti informazioni:
+- È possibile generare una **shared key per i servizi blob, queue e file** firmando le seguenti informazioni:
```bash
StringToSign = VERB + "\n" +
Content-Encoding + "\n" +
@@ -108,7 +128,7 @@ Range + "\n" +
CanonicalizedHeaders +
CanonicalizedResource;
```
-- È possibile generare una **chiave condivisa per i servizi di tabella** firmando le seguenti informazioni:
+- È possibile generare una **shared key for table services** firmando le seguenti informazioni:
```bash
StringToSign = VERB + "\n" +
Content-MD5 + "\n" +
@@ -116,7 +136,7 @@ Content-Type + "\n" +
Date + "\n" +
CanonicalizedResource;
```
-- È possibile generare una **lite shared key per i servizi blob, queue e file** firmando le seguenti informazioni:
+- È possibile generare una **lite shared key for blob, queue and file services** firmando le seguenti informazioni:
```bash
StringToSign = VERB + "\n" +
Content-MD5 + "\n" +
@@ -130,7 +150,7 @@ CanonicalizedResource;
StringToSign = Date + "\n"
CanonicalizedResource
```
-Quindi, per utilizzare la chiave, può essere fatto nell'intestazione Authorization seguendo la sintassi:
+Quindi, per usare la chiave, si può inserirla nell'header Authorization seguendo la sintassi:
```bash
Authorization="[SharedKey|SharedKeyLite] :"
#e.g.
@@ -144,73 +164,76 @@ Content-Length: 0
```
### **Shared Access Signature** (SAS)
-Le Shared Access Signatures (SAS) sono URL sicuri e limitati nel tempo che **concedono permessi specifici per accedere a risorse** in un account di Azure Storage senza esporre le chiavi di accesso dell'account. Mentre le chiavi di accesso forniscono accesso amministrativo completo a tutte le risorse, la SAS consente un controllo granulare specificando i permessi (come lettura o scrittura) e definendo un tempo di scadenza.
+Shared Access Signatures (SAS) sono URL sicuri e limitati nel tempo che **concedono permessi specifici per accedere alle risorse** in un Azure Storage account senza esporre le access keys dell'account. Mentre le access keys forniscono accesso amministrativo completo a tutte le risorse, SAS permette un controllo granulare specificando i permessi (come read o write) e definendo un tempo di scadenza.
-#### Tipi di SAS
+#### SAS Types
-- **User delegation SAS**: Questa viene creata da un **Entra ID principal** che firmerà la SAS e delega i permessi dall'utente alla SAS. Può essere utilizzata solo con **blob e data lake storage** ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). È possibile **revocare** tutte le SAS delegate generate dall'utente.
-- Anche se è possibile generare una SAS di delega con "più" permessi di quelli che l'utente ha. Tuttavia, se il principal non li ha, non funzionerà (no privesc).
-- **Service SAS**: Questa è firmata utilizzando una delle **chiavi di accesso** dell'account di storage. Può essere utilizzata per concedere accesso a risorse specifiche in un singolo servizio di storage. Se la chiave viene rinnovata, la SAS smetterà di funzionare.
-- **Account SAS**: È anch'essa firmata con una delle **chiavi di accesso** dell'account di storage. Concede accesso a risorse attraverso i servizi di un account di storage (Blob, Queue, Table, File) e può includere operazioni a livello di servizio.
+- **User delegation SAS**: Viene creato da un **Entra ID principal** che firmerà la SAS e delegherà i permessi dall'utente alla SAS. Può essere utilizzato solo con **blob and data lake storage** ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). È possibile **revocare** tutte le user delegated SAS generate.
+- È possibile generare una delegation SAS con permessi "maggiori" rispetto a quelli dell'utente. Tuttavia, se il principal non li possiede, non funzionerà (no privesc).
+- **Service SAS**: È firmata usando una delle storage account **access keys**. Può essere usata per concedere accesso a risorse specifiche in un singolo servizio di storage. Se la key viene rinnovata, la SAS smetterà di funzionare.
+- **Account SAS**: Anch'essa è firmata con una delle storage account **access keys**. Concede accesso a risorse attraverso i servizi dell'account di storage (Blob, Queue, Table, File) e può includere operazioni a livello di servizio.
-Un URL SAS firmato da una **chiave di accesso** appare così:
+A SAS URL signed by an **access key** looks like this:
- `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`
-Un URL SAS firmato come **user delegation** appare così:
+A SAS URL signed as a **user delegation** looks like this:
- `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`
-Nota alcuni **parametri http**:
+Note some **http params**:
- Il parametro **`se`** indica la **data di scadenza** della SAS
- Il parametro **`sp`** indica i **permessi** della SAS
-- Il **`sig`** è la **firma** che convalida la SAS
+- Il **`sig`** è la **signature** che valida la SAS
-#### Permessi SAS
+#### SAS permissions
-Quando si genera una SAS è necessario indicare i permessi che dovrebbe concedere. A seconda dell'oggetto su cui viene generata la SAS, potrebbero essere inclusi permessi diversi. Ad esempio:
+Quando si genera una SAS è necessario indicare i permessi che deve concedere. A seconda dell'oggetto su cui la SAS viene generata, possono essere inclusi permessi differenti. Per esempio:
- (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
-## Supporto SFTP per Azure Blob Storage
+## SFTP Support for Azure Blob Storage
-Azure Blob Storage ora supporta il protocollo SSH File Transfer Protocol (SFTP), consentendo il trasferimento e la gestione sicura dei file direttamente su Blob Storage senza richiedere soluzioni personalizzate o prodotti di terze parti.
+Azure Blob Storage ora supporta lo SSH File Transfer Protocol (SFTP), permettendo il trasferimento e la gestione sicuri dei file direttamente su Blob Storage senza richiedere soluzioni custom o prodotti di terze parti.
-### Caratteristiche principali
+### Key Features
-- Supporto del protocollo: SFTP funziona con gli account di Blob Storage configurati con namespace gerarchico (HNS). Questo organizza i blob in directory e sottodirectory per una navigazione più semplice.
-- Sicurezza: SFTP utilizza identità utente locali per l'autenticazione e non si integra con RBAC o ABAC. Ogni utente locale può autenticarsi tramite:
-- Password generate da Azure
-- Coppie di chiavi SSH pubbliche-private
-- Permessi granulari: Permessi come Lettura, Scrittura, Cancellazione e Elenco possono essere assegnati agli utenti locali per un massimo di 100 contenitori.
-- Considerazioni di rete: Le connessioni SFTP vengono effettuate tramite la porta 22. Azure supporta configurazioni di rete come firewall, endpoint privati o reti virtuali per proteggere il traffico SFTP.
+- Protocol Support: SFTP funziona con account Blob Storage configurati con hierarchical namespace (HNS). Questo organizza i blob in directory e sottodirectory per una navigazione più semplice.
+- Security: SFTP usa identità utente locali per l'autenticazione e non si integra con RBAC o ABAC. Ogni utente locale può autenticarsi tramite:
+- Azure-generated passwords
+- Public-private SSH key pairs
+- Granular Permissions: Permessi come Read, Write, Delete e List possono essere assegnati agli utenti locali per fino a 100 container.
+- Networking Considerations: Le connessioni SFTP avvengono tramite la porta 22. Azure supporta configurazioni di rete come firewall, private endpoints o virtual networks per proteggere il traffico SFTP.
-### Requisiti di configurazione
+### Setup Requirements
-- Namespace gerarchico: L'HNS deve essere abilitato durante la creazione dell'account di storage.
-- Crittografia supportata: Richiede algoritmi crittografici approvati dal Microsoft Security Development Lifecycle (SDL) (ad es., rsa-sha2-256, ecdsa-sha2-nistp256).
-- Configurazione SFTP:
+- Hierarchical Namespace: HNS deve essere abilitato durante la creazione dell'account di storage.
+- Supported Encryption: Richiede algoritmi crittografici approvati dal Microsoft Security Development Lifecycle (SDL) (es. rsa-sha2-256, ecdsa-sha2-nistp256).
+- SFTP Configuration:
- Abilitare SFTP sull'account di storage.
- Creare identità utente locali con permessi appropriati.
-- Configurare le directory home per gli utenti per definire la loro posizione di partenza all'interno del contenitore.
+- Configurare le home directory per gli utenti per definire la loro posizione iniziale all'interno del container.
-### Permessi
+### Permissions
-| Permesso | Simbolo | Descrizione |
-| --------------------- | ------- | ------------------------------------ |
-| **Lettura** | `r` | Leggi il contenuto del file. |
-| **Scrittura** | `w` | Carica file e crea directory. |
-| **Elenco** | `l` | Elenca i contenuti delle directory. |
-| **Cancellazione** | `d` | Cancella file o directory. |
-| **Creazione** | `c` | Crea file o directory. |
-| **Modifica proprietà**| `o` | Cambia l'utente o il gruppo proprietario. |
-| **Modifica permessi** | `p` | Cambia le ACL su file o directory. |
+| Permesso | Simbolo | Descrizione |
+| ---------------------- | ------ | ------------------------------------ |
+| **Read** | `r` | Legge il contenuto del file. |
+| **Write** | `w` | Carica file e crea directory. |
+| **List** | `l` | Elenca il contenuto delle directory. |
+| **Delete** | `d` | Elimina file o directory. |
+| **Create** | `c` | Crea file o directory. |
+| **Modify Ownership** | `o` | Modifica l'utente o il gruppo proprietario. |
+| **Modify Permissions** | `p` | Modifica le ACL su file o directory. |
## Enumerazione
{{#tabs }}
{{#tab name="az cli" }}
+
+
+az cli enumerazione
```bash
# Get storage accounts
az storage account list #Get the account name from here
@@ -327,10 +350,15 @@ az storage account local-user list \
--account-name \
--resource-group
```
+
+
{{#endtab }}
{{#tab name="Az PowerShell" }}
-```bash
+
+
+Az PowerShell enumerazione
+```powershell
# Get storage accounts
Get-AzStorageAccount | fl
# Get rules to access the storage account
@@ -387,16 +415,18 @@ New-AzStorageBlobSASToken `
-Permission racwdl `
-ExpiryTime (Get-Date "2024-12-31T23:59:00Z")
```
+
+
{{#endtab }}
{{#endtabs }}
-### Condivisioni di File
+### Condivisioni di file
{{#ref}}
az-file-shares.md
{{#endref}}
-## Escalation dei Privilegi
+## Privilege Escalation
{{#ref}}
../az-privilege-escalation/az-storage-privesc.md
@@ -408,7 +438,7 @@ az-file-shares.md
../az-post-exploitation/az-blob-storage-post-exploitation.md
{{#endref}}
-## Persistenza
+## Persistence
{{#ref}}
../az-persistence/az-storage-persistence.md
@@ -419,5 +449,9 @@ 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: 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)
+- [https://learn.microsoft.com/en-us/cli/azure/storage/blob](https://learn.microsoft.com/en-us/cli/azure/storage/blob)
{{#include ../../../banners/hacktricks-training.md}}