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 9f7073d91..e4605728d 100644
--- a/src/pentesting-cloud/azure-security/az-services/az-storage.md
+++ b/src/pentesting-cloud/azure-security/az-services/az-storage.md
@@ -4,52 +4,52 @@
## Informazioni di base
-Azure Storage Accounts sono servizi fondamentali in Microsoft Azure che forniscono cloud **storage scalabile, sicuro e altamente disponibile per vari tipi di dati**, inclusi blobs (binary large objects), files, queues e tables. Funzionano come container che raggruppano insieme questi diversi servizi di storage sotto un unico namespace per una gestione semplice.
+Azure Storage Accounts sono servizi fondamentali in Microsoft Azure che forniscono cloud **storage scalabile, sicuro e altamente disponibile per vari tipi di dati**, inclusi blobs (binary large objects), files, queues e tables. Funzionano come contenitori che raggruppano insieme questi diversi storage services sotto un unico namespace per una facile gestione.
**Opzioni principali di configurazione**:
- Ogni storage account deve avere un **nome univoco in tutto Azure**.
-- Ogni storage account è distribuito in una **region** o in una Azure extended zone
-- È possibile selezionare la versione **premium** dello storage account per migliori prestazioni
-- È possibile scegliere tra **4 tipi di redundancy per proteggersi** da rack, drive e datacenter **failures**.
+- Ogni storage account viene distribuito in una **region** o in una Azure extended zone
+- È possibile selezionare la versione **premium** dello storage account per prestazioni migliori
+- È possibile scegliere tra **4 tipi di redundancy per proteggersi** da failure di rack, drive e datacenter.
**Opzioni di configurazione della sicurezza**:
- **Require secure transfer for REST API operations**: Richiede TLS in qualsiasi comunicazione con lo storage
-- **Allows enabling anonymous access on individual containers**: In caso contrario, in futuro non sarà possibile abilitare l'accesso anonimo
+- **Allows enabling anonymous access on individual containers**: In caso contrario, non sarà possibile abilitare l'anonimous access in futuro
- **Enable storage account key access**: In caso contrario, l'accesso con Shared Keys sarà vietato
- **Minimum TLS version**
-- **Permitted scope for copy operations**: Consenti da qualsiasi storage account, da qualsiasi storage account dello stesso tenant Entra oppure da storage account con private endpoints nella stessa virtual network.
+- **Permitted scope for copy operations**: Consenti da qualsiasi storage account, da qualsiasi storage account dello stesso tenant Entra o da storage account con private endpoints nella stessa virtual network.
-**Opzioni Blob Storage**:
+**Opzioni di Blob Storage**:
- **Allow cross-tenant replication**
-- **Access tier**: Hot (dati accessati frequentemente), Cool e Cold (dati accessati raramente)
+- **Access tier**: Hot (dati accessati frequentemente), Cool e Cold (raramente accessati)
**Opzioni di networking**:
- **Network access**:
-- Consenti da tutte le networks
-- Consenti da virtual networks e indirizzi IP selezionati
-- Disabilita l'accesso pubblico e usa accesso privato
+- Consenti da tutte le network
+- Consenti da selezionate virtual networks e indirizzi IP
+- Disabilita l'accesso pubblico e usa l'accesso privato
- **Private endpoints**: Consente una connessione privata allo storage account da una virtual network
**Opzioni di protezione dei dati**:
-- **Point-in-time restore for containers**: Consente di ripristinare i container a uno stato precedente
+- **Point-in-time restore for containers**: Consente di ripristinare i containers a uno stato precedente
- Richiede che versioning, change feed e blob soft delete siano abilitati.
-- **Enable soft delete for blobs**: Abilita un periodo di retention in giorni per i blobs eliminati (anche se 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 shared eliminati
+- **Enable soft delete for blobs**: Abilita un retention period in giorni per i blobs eliminati (anche sovrascritti)
+- **Enable soft delete for containers**: Abilita un retention period in giorni per i containers eliminati
+- **Enable soft delete for file shares**: Abilita un retention period in giorni per i file shared eliminati
- **Enable versioning for blobs**: Mantiene le versioni precedenti dei tuoi blobs
- **Enable blob change feed**: Mantiene i log delle modifiche di create, modification e delete ai blobs
-- **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 blob versions.
-- Version-level immutability support e point-in-time restore for containers non possono essere abilitati contemporaneamente.
+- **Enable version-level immutability support**: Consente di impostare una retention policy 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 cifratura**:
+**Opzioni di configurazione della crittografia**:
- **Encryption type**: È possibile usare Microsoft-managed keys (MMK) o Customer-managed keys (CMK)
-- **Enable infrastructure encryption**: Consente di cifrare due volte i dati "for more security"
+- **Enable infrastructure encryption**: Consente di doppiare la crittografia dei dati "for more security"
### Storage endpoints
@@ -64,19 +64,19 @@ Azure Storage Accounts sono servizi fondamentali in Microsoft Azure che fornisco
### Esposizione pubblica
-Se "Allow Blob public access" è **abilitato** (disabilitato per impostazione predefinita), quando si crea un container è possibile:
+Se "Allow Blob public access" è **abilitato** (disabilitato per default), quando si crea un container è possibile:
- Dare **accesso pubblico per leggere i blobs** (devi conoscere il nome).
-- **Elencare i blobs del container** e **leggerli**.
+- **List container blobs** e **leggerli**.
- Renderlo completamente **privato**
-### Esposizione static website (`$web`) & leaked secrets
+### Esposizione del sito statico (`$web`) e secrets leaked
-- I **static websites** sono serviti dal container speciale `$web` tramite un endpoint specifico per region come `https://.z13.web.core.windows.net/`.
-- Il container `$web` può riportare `publicAccess: null` tramite la blob API, ma i file sono comunque raggiungibili attraverso l'endpoint del sito statico, quindi inserirvi config/IaC artifacts può far leak di secrets.
-- Quick audit workflow:
+- I **siti statici** vengono serviti dal container speciale `$web` tramite un endpoint specifico per region come `https://.z13.web.core.windows.net/`.
+- Il container `$web` può riportare `publicAccess: null` tramite la blob API, ma i file restano comunque raggiungibili attraverso l'endpoint del sito statico, quindi lasciare lì artifact di configurazione/IaC può leak secrets.
+- Flusso rapido di audit:
```bash
# Identify storage accounts with static website hosting enabled
az storage blob service-properties show --account-name --auth-mode login
@@ -87,11 +87,11 @@ az storage blob list --container-name '$web' --account-name --auth-mo
# Pull suspicious files directly (e.g., IaC tfvars containing secrets/SAS)
az storage blob download -c '$web' --name iac/terraform.tfvars --file /dev/stdout --account-name --auth-mode login
```
-### Auditing anonymous blob exposure
+### Auditare l'esposizione anonima dei blob
-- **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 public i containers.
-- **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:
+- **Individua gli storage account** che possono esporre dati: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. Se `allowBlobPublicAccess` è `false` non puoi rendere i container public.
+- **Ispeziona gli account a rischio** per confermare il flag e altre impostazioni deboli: `az storage account show --name --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`.
+- **Enumera l'esposizione a livello di container** dove il flag è abilitato:**
```bash
az storage container list --account-name \
--query '[].{name:name, access:properties.publicAccess}'
@@ -115,11 +115,11 @@ Se trovi uno **storage** a cui puoi connetterti, puoi usare lo strumento [**Micr
### RBAC
-È possibile usare i principal di Entra ID con **RBAC roles** per accedere agli storage accounts ed è il metodo raccomandato.
+È possibile usare i principal di Entra ID con i **RBAC roles** per accedere agli storage account ed è il metodo consigliato.
### Access Keys
-Gli storage accounts hanno access keys che possono essere usate per accedervi. Questo fornisce f**ull access to the storage account.**
+Gli storage account hanno access keys che possono essere usate per accedervi. Questo fornisce f**ull access to the storage account.**
@@ -128,12 +128,12 @@ Gli storage accounts hanno access keys che possono essere usate per accedervi. Q
È possibile [**generate Shared Keys**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) firmate con le access keys per autorizzare l'accesso a determinate risorse tramite una signed URL.
> [!NOTE]
-> Nota che la parte `CanonicalizedResource` rappresenta la risorsa dei storage services (URI). E se una parte nell'URL è encoded, deve esserlo anche all'interno di `CanonicalizedResource`.
+> Nota che la parte `CanonicalizedResource` rappresenta la risorsa dei storage services (URI). E se una parte nella URL è encoded, deve essere encoded anche all'interno di `CanonicalizedResource`.
> [!NOTE]
-> Questo è **used by default by `az` cli** per autenticare le richieste. Per far sì che usi le credenziali del principal di Entra ID indica il parametro `--auth-mode login`.
+> Questo viene **used by default by `az` cli** per autenticare le richieste. Per far sì che usi le credenziali del principal di Entra ID indica il parametro `--auth-mode login`.
-- È possibile generare una **shared key per blob, queue and file services** firmando le seguenti informazioni:
+- È possibile generate una **shared key for blob, queue and file services** firmando le seguenti informazioni:
```bash
StringToSign = VERB + "\n" +
Content-Encoding + "\n" +
@@ -150,7 +150,7 @@ Range + "\n" +
CanonicalizedHeaders +
CanonicalizedResource;
```
-- È possibile generare una **shared key per i table services** firmando le seguenti informazioni:
+- È possibile generare una **shared key per table services** firmando le seguenti informazioni:
```bash
StringToSign = VERB + "\n" +
Content-MD5 + "\n" +
@@ -172,7 +172,7 @@ CanonicalizedResource;
StringToSign = Date + "\n"
CanonicalizedResource
```
-Poi, per usare la key, si può fare nell'header Authorization seguendo la sintassi:
+Poi, per usare la key, si può fare nell'Authorization header seguendo la sintassi:
```bash
Authorization="[SharedKey|SharedKeyLite] :"
#e.g.
@@ -186,20 +186,20 @@ Content-Length: 0
```
### **Shared Access Signature** (SAS)
-Shared Access Signatures (SAS) sono URL sicuri e a tempo limitato che **concedono permessi specifici per accedere alle risorse** in un account Azure Storage 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.
+Shared Access Signatures (SAS) sono URL sicuri e a tempo limitato che **concedono permessi specifici per accedere a 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 consente un controllo granulare specificando i permessi (come read o write) e definendo un tempo di scadenza.
#### SAS Types
- **User delegation SAS**: Viene creato da un **Entra ID principal** che firmerà il SAS e delegherà i permessi dall'utente al SAS. Può essere usato solo con **blob and data lake storage** ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). È possibile **revocare** tutti i user delegated SAS generati.
-- Anche se è possibile generare un delegation SAS con permessi "più" ampi di quelli dell'utente. Tuttavia, se il principal non li ha, non funzionerà (no privesc).
-- **Service SAS**: Viene firmato usando una delle **access keys** dell'account di storage. Può essere usato per concedere accesso a risorse specifiche in un singolo storage service. Se la key viene rinnovata, il SAS smetterà di funzionare.
-- **Account SAS**: Viene anch'esso firmato con una delle **access keys** dell'account di storage. Concede accesso alle risorse attraverso i servizi di un account storage (Blob, Queue, Table, File) e può includere operazioni a livello di servizio.
+- Anche se è possibile generare un delegation SAS con "più" permessi di quelli dell'utente. Tuttavia, se il principal non li ha, non funzionerà (no privesc).
+- **Service SAS**: È firmato usando una delle **access keys** dello storage account. Può essere usato per concedere accesso a risorse specifiche in un singolo storage service. Se la key viene rinnovata, il SAS smetterà di funzionare.
+- **Account SAS**: È anch'esso firmato con una delle **access keys** dello storage account. Concede accesso a risorse attraverso i servizi di uno storage account (Blob, Queue, Table, File) e può includere operazioni a livello di service.
-Un URL SAS firmato con una **access key** ha questo aspetto:
+Un SAS URL firmato da una **access key** appare così:
- `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** ha questo aspetto:
+Un SAS URL firmato come **user delegation** appare così:
- `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`
@@ -211,43 +211,43 @@ Nota alcuni **http params**:
#### SAS permissions
-Quando si genera un SAS è necessario indicare i permessi che deve concedere. A seconda dell'oggetto su cui il SAS viene generato, possono essere inclusi permessi diversi. Per esempio:
+Quando si genera un SAS è necessario indicare i permessi che deve concedere. A seconda dell'oggetto su cui viene generato il SAS, possono essere inclusi permessi diversi. 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
## SFTP Support for Azure Blob Storage
-Azure Blob Storage ora supporta l'SSH File Transfer Protocol (SFTP), permettendo il trasferimento e la gestione sicura dei file direttamente su Blob Storage senza richiedere soluzioni custom o prodotti di terze parti.
+Azure Blob Storage ora supporta lo SSH File Transfer Protocol (SFTP), consentendo il transfer sicuro dei file e la gestione direttamente su Blob Storage senza richiedere soluzioni custom o prodotti di terze parti.
### Key Features
-- 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:
+- Protocol Support: SFTP funziona con Blob Storage accounts configurati con hierarchical namespace (HNS). Questo organizza i blob in directory e sottodirectory per una navigazione più semplice.
+- Security: SFTP può usare identità di local user, ma supporta anche accesso basato su Microsoft Entra ID con Azure RBAC per l'autorizzazione. Questo significa che l'accesso può essere concesso con i normali Blob Storage data-plane roles invece di creare local SFTP users. I local users possono autenticarsi tramite:
- Azure-generated passwords
- Public-private SSH key pairs
-- Granular Permissions: Permessi come Read, Write, Delete e List possono essere assegnati a utenti locali per un massimo di 100 container.
-- Networking Considerations: Le connessioni SFTP vengono effettuate tramite la porta 22. Azure supporta configurazioni di rete come firewall, private endpoints o virtual networks per proteggere il traffico SFTP.
+- Granular Permissions: Permessi come Read, Write, Delete e List possono essere assegnati ai local users per fino a 100 containers.
+- Networking Considerations: Le connessioni SFTP vengono effettuate tramite la porta 22. Azure supporta configurazioni di rete come firewalls, private endpoints o virtual networks per proteggere il traffico SFTP.
### Setup Requirements
-- Hierarchical Namespace: HNS deve essere abilitato quando si crea l'account di storage.
-- Supported Encryption: Richiede algoritmi crittografici approvati da Microsoft Security Development Lifecycle (SDL) (ad es. rsa-sha2-256, ecdsa-sha2-nistp256).
+- Hierarchical Namespace: HNS deve essere abilitato quando si crea lo storage account.
+- Supported Encryption: Richiede algoritmi crittografici approvati dal Microsoft Security Development Lifecycle (SDL) (ad esempio, rsa-sha2-256, ecdsa-sha2-nistp256).
- SFTP Configuration:
-- Abilita SFTP sull'account di storage.
-- Crea identità utente locali con i permessi appropriati.
-- Configura le home directories per gli utenti per definire la loro posizione iniziale all'interno del container.
+- Abilita SFTP sullo storage account.
+- Per l'accesso local-user, crea local user identities con i permessi appropriati.
+- Per i local users, configura home directories per definire la loro posizione iniziale all'interno del container.
### Permissions
| Permission | Symbol | Description |
| ---------------------- | ------ | ------------------------------------ |
-| **Read** | `r` | Leggi 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` | Cambia l'utente o il gruppo owner. |
-| **Modify Permissions** | `p` | Cambia le ACL su file o directory. |
+| **Read** | `r` | Leggere il contenuto del file. |
+| **Write** | `w` | Caricare file e creare directory. |
+| **List** | `l` | Elencare il contenuto delle directory. |
+| **Delete** | `d` | Eliminare file o directory. |
+| **Create** | `c` | Creare file o directory. |
+| **Modify Ownership** | `o` | Cambiare l'utente o il gruppo proprietario. |
+| **Modify Permissions** | `p` | Cambiare gli ACL su file o directory. |
## Enumeration
@@ -471,6 +471,7 @@ az-file-shares.md
- [https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction](https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction)
- [https://learn.microsoft.com/en-us/azure/storage/common/storage-sas-overview](https://learn.microsoft.com/en-us/azure/storage/common/storage-sas-overview)
- [https://learn.microsoft.com/en-us/azure/storage/blobs/secure-file-transfer-protocol-support](https://learn.microsoft.com/en-us/azure/storage/blobs/secure-file-transfer-protocol-support)
+- [https://learn.microsoft.com/en-us/azure/storage/blobs/secure-file-transfer-protocol-support-entra-id-based-access](https://learn.microsoft.com/en-us/azure/storage/blobs/secure-file-transfer-protocol-support-entra-id-based-access)
- [Holiday Hack Challenge 2025 – Spare Key (Azure static website SAS leak)](https://0xdf.gitlab.io/holidayhack2025/act1/spare-key)
- [Holiday Hack Challenge 2025: Blob Storage (Storage Secrets)](https://0xdf.gitlab.io/holidayhack2025/act1/blob-storage)
- [https://learn.microsoft.com/en-us/cli/azure/storage/account](https://learn.microsoft.com/en-us/cli/azure/storage/account)