AWS - STS Privesc

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, ta politika označava ko može da preuzme kreiranu ulogu. Ako uloga iz istog naloga kaže da neki nalog može da je preuzme, to znači da će taj nalog moći da pristupi ulozi (i potencijalno izvrši privesc).

Na primer, sledeća politika poverenja uloge pokazuje da bilo ko može da je preuzme, dakle bilo koji korisnik će moći da izvrši privesc nad dozvolama povezanim sa tom ulogom.

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

Možete preuzeti ulogu koja se izvršava:

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

Potencijalni uticaj: Privesc to the role.

Caution

Imajte na umu da u ovom slučaju dozvola sts:AssumeRole mora biti navedena u ulozi koju treba zloupotrebiti a ne u politici koja pripada napadaču.
Sa jednim izuzetkom, da biste preuzeli ulogu iz drugog naloga nalog napadača takođe mora imati sts:AssumeRole nad tom ulogom.

sts:AssumeRoleWithSAML

Trust policy sa ovom ulogom daje korisnicima autentifikovanim putem SAML-a mogućnost preuzimanja uloge.

An example of a trust policy with this permission is:

{
"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 kredencijale za preuzimanje uloge, obično možete koristiti nešto poput:

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

Ali provajderi mogu imati svoje alate koji to olakšavaju, kao onelogin-aws-assume-role:

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 sigurnosnih akreditiva za korisnike koji su autentifikovani u mobilnoj, web aplikaciji, EKS… preko provajdera web identiteta. Saznajte više ovde.

Na primer, ako EKS service account treba da može da preuzme 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:

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 workloads izvan AWS da preuzmu IAM role koristeći X.509 sertifikate. Međutim, kada trust policies nisu pravilno ograničene, one se mogu zloupotrebiti za privilege escalation.

Da bi se razumeo ovaj napad, potrebno je objasniti šta je trust anchor. A trust anchor u AWS IAM RolesAnywhere je entitet root of trust — sadrži javni sertifikat Certificate Authority (CA) koji je registrovan na nalogu tako da AWS može da verifikuje predstavljene X.509 sertifikate. Na ovaj način, ako je client certificate izdat od strane te CA i trust anchor je aktivan, AWS ga prepoznaje kao validan.

Pored toga, profile je konfiguracija koja definiše koje atribute X.509 sertifikata (kao što su CN, OU, ili SAN) će biti transformisane u session tags, i ti tagovi će se kasnije upoređivati sa uslovima trust policy.

Ova policy nema ograničenja koji trust anchor ili atributi sertifikata su dozvoljeni. Kao rezultat, bilo koji sertifikat vezan za bilo koji trust anchor u nalogu može se iskoristiti za preuzimanje ove role.

{
"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 validan sertifikat, attacker može pivot into the higher privilege role

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

The trust anchor potvrđuje da klijentov readonly.pem sertifikat potiče od ovlašćenog CA, i u okviru tog readonly.pem sertifikata nalazi se javni ključ koji AWS koristi da verifikuje da je potpis napravljen odgovarajućim privatnim ključem readonly.key.

Sertifikat takođe pruža atribute (kao što su CN ili OU) koje default profil transformiše u tagove, koje politika poverenja role može koristiti da odluči da li da odobri pristup. Ako u politici poverenja nema uslova, ti tagovi nemaju svrhu i pristup se dodeljuje bilo kome ko ima važeći sertifikat.

Za ovaj napad da bi bio moguć, i čvor poverenja i default profil moraju biti aktivni.

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