AWS - STS Privesc

Reading time: 6 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 role huundwa na role trust policy, sera hii inaonyesha nani anaweza kuchukua role iliyoundwa. Iwapo role kutoka kwa akaunti ile ile inasema kwamba akaunti inaweza kui-chukua, hiyo inamaanisha akaunti itakuwa na uwezo wa kufikia role (na labda privesc).

Kwa mfano, role trust policy ifuatayo inaonyesha kwamba mtu yeyote anaweza kui-chukua, kwa hiyo mtumiaji yeyote ataweza kufanya privesc kwa ruhusa zinazohusishwa na role hiyo.

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

Unaweza kuiga role inayoendesha:

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

Athari Inayoweza Kutokea: Privesc kwa role.

caution

Kumbuka kwamba katika kesi hii ruhusa sts:AssumeRole inahitaji kuwa imeainishwa kwenye role ya kutumika na si katika sera inayomilikiwa na mshambuliaji.
Isipokuwa kwa ubaguzi mmoja, ili kuchukua role kutoka kwa account tofauti akaunti ya mshambuliaji pia inahitaji kuwa na sts:AssumeRole juu ya role.

sts:AssumeRoleWithSAML

Sera ya trust yenye role hii inawapa watumiaji walioidhinishwa kupitia SAML ufikiaji wa kujifanya role.

Mfano wa trust policy 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 kuzalisha credentials ili kujifanya kama role, 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 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

Potential Impact: Privesc kwa role.

sts:AssumeRoleWithWebIdentity

Ruhusa hii inampa uwezo wa kupata seti ya vitambulisho vya muda kwa watumiaji walioidhinishwa katika programu za simu, programu za wavuti, EKS... kupitia mtoa utambulisho wa wavuti. Learn more here.

Kwa mfano, ikiwa EKS service account inapaswa kuweza impersonate an IAM role, itakuwa na token katika /var/run/secrets/eks.amazonaws.com/serviceaccount/token na inaweza assume the role and get credentials kwa kufanya 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

Federation Abuse

AWS - Federation Abuse

IAM Roles Anywhere Privesc

AWS IAM Roles Anywhere inaruhusu workloads zilizo nje ya AWS kuteua IAM roles kwa kutumia vyeti vya X.509. Lakini pale sera za imani hazijatengwa vizuri, zinaweza kutumika vibaya kwa ajili ya privilege escalation.

Ili kuelewa shambulio hili, ni muhimu kueleza ni nini trust anchor. Trust anchor katika AWS IAM Roles Anywhere ni chanzo cha imani (root of trust); ina cheti la umma la Certificate Authority (CA) lililosajiliwa katika akaunti ili AWS iweze kuthibitisha vyeti vya X.509 vilivyowasilishwa. Kwa njia hii, ikiwa cheti cha mteja kilitolewa na CA hiyo na trust anchor iko hai, AWS kinakitambua kuwa halali.

Zaidi ya hayo, profaili ni usanidi unaoelezea ni sifa gani za cheti cha X.509 (kama CN, OU, au SAN) zitakazogeuzwa kuwa tagi za kikao, na tagi hizi baadaye zitalinganishwa dhidi ya masharti ya sera za imani.

Sera hii haijaweka vizuizi juu ya nguzo za imani (trust anchor) au sifa za cheti zinazoruhusiwa. Matokeo yake, cheti chochote kilichounganishwa na nguzo yoyote ya imani katika akaunti kinaweza kutumika kuteua role hii.

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

Ili kufanya privesc, aws_signing_helper inahitajika kutoka https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html

Kisha, kwa kutumia cheti halali, mshambuliaji anaweza pivot into role yenye ruhusa za juu

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

Trust anchor inathibitisha kwamba cheti la mteja readonly.pem linatoka kwa CA yake iliyoruhusiwa, na ndani ya cheti hicho readonly.pem kuna ufunguo wa umma ambao AWS hutumia kuthibitisha kwamba saini ilitengenezwa kwa kutumia ufunguo wake wa faragha unaolingana readonly.key.

Cheti pia kinatoa sifa (kama CN au OU) ambazo default profile hubadilisha kuwa tags, ambazo trust policy ya role inaweza kutumia kuamua iwapo itaruhusu upatikanaji. Ikiwa hakuna masharti katika trust policy, tags hizo hazina matumizi, na upatikanaji unatolewa kwa mtu yeyote mwenye cheti halali.

Ili shambulio hili liwezekane, trust anchor na default profile zote lazima ziwe hai.

Marejeleo

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