AWS - STS Privesc
Reading time: 5 minutes
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.
STS
sts:AssumeRole
Ogni ruolo è creato con una policy di fiducia del ruolo, questa policy indica chi può assumere il ruolo creato. Se un ruolo dello stesso account dice che un account può assumerlo, significa che l'account sarà in grado di accedere al ruolo (e potenzialmente privesc).
Ad esempio, la seguente policy di fiducia del ruolo indica che chiunque può assumerlo, quindi qualsiasi utente sarà in grado di privesc ai permessi associati a quel ruolo.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "sts:AssumeRole"
}
]
}
Puoi impersonare un ruolo eseguendo:
aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname
Impatto Potenziale: Privesc al ruolo.
caution
Nota che in questo caso il permesso sts:AssumeRole
deve essere indicato nel ruolo da abusare e non in una policy appartenente all'attaccante.
Con un'eccezione, per assumere un ruolo da un account diverso l'account attaccante deve anche avere il sts:AssumeRole
sul ruolo.
sts:GetFederationToken
Con questo permesso è possibile generare credenziali per impersonare qualsiasi utente:
aws sts get-federation-token --name <username>
Questo è il modo in cui questo permesso può essere concesso in modo sicuro senza dare accesso a impersonare altri utenti:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "sts:GetFederationToken",
"Resource": "arn:aws:sts::947247140022:federated-user/${aws:username}"
}
]
}
sts:AssumeRoleWithSAML
Una policy di fiducia con questo ruolo concede agli utenti autenticati tramite SAML l'accesso per impersonare il ruolo.
Un esempio di una policy di fiducia con questo permesso è:
{
"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"
}
}
}
]
}
Per generare credenziali per impersonare il ruolo in generale, potresti usare qualcosa come:
aws sts assume-role-with-saml --role-arn <value> --principal-arn <value>
Ma i provider potrebbero avere i loro strumenti per rendere questo più facile, come onelogin-aws-assume-role:
onelogin-aws-assume-role --onelogin-subdomain mettle --onelogin-app-id 283740 --aws-region eu-west-1 -z 3600
Impatto Potenziale: Privesc al ruolo.
sts:AssumeRoleWithWebIdentity
Questo permesso consente di ottenere un insieme di credenziali di sicurezza temporanee per utenti che sono stati autenticati in un'applicazione mobile, web, EKS... con un provider di identità web. Scopri di più qui.
Ad esempio, se un account di servizio EKS dovrebbe essere in grado di impersonare un ruolo IAM, avrà un token in /var/run/secrets/eks.amazonaws.com/serviceaccount/token
e può assumere il ruolo e ottenere credenziali facendo qualcosa come:
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
Abuso di Federazione
Privesc di IAM Roles Anywhere
AWS IAM RolesAnywhere consente ai carichi di lavoro al di fuori di AWS di assumere ruoli IAM utilizzando certificati X.509. Ma quando le politiche di fiducia non sono correttamente definite, possono essere abusate per l'escalation dei privilegi.
Questa politica manca di restrizioni su quali ancore di fiducia o attributi del certificato sono consentiti. Di conseguenza, qualsiasi certificato legato a qualsiasi ancoraggio di fiducia nell'account può essere utilizzato per assumere questo ruolo.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "rolesanywhere.amazonaws.com"
},
"Action": [
"sts:AssumeRole",
"sts:SetSourceIdentity",
"sts:TagSession"
]
}
]
}
Per il privesc, è necessario aws_signing_helper
da https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html
Quindi, utilizzando un certificato valido, l'attaccante può passare al ruolo con privilegi superiori.
aws_signing_helper credential-process \
--certificate readonly.pem \
--private-key readonly.key \
--trust-anchor-arn arn:aws:rolesanywhere:us-east-1:123456789012:trust-anchor/ta-id \
--profile-arn arn:aws:rolesanywhere:us-east-1:123456789012:profile/default \
--role-arn arn:aws:iam::123456789012:role/Admin
Riferimenti
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.