# Az - CosmosDB Privesc

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

## CosmosDB Privesc
Za više informacija o SQL bazi podataka pogledajte:

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

### (`Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/write`, `Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/read`) & (`Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/write`, `Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/read`)

Sa ovim dozvolama možete eskalirati privilegije dajući korisniku dozvole za izvršavanje upita i povezivanje sa bazom podataka. Prvo se kreira definicija uloge koja daje neophodne dozvole i opsege.
```bash
az cosmosdb sql role definition create \
--account-name <account_name> \
--resource-group <resource_group_name> \
--body '{
"Id": "<Random-Unique-ID>", # For example 12345678-1234-1234-1234-123456789az
"RoleName": "CustomReadRole",
"Type": "CustomRole",
"AssignableScopes": [
"/subscriptions/<subscription_id>/resourceGroups/sqldatabase/providers/Microsoft.DocumentDB/databaseAccounts/<account_name>"
],
"Permissions": [
{
"DataActions": [
"Microsoft.DocumentDB/databaseAccounts/readMetadata",
"Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/read",
"Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*"
]
}
]
}'
```
Nakon toga, dodeljivanje definicije se daje korisniku. Nakon toga, taj korisnik može koristiti DefaultAzureCredential() metodu povezivanja za izvršavanje upita.
```bash
az cosmosdb sql role assignment create \
--account-name <account_name> \
--resource-group <resource_group_name> \
--role-definition-id <Random-Unique-ID-used-in-definition> \
--principal-id <principal_id-togive-perms> \
--scope "/"
```
### (`Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/write` && `Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/read`)&& (`Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write` && `Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read`)

Sa ovom dozvolom, možete kreirati nove MongoDB definicije uloga unutar Azure Cosmos DB naloga. Ovo omogućava definisanje prilagođenih uloga sa specifičnim dozvolama za MongoDB korisnike. RBAC funkcionalnosti moraju biti omogućene da bi se ovo koristilo.
```bash
az cosmosdb mongodb role definition create \
--account-name <account_name> \
--resource-group <resource_group_name> \
--body '{
"Id": "<mydatabase>.readWriteRole",
"RoleName": "readWriteRole",
"Type": "CustomRole",
"DatabaseName": "<mydatabase>",
"Privileges": [
{
"Resource": {
"Db": "<mydatabase>",
"Collection": "mycollection"
},
"Actions": [
"insert",
"find",
"update"
]
}
],
"Roles": []
}'
```
Možete kreirati nove definicije MongoDB korisnika unutar Azure Cosmos DB naloga. Ovo omogućava dodeljivanje korisnika sa specifičnim rolama i pristupom MongoDB bazama podataka.
```bash
az cosmosdb mongodb user definition create \
--account-name <account_name> \
--resource-group <resource_group_name> \
--body '{
"Id": "<mydatabase>.myUser",
"UserName": "<myUser>",
"Password": "<mySecurePassword>",
"DatabaseName": "<mydatabase>",
"CustomData": "TestCustomData",
"Mechanisms": "SCRAM-SHA-256",
"Roles": [
{
"Role": "readWriteRole",
"Db": "<mydatabase>"
}
]
}'
```
Nakon što je novi korisnik kreiran unutar MongoDB, možemo mu pristupiti:
```bash
mongosh "mongodb://<myUser>:<mySecurePassword>@<account_name>.mongo.cosmos.azure.com:10255/<mymongodatabase>?ssl=true&replicaSet=globaldb&retrywrites=false"
```
### `Microsoft.DocumentDB/databaseAccounts/listKeys/action`
Sa ovom dozvolom, možete preuzeti primarne i sekundarne ključeve za Azure Cosmos DB nalog. Ovi ključevi pružaju potpuni pristup nalogu baze podataka i njenim resursima, omogućavajući akcije kao što su čitanje podataka, pisanje i promene konfiguracije.
```bash
az cosmosdb keys list \
--name <account_name> \
--resource-group <resource_group_name>
```
{{#include ../../../banners/hacktricks-training.md}}
