AWS - STS Privesc

Reading time: 4 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

STS

sts:AssumeRole

Chaque r么le est cr茅茅 avec une politique de confiance de r么le, cette politique indique qui peut assumer le r么le cr茅茅. Si un r么le du m锚me compte indique qu'un compte peut l'assumer, cela signifie que le compte pourra acc茅der au r么le (et potentiellement privesc).

Par exemple, la politique de confiance de r么le suivante indique que n'importe qui peut l'assumer, donc tout utilisateur pourra privesc aux permissions associ茅es 脿 ce r么le.

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

Vous pouvez usurper un r么le en ex茅cutant :

bash
aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname

Impact potentiel : Privesc au r么le.

caution

Notez que dans ce cas, la permission sts:AssumeRole doit 锚tre indiqu茅e dans le r么le 脿 abuser et non dans une politique appartenant 脿 l'attaquant.
Avec une exception, afin de prendre un r么le d'un compte diff茅rent, le compte de l'attaquant doit 茅galement avoir le sts:AssumeRole sur le r么le.

sts:GetFederationToken

Avec cette permission, il est possible de g茅n茅rer des identifiants pour usurper n'importe quel utilisateur :

bash
aws sts get-federation-token --name <username>

C'est ainsi que cette permission peut 锚tre accord茅e en toute s茅curit茅 sans donner acc猫s 脿 l'imitation d'autres utilisateurs :

json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "sts:GetFederationToken",
"Resource": "arn:aws:sts::947247140022:federated-user/${aws:username}"
}
]
}

sts:AssumeRoleWithSAML

Une politique de confiance avec ce r么le accorde aux utilisateurs authentifi茅s via SAML l'acc猫s pour usurper le r么le.

Un exemple de politique de confiance avec cette autorisation est :

json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "OneLogin",
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::290594632123:saml-provider/OneLogin"
},
"Action": "sts:AssumeRoleWithSAML",
"Condition": {
"StringEquals": {
"SAML:aud": "https://signin.aws.amazon.com/saml"
}
}
}
]
}

Pour g茅n茅rer des identifiants afin d'usurper le r么le, vous pourriez utiliser quelque chose comme :

bash
aws sts  assume-role-with-saml --role-arn <value> --principal-arn <value>

Mais les fournisseurs peuvent avoir leurs propres outils pour faciliter cela, comme onelogin-aws-assume-role :

bash
onelogin-aws-assume-role --onelogin-subdomain mettle --onelogin-app-id 283740 --aws-region eu-west-1 -z 3600

Impact potentiel : Privesc au r么le.

sts:AssumeRoleWithWebIdentity

Cette autorisation permet d'obtenir un ensemble de credentials de s茅curit茅 temporaires pour les utilisateurs qui ont 茅t茅 authentifi茅s dans une application mobile, web, EKS... avec un fournisseur d'identit茅 web. En savoir plus ici.

Par exemple, si un compte de service EKS doit 锚tre capable de se faire passer pour un r么le IAM, il aura un jeton dans /var/run/secrets/eks.amazonaws.com/serviceaccount/token et peut assumer le r么le et obtenir des credentials en faisant quelque chose comme :

bash
aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/<role_name> --role-session-name something --web-identity-token file:///var/run/secrets/eks.amazonaws.com/serviceaccount/token
# The role name can be found in the metadata of the configuration of the pod

Abus de f茅d茅ration

AWS - Federation Abuse

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