AWS - STS Privesc
Reading time: 8 minutes
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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
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
潜在的な影響: 役割への権限昇格。
caution
この場合、権限 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
Federation Abuse
IAM Roles Anywhere Privesc
AWS IAM RolesAnywhereは、AWS外部のワークロードがX.509証明書を使用してIAMロールを引き受けることを可能にします。しかし、信頼ポリシーが適切にスコープされていない場合、特権昇格に悪用される可能性があります。
このポリシーは、どの信頼アンカーまたは証明書属性が許可されるかに制限がありません。その結果、アカウント内の任意の信頼アンカーに結びつけられた任意の証明書を使用してこのロールを引き受けることができます。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "rolesanywhere.amazonaws.com"
},
"Action": [
"sts:AssumeRole",
"sts:SetSourceIdentity",
"sts:TagSession"
]
}
]
}
プライベートエスカレーションには、https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html からの aws_signing_helper
が必要です。
次に、有効な証明書を使用して、攻撃者はより高い権限のロールにピボットできます。
aws_signing_helper credential-process \
--certificate readonly.pem \
--private-key readonly.key \
--trust-anchor-arn arn:aws:rolesanywhere:us-east-1:123456789012:trust-anchor/ta-id \
--profile-arn arn:aws:rolesanywhere:us-east-1:123456789012:profile/default \
--role-arn arn:aws:iam::123456789012:role/Admin
参考文献
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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。