AWS - STS Privesc

Support HackTricks

STS

sts:AssumeRole

すべてのロールはロール信頼ポリシーで作成され、このポリシーは誰が作成されたロールを引き受けることができるかを示します。同じアカウントのロールがアカウントがそれを引き受けることができると言っている場合、それはそのアカウントがロールにアクセスできることを意味します(そして潜在的にprivesc)。

例えば、次のロール信頼ポリシーは誰でもそれを引き受けることができることを示しているため、任意のユーザーがそのロールに関連付けられた権限にprivescできることになります。

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "sts:AssumeRole"
}
]
}

あなたは次のコマンドを実行することで、ロールを偽装できます:

aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname

潜在的な影響: 役割への権限昇格。

この場合、権限 sts:AssumeRole悪用する役割に明示される必要があり、攻撃者に属するポリシーには含まれません。 一つの例外を除き、異なるアカウントから役割を引き受けるためには、攻撃者アカウントもその役割に対して sts:AssumeRole を持っている必要があります。

sts:GetFederationToken

この権限を持つことで、任意のユーザーを偽装するための資格情報を生成することが可能です:

aws sts get-federation-token --name <username>

これは、他のユーザーを偽装するアクセスを与えずに、この権限を安全に付与する方法です:

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "sts:GetFederationToken",
"Resource": "arn:aws:sts::947247140022:federated-user/${aws:username}"
}
]
}

sts:AssumeRoleWithSAML

このロールの信頼ポリシーは、SAMLを介して認証されたユーザーにロールを偽装するアクセスを許可します。

この権限を持つ信頼ポリシーの例は次のとおりです:

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "OneLogin",
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::290594632123:saml-provider/OneLogin"
},
"Action": "sts:AssumeRoleWithSAML",
"Condition": {
"StringEquals": {
"SAML:aud": "https://signin.aws.amazon.com/saml"
}
}
}
]
}

一般的に、ロールを偽装するための資格情報を生成するには、次のようなものを使用できます:

aws sts  assume-role-with-saml --role-arn <value> --principal-arn <value>

しかし、プロバイダーは、これを簡単にするための独自のツールを持っているかもしれません。例えば、onelogin-aws-assume-role:

onelogin-aws-assume-role --onelogin-subdomain mettle --onelogin-app-id 283740 --aws-region eu-west-1 -z 3600

潜在的な影響: 役割への権限昇格。

sts:AssumeRoleWithWebIdentity

この権限は、モバイル、ウェブアプリケーション、EKS... でウェブアイデンティティプロバイダーを使用して認証されたユーザーのために、一連の一時的なセキュリティ資格情報を取得する権限を付与します。ここで詳しく学ぶ。

例えば、EKSサービスアカウントIAMロールを偽装できる必要がある場合、/var/run/secrets/eks.amazonaws.com/serviceaccount/token にトークンがあり、次のようにしてロールを引き受けて資格情報を取得できます:

aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/<role_name> --role-session-name something --web-identity-token file:///var/run/secrets/eks.amazonaws.com/serviceaccount/token
# The role name can be found in the metadata of the configuration of the pod

フェデレーションの悪用

HackTricksをサポートする

Last updated