From 0e3eae5935329705ceac80bbe87eea72a32b1d7a Mon Sep 17 00:00:00 2001 From: Translator Date: Sun, 18 Jan 2026 15:04:10 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-cloud/azure-security/az-services/az-stor --- .../azure-security/az-services/az-storage.md | 152 ++++++++++-------- 1 file changed, 84 insertions(+), 68 deletions(-) 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 6076a8ea5..6cfb65832 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-storage.md +++ b/src/pentesting-cloud/azure-security/az-services/az-storage.md @@ -4,27 +4,27 @@ ## Informazioni di base -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. +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 (binary large objects), file, queue e table. Funzionano come contenitori che raggruppano questi diversi servizi di storage sotto un unico namespace per una gestione più semplice. **Principali opzioni di configurazione**: -- 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** da guasti a livello di rack, disco e datacenter. +- Ogni storage account deve avere un **nome univoco su 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 prestazioni superiori +- È possibile selezionare tra **4 tipi di ridondanza per proteggere** da guasti a livello 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**: 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. +- **Require secure transfer for REST API operations**: Richiede TLS in ogni 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à vietato - **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. +- **Permitted scope for copy operations**: Consente da qualsiasi storage account, da qualsiasi storage account nello stesso Entra tenant o da storage account con private endpoints nella stessa virtual network. -**Opzioni Blob Storage**: +**Opzioni per Blob Storage**: - **Allow cross-tenant replication** -- **Access tier**: Hot (dati accessati frequentemente), Cool e Cold (dati raramente accessati) +- **Access tier**: Hot (dati ad accesso frequente), Cool e Cold (dati raramente accessati) **Opzioni di networking**: @@ -32,54 +32,69 @@ Azure Storage Accounts sono servizi fondamentali in Microsoft Azure che fornisco - 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 +- **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. -- 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. +- **Point-in-time restore for containers**: Permette di ripristinare i container 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 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**: Mantiene log di creazione, modifica ed eliminazione dei blob +- **Enable version-level immutability support**: Permette 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 contemporaneamente. **Opzioni di crittografia**: -- **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". +- **Encryption type**: È possibile usare Microsoft-managed keys (MMK) o Customer-managed keys (CMK) +- **Enable infrastructure encryption**: Consente una doppia crittografia dei dati "per maggiore sicurezza" ### Storage endpoints -
Storage ServiceEndpoint
Blob storagehttps://.blob.core.windows.net

https://.blob.core.windows.net/?restype=container&comp=list
Data Lake Storagehttps://.dfs.core.windows.net
Azure Fileshttps://.file.core.windows.net
Queue storagehttps://.queue.core.windows.net
Table storagehttps://.table.core.windows.net
+
Servizio di storageEndpoint
Blob storagehttps://.blob.core.windows.net

