AWS - IAM & STS Unauthenticated Enum
Last updated
Last updated
Leer & oefen AWS Hacking:HackTricks Opleiding AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)
Hierdie tegniek werk nie meer nie, aangesien jy altyd hierdie fout kry, ongeag of die rol bestaan of nie:
An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::947247140022:user/testenv is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::429217632764:role/account-balanceasdas
Jy kan toets dit deur:
aws sts assume-role --role-arn arn:aws:iam::412345678909:role/superadmin --role-session-name s3-access-example
Die poging om 'n rol aan te neem sonder die nodige toestemmings aktiveer 'n AWS foutboodskap. Byvoorbeeld, as jy nie gemagtig is nie, kan AWS teruggee:
Hierdie boodskap bevestig die rol se bestaan, maar dui aan dat sy aanneemrolbeleid nie jou aanneming toelaat nie. In teenstelling hiermee, probeer om 'n nie-bestaande rol aan te neem lei tot 'n ander fout:
Interessant genoeg is hierdie metode van onderskeiding tussen bestaande en nie-bestaande rolle toepaslik selfs oor verskillende AWS-rekeninge. Met 'n geldige AWS-rekening ID en 'n geteikende woordlys, kan 'n mens die rolle in die rekening opnoem sonder om enige inherente beperkings te ondervind.
Jy kan hierdie script gebruik om potensiële principals op te noem wat hierdie probleem misbruik.
Om 'n IAM rol se vertrou beleid te konfigureer of op te dateer, behels dit om te definieer watter AWS hulpbronne of dienste toegelaat word om daardie rol aan te neem en tydelike kredensiale te verkry. As die gespesifiseerde hulpbron in die beleid bestaande is, stoor die vertrou beleid suksesvol. As die hulpbron nie bestaan nie, word 'n fout gegenereer, wat aandui dat 'n ongeldige principal verskaf is.
Let daarop dat jy in daardie hulpbron 'n kruisrekening rol of gebruiker kan spesifiseer:
arn:aws:iam::acc_id:role/role_name
arn:aws:iam::acc_id:user/user_name
Dit is 'n beleidsvoorbeeld:
Dit is die fout wat jy sal vind as jy 'n rol wat nie bestaan nie gebruik. As die rol bestaan, sal die beleid gestoor word sonder enige foute. (Die fout is vir opdatering, maar dit werk ook wanneer jy skep)
You can automate this process with https://github.com/carlospolop/aws_tools
bash unauth_iam.sh -t user -i 316584767888 -r TestRole -w ./unauth_wordlist.txt
Ons gebruik Pacu:
run iam__enum_users --role-name admin --account-id 229736458923 --word-list /tmp/names.txt
run iam__enum_roles --role-name admin --account-id 229736458923 --word-list /tmp/names.txt
Die admin
rol wat in die voorbeeld gebruik word, is 'n rol in jou rekening wat deur pacu geïmpersonifiseer moet word om die beleide te skep wat dit nodig het om die enumerasie te skep
In die geval dat die rol sleg gekonfigureer was en enige iemand toelaat om dit aan te neem:
Die aanvaller kan dit eenvoudig aanneem.
Stel jou voor dat jy daarin slaag om 'n Github Actions workflow te lees wat toegang het tot 'n rol binne AWS. Hierdie vertroue mag toegang gee tot 'n rol met die volgende vertrouensbeleid:
Hierdie vertrouensbeleid mag korrek wees, maar die gebrek aan meer voorwaardes behoort jou te laat wantrou. Dit is omdat die vorige rol deur ENIGEEN van Github Actions aanvaar kan word! Jy moet ook ander dinge soos org naam, repo naam, omgewing, tak in die voorwaardes spesifiseer...
'n Ander potensiële miskonfigurasie is om 'n voorwaarde soos die volgende by te voeg:
Let daarop dat wildcard (*) voor die kolon (:). Jy kan 'n org soos org_name1 skep en die rol aanvaar vanuit 'n Github Action.
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)