mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-04 19:11:41 -08:00
Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/
This commit is contained in:
@@ -2,107 +2,12 @@
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## SageMaker Studio - Tomada de Conta via CreatePresignedDomainUrl (Impersonar qualquer UserProfile)
|
||||
## URLs pré-assinadas para SageMaker
|
||||
|
||||
### Description
|
||||
Uma identidade com permissão para chamar `sagemaker:CreatePresignedDomainUrl` em um `UserProfile` alvo do Studio pode gerar uma URL de login que autentica diretamente no SageMaker Studio como esse perfil. Isso concede ao navegador do atacante uma sessão do Studio que herda as permissões do `ExecutionRole` do perfil e acesso total ao home do perfil suportado por EFS e aos apps. Não é necessário `iam:PassRole` nem acesso ao console.
|
||||
Se um atacante conseguir obter uma presigned URL para um recurso do SageMaker, ele poderá acessá-lo sem qualquer autenticação adicional. As permissões e o nível de acesso dependerão da role associada ao recurso:
|
||||
|
||||
### Requirements
|
||||
- Um SageMaker Studio `Domain` e um `UserProfile` alvo dentro dele.
|
||||
- O principal atacante precisa de `sagemaker:CreatePresignedDomainUrl` no `UserProfile` alvo (nível de recurso) ou `*`.
|
||||
|
||||
Minimal policy example (scoped to one UserProfile):
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [
|
||||
{
|
||||
"Effect": "Allow",
|
||||
"Action": "sagemaker:CreatePresignedDomainUrl",
|
||||
"Resource": "arn:aws:sagemaker:<region>:<account-id>:user-profile/<domain-id>/<user-profile-name>"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
### Etapas de Abuso
|
||||
|
||||
1) Enumerar um Studio Domain e UserProfiles que você pode ter como alvo
|
||||
```bash
|
||||
DOM=$(aws sagemaker list-domains --query 'Domains[0].DomainId' --output text)
|
||||
aws sagemaker list-user-profiles --domain-id-equals $DOM
|
||||
TARGET_USER=<UserProfileName>
|
||||
```
|
||||
2) Gerar uma URL pré-assinada (válida por ~5 minutos por padrão)
|
||||
```bash
|
||||
aws sagemaker create-presigned-domain-url \
|
||||
--domain-id $DOM \
|
||||
--user-profile-name $TARGET_USER \
|
||||
--query AuthorizedUrl --output text
|
||||
```
|
||||
3) Abra a URL retornada em um navegador para entrar no Studio como o usuário alvo. Em um terminal Jupyter dentro do Studio, verifique a identidade efetiva:
|
||||
```bash
|
||||
aws sts get-caller-identity
|
||||
```
|
||||
Notas:
|
||||
- `--landing-uri` pode ser omitido. Alguns valores (por exemplo, `app:JupyterLab:/lab`) podem ser rejeitados dependendo da variante/versão do Studio; os padrões normalmente redirecionam para a home do Studio e depois para o Jupyter.
|
||||
- Políticas da organização/restrições de endpoint VPC ainda podem bloquear o acesso à rede; a emissão do token não requer login no console ou `iam:PassRole`.
|
||||
|
||||
### Impacto
|
||||
- Movimento lateral e escalada de privilégios ao assumir qualquer Studio `UserProfile` cujo ARN seja permitido, herdando seu `ExecutionRole` e sistema de arquivos/apps.
|
||||
|
||||
### Evidência (de um teste controlado)
|
||||
- Com apenas `sagemaker:CreatePresignedDomainUrl` no `UserProfile` alvo, the attacker role retornou com sucesso um `AuthorizedUrl` como:
|
||||
```
|
||||
https://studio-d-xxxxxxxxxxxx.studio.<region>.sagemaker.aws/auth?token=eyJhbGciOi...
|
||||
```
|
||||
- Uma requisição HTTP direta responde com um redirecionamento (HTTP 302) para Studio, confirmando que a URL é válida e ativa até expirar.
|
||||
|
||||
|
||||
## SageMaker MLflow Tracking Server - ATO via CreatePresignedMlflowTrackingServerUrl
|
||||
|
||||
### Descrição
|
||||
Uma identidade com permissão para chamar `sagemaker:CreatePresignedMlflowTrackingServerUrl` para um SageMaker MLflow Tracking Server alvo pode gerar uma URL presignada de uso único que autentica diretamente na UI gerenciada do MLflow desse servidor. Isso concede o mesmo acesso que um usuário legítimo teria ao servidor (visualizar/criar experimentos e execuções, e baixar/enviar artefatos no repositório S3 do servidor) sem acesso ao console ou `iam:PassRole`.
|
||||
|
||||
### Requisitos
|
||||
- Um SageMaker MLflow Tracking Server na conta/região e o seu nome.
|
||||
- O principal atacante precisa de `sagemaker:CreatePresignedMlflowTrackingServerUrl` no recurso MLflow Tracking Server alvo (ou `*`).
|
||||
|
||||
Exemplo de política mínima (limitada a um Tracking Server):
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [
|
||||
{
|
||||
"Effect": "Allow",
|
||||
"Action": "sagemaker:CreatePresignedMlflowTrackingServerUrl",
|
||||
"Resource": "arn:aws:sagemaker:<region>:<account-id>:mlflow-tracking-server/<tracking-server-name>"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
### Etapas de Abuso
|
||||
|
||||
1) Enumere os MLflow Tracking Servers que você pode atingir e escolha um nome
|
||||
```bash
|
||||
aws sagemaker list-mlflow-tracking-servers \
|
||||
--query 'TrackingServerSummaries[].{Name:TrackingServerName,Status:TrackingServerStatus}'
|
||||
TS_NAME=<tracking-server-name>
|
||||
```
|
||||
2) Gerar uma URL pré-assinada do MLflow UI (válida por um curto período)
|
||||
```bash
|
||||
aws sagemaker create-presigned-mlflow-tracking-server-url \
|
||||
--tracking-server-name "$TS_NAME" \
|
||||
--expires-in-seconds 300 \
|
||||
--session-expiration-duration-in-seconds 1800 \
|
||||
--query AuthorizedUrl --output text
|
||||
```
|
||||
3) Abra a URL retornada em um navegador para acessar o MLflow UI como um usuário autenticado desse Tracking Server.
|
||||
|
||||
Notes:
|
||||
- O Tracking Server deve estar em um estado pronto (por exemplo, `Created/Active`). Se ainda estiver `Creating`, a chamada será rejeitada.
|
||||
- A presigned URL é de uso único e de curta duração; gere uma nova quando necessário.
|
||||
|
||||
### Impacto
|
||||
- Acesso direto ao MLflow UI gerenciado do Tracking Server alvo, permitindo visualizar e modificar experiments/runs e recuperar ou enviar artefatos armazenados no S3 artifact store configurado no servidor, dentro das permissões impostas pela configuração do servidor.
|
||||
{{#ref}}
|
||||
../../aws-privilege-escalation/aws-sagemaker-privesc/README.md
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user