AWS - STS Privesc

Reading time: 5 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

STS

sts:AssumeRole

Svaka uloga se kreira sa politikom poverenja uloge, ova politika označava ko može da preuzme kreiranu ulogu. Ako uloga iz iste račun kaže da neki račun može da je preuzme, to znači da će taj račun moći da pristupi ulozi (i potencijalno privesc).

Na primer, sledeća politika poverenja uloge označava da bilo ko može da je preuzme, stoga bilo koji korisnik će moći da privesc na dozvole povezane sa tom ulogom.

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

Možete se pretvarati da ste uloga koja se izvršava:

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

Potential Impact: Privesc do uloge.

caution

Imajte na umu da u ovom slučaju dozvola sts:AssumeRole treba da bude naznačena u ulozi koju treba zloupotrebiti i ne u politici koja pripada napadaču.
Sa jednim izuzetkom, da bi se preuzela uloga iz drugog naloga napadačev nalog takođe treba da ima sts:AssumeRole nad ulogom.

sts:GetFederationToken

Sa ovom dozvolom moguće je generisati akreditive za impersonaciju bilo kog korisnika:

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

Ovo je kako se ova dozvola može dati sigurno bez davanja pristupa za imitaciju drugih korisnika:

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

sts:AssumeRoleWithSAML

Politika poverenja sa ovom ulogom omogućava korisnicima koji su autentifikovani putem SAML da se pretvaraju da su uloga.

Primer politike poverenja sa ovom dozvolom je:

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"
}
}
}
]
}

Da biste generisali akreditive za impersonaciju uloge, mogli biste koristiti nešto poput:

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

Ali provajderi mogu imati svoje alate kako bi to olakšali, poput onelogin-aws-assume-role:

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

Potencijalni uticaj: Privesc na ulogu.

sts:AssumeRoleWithWebIdentity

Ova dozvola omogućava dobijanje skupa privremenih bezbednosnih kredencijala za korisnike koji su autentifikovani u mobilnoj, web aplikaciji, EKS... sa provajderom web identiteta. Saznajte više ovde.

Na primer, ako EKS servisni nalog treba da može da imitira IAM ulogu, imaće token u /var/run/secrets/eks.amazonaws.com/serviceaccount/token i može da preuzme ulogu i dobije kredencijale radeći nešto poput:

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

Federation Abuse

AWS - Federation Abuse

IAM Roles Anywhere Privesc

AWS IAM RolesAnywhere omogućava radnim opterećenjima van AWS-a da preuzmu IAM uloge koristeći X.509 sertifikate. Međutim, kada politike poverenja nisu pravilno definisane, mogu se zloupotrebiti za eskalaciju privilegija.

Ova politika nema ograničenja o tome koji su trust anchor ili atributi sertifikata dozvoljeni. Kao rezultat, svaki sertifikat povezan sa bilo kojim trust anchor u nalogu može se koristiti za preuzimanje ove uloge.

json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "rolesanywhere.amazonaws.com"
},
"Action": [
"sts:AssumeRole",
"sts:SetSourceIdentity",
"sts:TagSession"
]
}
]
}

Za privesc, aws_signing_helper je potreban sa https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html

Zatim, koristeći važeći sertifikat, napadač može preći u ulogu sa višim privilegijama.

bash
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

References

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks