Az - PostgreSQL Privesc

Reading time: 4 minutes

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

PostgreSQL Privesc

Para mais informações sobre SQL Database, consulte:

Az - PostgreSQL

Microsoft.DBforPostgreSQL/flexibleServers/read && Microsoft.DBforPostgreSQL/flexibleServers/write

Com esta permissão, você pode criar, atualizar ou excluir instâncias do PostgreSQL Flexible Server no Azure. Isso inclui provisionar novos servidores, modificar configurações de servidores existentes ou descomissionar servidores.

bash
az postgres flexible-server create \
--name <ServerName> \
--resource-group <ResourceGroupName> \
--location <Location> \
--admin-user <AdminUsername> \
--admin-password <AdminPassword> \
--sku-name <SkuName> \
--storage-size <StorageSizeInGB> \
--tier <PricingTier> \
--version <PostgreSQLVersion>

Por exemplo, essas permissões permitem alterar a senha do PostgreSQL, útil, é claro, no caso de a autenticação do PostgreSQL estar habilitada.

bash
az postgres flexible-server update \
--resource-group <resource_group_name> \
--name <server_name> \
--admin-password <password_to_update>

Além disso, com as permissões, você pode habilitar a identidade atribuída, operando com a identidade gerenciada anexada ao servidor. Aqui você pode encontrar todas as extensões que o Azure PostgreSQL flexible server suporta https://learn.microsoft.com/en-us/azure/cosmos-db/postgresql/reference-extensions. Para poder usar essas extensões, alguns parâmetros do servidor (azure.extensions) precisam ser alterados. Por exemplo, aqui com uma identidade gerenciada que pode acessar o Azure Storage:

Primeiro, alteramos os parâmetros e garantimos que a identidade atribuída esteja habilitada:

bash
az postgres flexible-server parameter set \
--resource-group <YourResourceGroupName> \
--server-name <YourServerName> \
--name azure.extensions \
--value "AZURE_STORAGE"

az postgres flexible-server identity update \
--resource-group <YourResourceGroupName> \
--server-name <YourServerName> \
--system-assigned Enabled
sql

CREATE EXTENSION IF NOT EXISTS azure_storage;

CREATE EXTERNAL DATA SOURCE ManagedIdentity

SELECT azure_storage.account_add('<storage-account>', '<storage-key>');

SELECT *
FROM azure_storage.blob_get(
'<storage-account>',
'<container>',
'message.txt',
decoder := 'text'
) AS t(content text)
LIMIT 1;

Além disso, é necessário ter o acesso público habilitado se você quiser acessar a partir de um endpoint não privado, para habilitá-lo:

bash
az postgres flexible-server update --resource-group <resource_group_name> --server-name <server_name> --public-access Enabled

Microsoft.DBforPostgreSQL/flexibleServers/read, Microsoft.DBforPostgreSQL/flexibleServers/write, Microsoft.DBforPostgreSQL/flexibleServers/backups/read, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action

Com essas permissões, você pode restaurar um servidor a partir de um backup com:

bash
az postgres flexible-server restore \
--resource-group <RESOURCE_GROUP> \
--name <NEW_SERVER_NAME> \
--source-server <SOURCE_SERVER_NAME> \
--restore-time "<ISO8601_TIMESTAMP>" \
--yes

Microsoft.DBforPostgreSQL/flexibleServers/read, Microsoft.DBforPostgreSQL/flexibleServers/write, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action, Microsoft.DBforPostgreSQL/flexibleServers/administrators/write && Microsoft.DBforPostgreSQL/flexibleServers/administrators/read

Com essa permissão, você pode configurar administradores do Azure Active Directory (AD) para um Servidor Flexível PostgreSQL. Isso pode ser explorado configurando-se ou configurando outra conta como administrador do AD, concedendo controle administrativo total sobre o servidor PostgreSQL. A atualização de um principal existente ainda não é suportada, então, se houver um criado, você deve excluí-lo primeiro.

É importante que o servidor flexível tenha identidades gerenciadas atribuídas a um usuário para uso.

bash
az postgres flexible-server ad-admin create \
--resource-group <ResourceGroupName> \
--server-name <ServerName> \
--display-name <ADAdminDisplayName> \
--identity <IdentityNameOrID> \
--object-id <ObjectID>

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks