diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc/README.md index 6ed03b03d..19e01409d 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc/README.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc/README.md @@ -4,32 +4,32 @@ ## Step Functions -Para mais informações sobre este serviço AWS, consulte: +Para mais informações sobre este serviço da AWS, veja: {{#ref}} ../../aws-services/aws-stepfunctions-enum.md {{#endref}} -### Recursos de Task +### Task Resources -Estas privilege escalation techniques vão requerer o uso de alguns AWS step function resources para executar as ações de privilege escalation desejadas. +Essas técnicas de privilege escalation vão requerer o uso de alguns recursos do Step Functions para executar as ações de privilege escalation desejadas. -Para verificar todas as ações possíveis, você pode acessar sua própria conta AWS, selecionar a ação que deseja usar e ver os parâmetros que ela está usando, como em: +Para verificar todas as ações possíveis, você pode acessar sua conta AWS, selecionar a ação que deseja usar e ver os parâmetros que ela utiliza, como em:
-Ou você também pode consultar a documentação da API AWS e verificar a documentação de cada ação: +Ou você também pode consultar a documentação da API da AWS e verificar a documentação de cada ação: - [**AddUserToGroup**](https://docs.aws.amazon.com/IAM/latest/APIReference/API_AddUserToGroup.html) - [**GetSecretValue**](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html) ### `states:TestState` & `iam:PassRole` -Um atacante com as permissões **`states:TestState`** e **`iam:PassRole`** pode testar qualquer state e passar qualquer IAM role para ele sem criar ou atualizar uma state machine existente, potencialmente permitindo acesso não autorizado a outros serviços AWS com as permissões dessas roles. Combinadas, essas permissões podem levar a ações não autorizadas extensas, desde manipulação de workflows até alteração de dados, vazamentos de dados, manipulação de recursos e privilege escalation. +Um atacante com as permissões **`states:TestState`** e **`iam:PassRole`** pode testar qualquer state e passar qualquer IAM role para ele sem criar ou atualizar uma state machine existente, potencialmente permitindo acesso não autorizado a outros serviços AWS com as permissões desses roles. Em conjunto, essas permissões podem levar a ações não autorizadas extensas, desde manipular workflows e alterar dados até vazamentos de dados, manipulação de recursos e privilege escalation. ```bash -aws states test-state --definition --role-arn [--input ] [--inspection-level ] [--reveal-secrets | --no-reveal-secrets] +aws stepfunctions test-state --definition --role-arn [--input ] [--inspection-level ] [--reveal-secrets | --no-reveal-secrets] ``` -Os exemplos a seguir mostram como testar um estado que cria uma chave de acesso para o usuário **`admin`**, aproveitando essas permissões e um role permissivo do ambiente AWS. Esse role permissivo deve ter alguma policy de alto privilégio associada a ele (por exemplo **`arn:aws:iam::aws:policy/AdministratorAccess`**) que permita que o state execute a ação **`iam:CreateAccessKey`**: +Os exemplos a seguir mostram como testar um estado que cria uma chave de acesso para o usuário **`admin`** aproveitando essas permissões e um role permissivo do ambiente AWS. Esse role permissivo deve ter associada uma política de alto privilégio (por exemplo **`arn:aws:iam::aws:policy/AdministratorAccess`**) que permita que o estado execute a ação **`iam:CreateAccessKey`**: - **stateDefinition.json**: ```json @@ -42,7 +42,7 @@ Os exemplos a seguir mostram como testar um estado que cria uma chave de acesso "End": true } ``` -- **Comando** executado para realizar a privesc: +- **Comando** executado para realizar o privesc: ```bash aws stepfunctions test-state --definition file://stateDefinition.json --role-arn arn:aws:iam:::role/PermissiveRole @@ -59,23 +59,23 @@ aws stepfunctions test-state --definition file://stateDefinition.json --role-arn "status": "SUCCEEDED" } ``` -**Impacto Potencial**: Execução e manipulação não autorizada de workflows e acesso a recursos sensíveis, potencialmente levando a violações de segurança significativas. +**Impacto Potencial**: Execução e manipulação não autorizadas de fluxos de trabalho e acesso a recursos sensíveis, potencialmente levando a violações de segurança significativas. ### `states:CreateStateMachine` & `iam:PassRole` & (`states:StartExecution` | `states:StartSyncExecution`) -Um atacante com **`states:CreateStateMachine`** e **`iam:PassRole`** seria capaz de criar uma state machine e atribuir a ela qualquer IAM role, permitindo acesso não autorizado a outros serviços AWS com as permissões da role. Em contraste com a técnica de privesc anterior (**`states:TestState`** & **`iam:PassRole`**), esta não executa por si só — você também precisará das permissões **`states:StartExecution`** ou **`states:StartSyncExecution`** (**`states:StartSyncExecution`** **não está disponível para standard workflows**, **apenas para express state machines**) para iniciar uma execução na state machine. +Um atacante com as permissões **`states:CreateStateMachine`** & **`iam:PassRole`** seria capaz de criar uma máquina de estados e atribuir a ela qualquer role do IAM, permitindo acesso não autorizado a outros serviços da AWS com as permissões da role. Em contraste com a técnica de privesc anterior (**`states:TestState`** & **`iam:PassRole`**), esta não é executada por si só; você também precisará das permissões **`states:StartExecution`** ou **`states:StartSyncExecution`** (**`states:StartSyncExecution`** não está disponível para standard workflows, apenas para express state machines**) para iniciar uma execução na máquina de estados. ```bash # Create a state machine -aws states create-state-machine --name --definition --role-arn [--type ] [--logging-configuration ]\ +aws stepfunctions create-state-machine --name --definition --role-arn [--type ] [--logging-configuration ]\ [--tracing-configuration ] [--publish | --no-publish] [--version-description ] # Start a state machine execution -aws states start-execution --state-machine-arn [--name ] [--input ] [--trace-header ] +aws stepfunctions start-execution --state-machine-arn [--name ] [--input ] [--trace-header ] # Start a Synchronous Express state machine execution -aws states start-sync-execution --state-machine-arn [--name ] [--input ] [--trace-header ] +aws stepfunctions start-sync-execution --state-machine-arn [--name ] [--input ] [--trace-header ] ``` -Os exemplos a seguir mostram como criar uma state machine que cria um access key para o usuário **`admin`** e exfiltra esse access key para um bucket S3 controlado pelo atacante, aproveitando essas permissões e um role permissivo do ambiente AWS. Esse role permissivo deve ter qualquer policy de alto privilégio associada (por exemplo **`arn:aws:iam::aws:policy/AdministratorAccess`**) que permita à state machine executar as ações **`iam:CreateAccessKey`** & **`s3:putObject`**. +Os exemplos a seguir mostram como criar uma máquina de estado que cria uma chave de acesso para o usuário **`admin`** e exfiltra essa chave de acesso para um bucket S3 controlado por um atacante, aproveitando essas permissões e uma role permissiva do ambiente AWS. Essa role permissiva deve ter qualquer política de alto privilégio associada (por exemplo **`arn:aws:iam::aws:policy/AdministratorAccess`**) que permita que a máquina de estado execute as ações **`iam:CreateAccessKey`** & **`s3:putObject`**. - **stateMachineDefinition.json**: ```json @@ -123,7 +123,7 @@ aws stepfunctions create-state-machine --name MaliciousStateMachine --definition "creationDate": "2024-07-09T20:29:35.381000+02:00" } ``` -- **Comando** executado para **iniciar uma execução** da máquina de estados criada anteriormente: +- **Comando** executado para **iniciar uma execução** da state machine criada anteriormente: ```json aws stepfunctions start-execution --state-machine-arn arn:aws:states:us-east-1:123456789012:stateMachine:MaliciousStateMachine { @@ -132,26 +132,26 @@ aws stepfunctions start-execution --state-machine-arn arn:aws:states:us-east-1:1 } ``` > [!WARNING] -> O bucket S3 controlado pelo atacante deve ter permissões para aceitar uma ação `s3:PutObject` da conta da vítima. +> O bucket S3 controlado pelo atacante deve ter permissões para aceitar uma ação s3:PutObject da conta vítima. -**Impacto Potencial**: Execução e manipulação não autorizadas de workflows e acesso a recursos sensíveis, potencialmente levando a violações de segurança significativas. +**Possível Impacto**: Execução e manipulação não autorizadas de fluxos de trabalho e acesso a recursos sensíveis, potencialmente levando a brechas de segurança significativas. -### `states:UpdateStateMachine` & (nem sempre necessário) `iam:PassRole` +### `states:UpdateStateMachine` & (not always required) `iam:PassRole` -Um atacante com a permissão **`states:UpdateStateMachine`** seria capaz de modificar a definição de uma máquina de estados, podendo adicionar estados furtivos adicionais que poderiam resultar em uma escalada de privilégios. Dessa forma, quando um usuário legítimo iniciar uma execução da máquina de estados, esse novo estado furtivo malicioso será executado e a escalada de privilégios será bem-sucedida. +Um atacante com a permissão **`states:UpdateStateMachine`** poderia modificar a definição de uma máquina de estados, conseguindo adicionar estados furtivos extras que poderiam resultar em uma escalada de privilégios. Dessa forma, quando um usuário legítimo iniciar uma execução da máquina de estados, esse novo estado malicioso furtivo será executado e a escalada de privilégios será bem-sucedida. Dependendo de quão permissiva é a IAM Role associada à máquina de estados, um atacante enfrentaria 2 situações: -1. **Permissive IAM Role**: Se a IAM Role associada à máquina de estados já for permissiva (por exemplo, se tiver anexada a policy **`arn:aws:iam::aws:policy/AdministratorAccess`**), então a permissão **`iam:PassRole`** não seria necessária para escalar privilégios, já que não seria preciso também atualizar a IAM Role — a definição da máquina de estados é suficiente. -2. **Not permissive IAM Role**: Em contraste com o caso anterior, aqui o atacante também exigiria a permissão **`iam:PassRole`**, pois seria necessário associar uma IAM Role permissiva à máquina de estados além de modificar a definição da máquina de estados. +1. **Permissive IAM Role**: Se a IAM Role associada à máquina de estados já for permissiva (por exemplo, se tiver anexada a policy **`arn:aws:iam::aws:policy/AdministratorAccess`**), então a permissão **`iam:PassRole`** não seria necessária para escalada de privilégios, já que não seria preciso também atualizar a IAM Role — a definição da máquina de estados seria suficiente. +2. **Not permissive IAM Role**: Em contraste com o caso anterior, aqui um atacante também necessitaria da permissão **`iam:PassRole`**, pois seria necessário associar uma IAM Role permissiva à máquina de estados além de modificar a definição da máquina de estados. ```bash -aws states update-state-machine --state-machine-arn [--definition ] [--role-arn ] [--logging-configuration ] \ +aws stepfunctions update-state-machine --state-machine-arn [--definition ] [--role-arn ] [--logging-configuration ] \ [--tracing-configuration ] [--publish | --no-publish] [--version-description ] ``` -Os exemplos a seguir mostram como atualizar uma state machine legítima que apenas invoca uma HelloWorld Lambda function, a fim de adicionar um estado extra que adiciona o usuário **`unprivilegedUser`** ao Grupo IAM **`administrator`**. Dessa forma, quando um usuário legítimo iniciar uma execução da state machine atualizada, esse novo estado malicioso e furtivo será executado e a escalada de privilégios será bem-sucedida. +Os exemplos a seguir mostram como atualizar uma state machine legítima que apenas invoca uma função HelloWorld Lambda, a fim de adicionar um estado extra que adiciona o usuário **`unprivilegedUser`** ao Grupo IAM **`administrator`**. Assim, quando um usuário legítimo iniciar uma execução da state machine atualizada, esse novo estado malicioso e furtivo será executado e a escalada de privilégios será bem-sucedida. > [!WARNING] -> Se a state machine não tiver um IAM Role permissivo associado, também será necessária a permissão **`iam:PassRole`** para atualizar o IAM Role, a fim de associar um IAM Role permissivo (por exemplo, um com a política **`arn:aws:iam::aws:policy/AdministratorAccess`** anexada). +> Se a state machine não tiver uma IAM Role permissiva associada, também será necessário ter a permissão **`iam:PassRole`** para atualizar a IAM Role, a fim de associar uma IAM Role permissiva (por exemplo, uma com a política **`arn:aws:iam::aws:policy/AdministratorAccess`** anexada). {{#tabs }} {{#tab name="Legit State Machine" }} @@ -218,7 +218,7 @@ Os exemplos a seguir mostram como atualizar uma state machine legítima que apen {{#endtab }} {{#endtabs }} -- **Comando** executado para **atualizar** **a state machine legítima**: +- **Comando** executado para **atualizar** **a legit state machine**: ```bash aws stepfunctions update-state-machine --state-machine-arn arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorldLambda --definition file://StateMachineUpdate.json { @@ -226,6 +226,6 @@ aws stepfunctions update-state-machine --state-machine-arn arn:aws:states:us-eas "revisionId": "1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f" } ``` -**Impacto Potencial**: Execução e manipulação não autorizadas de fluxos de trabalho e acesso a recursos sensíveis, potencialmente levando a violações de segurança significativas. +**Impacto Potencial**: Execução e manipulação não autorizadas de fluxos de trabalho e acesso a recursos sensíveis, potencialmente resultando em violações de segurança significativas. {{#include ../../../../banners/hacktricks-training.md}}