Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat

This commit is contained in:
Translator
2026-01-13 13:30:57 +00:00
parent dd2eaf649c
commit 8a59093a6f
@@ -2,9 +2,9 @@
{{#include ../../../../banners/hacktricks-training.md}}
## RDS - Реляційний сервіс баз даних
## RDS - Реляційна служба баз даних
Для отримання додаткової інформації про RDS дивіться:
Для отримання додаткової інформації про RDS див.:
{{#ref}}
../../aws-services/aws-relational-database-rds-enum.md
@@ -12,7 +12,7 @@
### `rds:ModifyDBInstance`
З цим дозволом зловмисник може **modify the password of the master user**, та змінити login всередині бази даних:
Маючи цей дозвіл, зловмисник може **змінити пароль головного користувача**, а також логін у базі даних:
```bash
# Get the DB username, db name and address
aws rds describe-db-instances
@@ -27,30 +27,30 @@ aws rds modify-db-instance \
psql postgresql://<username>:<pass>@<rds-dns>:5432/<db-name>
```
> [!WARNING]
> Вам потрібно мати можливість **зв'язатися з базою даних** (зазвичай вони доступні лише зсередини мереж).
> Вам потрібно мати можливість **зв'язатися з базою даних** (вони зазвичай доступні лише зсередини мереж).
**Потенційний вплив:** Знайти конфіденційну інформацію в базах даних.
**Potential Impact:** Знаходження чутливої інформації всередині баз даних.
### rds-db:connect
Згідно з [**docs**](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html) користувач з цим дозволом може підключитися до екземпляра бази даних.
According to the [**docs**](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html) користувач з цим дозволом може підключитися до DB instance.
### Зловживання дозволами IAM ролі RDS
### Abuse RDS Role IAM permissions
#### Postgresql (Aurora)
> [!TIP]
> Якщо при виконанні **`SELECT datname FROM pg_database;`** ви знайдете базу даних з назвою **`rdsadmin`**, це означає, що ви перебуваєте всередині **AWS postgresql database**.
> Якщо при виконанні **`SELECT datname FROM pg_database;`** ви знайдете базу даних з назвою **`rdsadmin`**, ви знаходитесь всередині **AWS postgresql database**.
Спочатку ви можете перевірити, чи використовувалась ця база даних для доступу до інших сервісів AWS. Це можна зробити, переглянувши встановлені розширення:
Спочатку ви можете перевірити, чи ця база даних використовувалася для доступу до інших сервісів AWS. Ви можете перевірити це, переглянувши встановлені extensions:
```sql
SELECT * FROM pg_extension;
```
Якщо ви знайдете щось на кшталт **`aws_s3`** ви можете припустити, що ця база даних має **якийсь доступ до S3** (є й інші розширення, такі як **`aws_ml`** та **`aws_lambda`**).
Якщо ви знайдете щось на кшталт **`aws_s3`**, можна припустити, що ця база даних має **певний доступ до S3** (існують інші розширення, такі як **`aws_ml`** і **`aws_lambda`**).
Крім того, якщо у вас є дозволи запускати **`aws rds describe-db-clusters`** ви зможете там побачити, чи **кластер має приєднану IAM Role** в полі **`AssociatedRoles`**. Якщо так, ви можете припустити, що база даних була **підготовлена для доступу до інших сервісів AWS**. На основі **імені ролі** (або якщо ви зможете отримати **дозволи** ролі) ви могли б **здогадатися** який додатковий доступ має база даних.
Також, якщо у вас є дозволи запускати **`aws rds describe-db-clusters`**, ви можете побачити там, чи **до кластера прикріплена будь-яка IAM Role** в полі **`AssociatedRoles`**. Якщо так, можна припустити, що база даних була **підготовлена для доступу до інших сервісів AWS**. Виходячи з **назви ролі** (або якщо ви можете отримати **дозволи** ролі), ви могли б **припустити**, який додатковий доступ має база даних.
Тепер, щоб **прочитати файл всередині bucket'а** вам потрібно знати повний шлях. Ви можете прочитати його за допомогою:
Тепер, щоб **прочитати файл у bucket** вам потрібно знати повний шлях. Ви можете прочитати його за допомогою:
```sql
// Create table
CREATE TABLE ttemp (col TEXT);
@@ -71,7 +71,7 @@ SELECT * from ttemp;
// Delete table
DROP TABLE ttemp;
```
Якщо б у вас були **raw AWS credentials**, ви також могли б використати їх для доступу до даних S3 за допомогою:
Якби у вас були **raw AWS credentials**, ви також могли б використати їх для доступу до даних S3 за допомогою:
```sql
SELECT aws_s3.table_import_from_s3(
't', '', '(format csv)',
@@ -80,18 +80,18 @@ aws_commons.create_aws_credentials('sample_access_key', 'sample_secret_key', '')
);
```
> [!NOTE]
> Postgresql **не потрібно змінювати будь-яку змінну parameter group**, щоб мати доступ до S3.
> Postgresql **не потрібно змінювати жодну змінну групи параметрів**, щоб мати доступ до S3.
#### Mysql (Aurora)
> [!TIP]
> Всередині mysql, якщо ви виконаєте запит **`SELECT User, Host FROM mysql.user;`** і там є користувач **`rdsadmin`**, можна припустити, що ви знаходитесь в **AWS RDS mysql db**.
> У 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.
У 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).
Також, якщо у вас є права виконувати **`aws rds describe-db-clusters`**, ви можете перевірити, чи кластер має якийсь **associated role**, що зазвичай означає доступ до AWS services).
Тепер, щоб **прочитати файл всередині bucket**, вам потрібно знати повний шлях. Ви можете прочитати його за допомогою:
Тепер, щоб **прочитати файл в bucket** вам потрібно знати повний шлях. Ви можете прочитати його за допомогою:
```sql
CREATE TABLE ttemp (col TEXT);
LOAD DATA FROM S3 's3://mybucket/data.txt' INTO TABLE ttemp(col);
@@ -100,16 +100,16 @@ DROP TABLE ttemp;
```
### `rds:AddRoleToDBCluster`, `iam:PassRole`
Зловмисник з дозволами `rds:AddRoleToDBCluster` та `iam:PassRole` може **додати зазначену роль до існуючого RDS instance**. Це може дозволити зловмиснику **отримати доступ до конфіденційних даних** або змінити дані всередині RDS instance.
Зловмисник з дозволами `rds:AddRoleToDBCluster` та `iam:PassRole` може **додати вказану роль до існуючого RDS instance**. Це може дозволити зловмиснику **отримати доступ до чутливих даних** або змінити дані всередині інстансу.
```bash
aws add-role-to-db-cluster --db-cluster-identifier <value> --role-arn <value>
```
**Потенційний вплив**: Доступ до конфіденційних даних або несанкціоновані зміни даних в екземплярі RDS.\
Зверніть увагу, що деякі DBs вимагають додаткових конфігурацій, такі як Mysql, для яких також потрібно вказати role ARN в aprameter groups.
**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**. Він не зможе змінити пароль головного користувача, але може зуміти відкрити новий екземпляр бази даних в інтернет:
Маючи лише цей дозвіл, нападник може створити **новий екземпляр всередині кластера**, який вже існує і до якого приєднано **IAM role**. Він не зможе змінити master user password, але може зробити новий екземпляр бази даних доступним з інтернету:
```bash
aws --region eu-west-1 --profile none-priv rds create-db-instance \
--db-instance-identifier mydbinstance2 \
@@ -122,30 +122,50 @@ aws --region eu-west-1 --profile none-priv rds create-db-instance \
### `rds:CreateDBInstance`, `iam:PassRole`
> [!NOTE]
> TODO: Потрібно протестувати
> TODO: Перевірити
Зловмисник із дозволами `rds:CreateDBInstance` та `iam:PassRole` може **створити новий RDS instance з прикріпленою вказаною роллю**. Зловмисник тоді потенційно може **отримати доступ до конфіденційних даних** або змінити дані всередині інстансу.
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]
> Деякі вимоги до role/instance-profile для прикріплення (з [**here**](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)):
>
> - Профіль має існувати у вашому акаунті.
> - Профіль повинен мати IAM роль, яку Amazon EC2 має дозволи assume.
> - Ім'я instance profile та пов'язане ім'я IAM ролі повинні починатися з префіксу `AWSRDSCustom` .
> Some requirements of the role/instance-profile to attach (from [**here**](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)):
> - Профіль має існувати у вашому обліковому записі.
> - Профіль має містити IAM роль, яку Amazon EC2 має право взяти на себе.
> - Ім'я instance profile та повязане ім'я IAM ролі мають починатися з префікса `AWSRDSCustom`.
```bash
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
```
**Potential Impact**: Доступ до конфіденційних даних або несанкціоновані зміни даних в RDS інстансі.
**Можливий вплив**: Доступ до конфіденційних даних або несанкціоновані зміни даних у RDS instance.
### `rds:AddRoleToDBInstance`, `iam:PassRole`
Зловмисник з дозволами `rds:AddRoleToDBInstance` та `iam:PassRole` може **додати вказану роль до існуючого RDS інстансу**. Це може дозволити зловмисникові **отримати доступ до конфіденційних даних** або змінювати дані всередині інстансу.
Атакувальник з дозволами `rds:AddRoleToDBInstance` і `iam:PassRole` може **додати вказану роль до існуючого RDS instance**. Це може дозволити атакувальнику **отримати доступ до конфіденційних даних** або змінювати дані в інстансі.
> [!WARNING]
> DB instance має бути поза кластером, щоб це спрацювало
> DB instance має бути поза кластером для цього
```bash
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.
**Потенційний вплив**: доступ до конфіденційних даних або несанкціоновані зміни даних в екземплярі RDS.
### `rds:CreateBlueGreenDeployment`, `rds:AddRoleToDBCluster`, `iam:PassRole`, `rds:SwitchoverBlueGreenDeployment`
Зловмисник із цими дозволами може клонувати продукційну базу даних (Blue), прикріпити до клону IAM role з високими привілеями (Green), а потім використати switchover, щоб замінити продукційне середовище. Це дозволяє зловмиснику підвищити привілеї бази даних і отримати несанкціонований доступ до інших ресурсів AWS.
```bash
# 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) зсередини бази даних.
{{#include ../../../../banners/hacktricks-training.md}}