https://.blob.core.windows.net/?restype=container&comp=list
Data Lake Storagehttps://.dfs.core.windows.net
Azure Fileshttps://.file.core.windows.net
Queue storagehttps://.queue.core.windows.net
Table storagehttps://.table.core.windows.net
### Esposizione pubblica -Se "Allow Blob public access" è **enabled** (disabled by default), quando si crea un container è possibile: +Se "Allow Blob public access" è **enabled** (disabilitato per default), quando si crea un container è possibile: -- Dare **accesso pubblico in lettura ai blob** (è necessario conoscere il nome). +- Dare **accesso pubblico in sola lettura ai blob** (è necessario conoscere il nome). - **Listare i blob del container** e **leggerli**. -- Rendersi completamente **privato**. +- Renderlo completamente **privato**
-#### Auditing anonymous blob exposure +### Static website (`$web`) exposure & leaked secrets -- **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: +- **Static websites** sono serviti dal contenitore speciale `$web` tramite un endpoint region-specific come `https://.z13.web.core.windows.net/`. +- Il contenitore `$web` può riportare `publicAccess: null` via l'API blob, ma i file sono comunque raggiungibili tramite l'endpoint del sito statico, quindi lasciare artifact di config/IaC lì può leaked secrets. +- Flusso di audit rapido: +```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 +``` +### Verifica dell'esposizione anonima dei blob + +- **Individua storage accounts** che possono esporre dati: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. Se `allowBlobPublicAccess` è `false` non puoi rendere pubblici i containers. +- **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}' ``` - `"Blob"`: letture anonime consentite **solo quando il nome del blob è noto** (nessuna enumerazione). -- `"Container"`: anonimo **elenco + lettura** di ogni blob. +- `"Container"`: elenco anonimo **+ 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: +- Per `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 @@ -93,23 +108,23 @@ Se trovi uno **storage** a cui puoi connetterti, puoi usare lo strumento [**Micr ### RBAC -È possibile usare i principal di Entra ID con i **ruoli RBAC** per accedere agli storage accounts ed è il metodo raccomandato. +È possibile utilizzare i principal Entra ID con **RBAC roles** per accedere agli storage account ed è il metodo raccomandato. -### Chiavi di accesso +### Access Keys -Gli account di storage dispongono di chiavi di accesso che possono essere usate per accederci. Questo fornisce l'**accesso completo all'account di storage.** +Gli storage account dispongono di access keys che possono essere utilizzate per accedervi. Questo fornisce **accesso completo all'account di storage.**
### **Shared Keys & Lite Shared Keys** -È 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. +È possibile [**generate Shared Keys**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) firmati con le access keys per autorizzare l'accesso a determinate risorse tramite una URL firmata. > [!NOTE] -> 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`. +> Nota che la parte `CanonicalizedResource` rappresenta la risorsa del servizio di storage (URI). E se qualsiasi parte dell'URL è codificata, dovrebbe essere codificata anche all'interno di `CanonicalizedResource`. > [!NOTE] -> 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`. +> Questo comportamento è **usato di default da `az` cli** per autenticare le richieste. Per far sì che utilizzi le credenziali del principal Entra ID, indica il parametro `--auth-mode login`. - È possibile generare una **shared key per i servizi blob, queue e file** firmando le seguenti informazioni: ```bash @@ -150,7 +165,7 @@ CanonicalizedResource; StringToSign = Date + "\n" CanonicalizedResource ``` -Quindi, per usare la chiave, si può inserirla nell'header Authorization seguendo la sintassi: +Poi, per usare la chiave, può essere inserita nell'Authorization header seguendo la sintassi: ```bash Authorization="[SharedKey|SharedKeyLite] :" #e.g. @@ -164,14 +179,14 @@ Content-Length: 0 ``` ### **Shared Access Signature** (SAS) -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. +Le Shared Access Signatures (SAS) sono URL sicuri e a tempo limitato che **concedono permessi specifici per accedere a risorse** in un account Azure Storage senza esporre le chiavi di accesso dell'account. Mentre le chiavi di accesso forniscono accesso amministrativo completo a tutte le risorse, le SAS permettono un controllo granulare specificando 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à 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. +- **User delegation SAS**: Questo viene creato da un **Entra ID principal** che firmerà la SAS e delegherà i permessi dall'utente alla 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** tutte le SAS delegate utente generate. +- Anche se è possibile generare una delegation SAS con permessi "maggiori" rispetto a quelli che l'utente possiede, se il principal non li ha, non funzionerà (no privesc). +- **Service SAS**: Questa è 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 di un account di storage (Blob, Queue, Table, File) e può includere operazioni a livello di servizio. A SAS URL signed by an **access key** looks like this: @@ -185,55 +200,55 @@ 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 **signature** che valida la SAS +- Il parametro **`sig`** è la **firma** che valida la SAS #### SAS permissions -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: +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 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 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. +Azure Blob Storage ora supporta lo SSH File Transfer Protocol (SFTP), permettendo trasferimenti di file sicuri e la gestione direttamente su Blob Storage senza richiedere soluzioni personalizzate 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: - 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. +- coppie di chiavi SSH pubblico/privata +- Granular Permissions: permessi come Read, Write, Delete e List possono essere assegnati agli utenti locali per un massimo di 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 mettere in sicurezza il traffico SFTP. ### Setup Requirements -- 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). +- Hierarchical Namespace: l'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 home directory per gli utenti per definire la loro posizione iniziale all'interno del container. +- Configurare le home directory per gli utenti per definire la loro posizione di partenza all'interno del container. ### Permissions -| Permesso | Simbolo | Descrizione | +| 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. | +| **Lettura** | `r` | Legge il contenuto del file. | +| **Scrittura** | `w` | Carica file e crea directory. | +| **Elenco** | `l` | Elenca il contenuto delle directory. | +| **Eliminazione** | `d` | Elimina file o directory. | +| **Creazione** | `c` | Crea file o directory. | +| **Modifica Proprietà** | `o` | Cambia l'utente o il gruppo proprietario. | +| **Modifica Permessi** | `p` | Modifica le ACL su file o directory. | -## Enumerazione +## Enumeration {{#tabs }} {{#tab name="az cli" }}
-az cli enumerazione +az cli enumeration ```bash # Get storage accounts az storage account list #Get the account name from here @@ -420,25 +435,25 @@ New-AzStorageBlobSASToken ` {{#endtab }} {{#endtabs }} -### Condivisioni di file +### Condivisioni file {{#ref}} az-file-shares.md {{#endref}} -## Privilege Escalation +## Escalation dei privilegi {{#ref}} ../az-privilege-escalation/az-storage-privesc.md {{#endref}} -## Post Exploitation +## Post-sfruttamento {{#ref}} ../az-post-exploitation/az-blob-storage-post-exploitation.md {{#endref}} -## Persistence +## Persistenza {{#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)