Az - PostgreSQL Privesc
Tip
Aprende y practica AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Consulta los subscription plans!
- Únete al 💬 Discord group o al telegram group o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud github repos.
PostgreSQL Privesc
Para más información sobre SQL Database, consulta:
Microsoft.DBforPostgreSQL/flexibleServers/read && Microsoft.DBforPostgreSQL/flexibleServers/write
Con este permiso, puedes crear, actualizar o eliminar instancias de PostgreSQL Flexible Server en Azure. Esto incluye aprovisionar nuevos servidores, modificar configuraciones de servidores existentes o desmantelar 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 ejemplo, estos permisos permiten cambiar la contraseña de PostgreSQL, útil por supuesto en caso de que la autenticación de PostgreSQL esté habilitada.
az postgres flexible-server update \
--resource-group <resource_group_name> \
--name <server_name> \
--admin-password <password_to_update>
Además, con los permisos puedes habilitar la identidad asignada, y operar con la identidad administrada adjunta al servidor. Aquí puedes encontrar todas las extensiones que el servidor flexible de Azure PostgreSQL soporta https://learn.microsoft.com/en-us/azure/cosmos-db/postgresql/reference-extensions. Para poder usar estas extensiones, algunos parámetros del servidor (azure.extensions) necesitan ser cambiados. Por ejemplo, aquí con una identidad administrada que puede acceder a Azure Storage:
Primero cambiamos los parámetros y nos aseguramos de que la identidad asignada esté 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;
Además, es necesario tener habilitado el acceso público si deseas acceder desde un endpoint no privado. Para habilitarlo:
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
Con estos permisos puedes restaurar un servidor desde una copia de seguridad con:
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
Con este permiso, puedes configurar administradores de Azure Active Directory (AD) para un Servidor Flexible de PostgreSQL. Esto se puede explotar configurando a uno mismo u otra cuenta como el administrador de AD, otorgando control administrativo total sobre el servidor de PostgreSQL. La actualización de un principal existente aún no es compatible, por lo que si hay uno creado, debes eliminarlo primero.
Es importante que el servidor flexible tenga identidades administradas asignadas a un usuario para usar.
az postgres flexible-server ad-admin create \
--resource-group <ResourceGroupName> \
--server-name <ServerName> \
--display-name <ADAdminDisplayName> \
--identity <IdentityNameOrID> \
--object-id <ObjectID>
Tip
Aprende y practica AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Consulta los subscription plans!
- Únete al 💬 Discord group o al telegram group o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud github repos.
HackTricks Cloud

