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

This commit is contained in:
Translator
2026-01-13 13:29:39 +00:00
parent 990c83a2b3
commit a569bea440
@@ -4,7 +4,7 @@
## RDS - Relational Database Service
Aby uzyskać więcej informacji o RDS sprawdź:
Aby uzyskać więcej informacji o RDS, sprawdź:
{{#ref}}
../../aws-services/aws-relational-database-rds-enum.md
@@ -12,7 +12,7 @@ Aby uzyskać więcej informacji o RDS sprawdź:
### `rds:ModifyDBInstance`
Dzięki temu uprawnieniu atakujący może **zmienić hasło użytkownika master**, oraz login wewnątrz bazy danych:
Dzięki temu uprawnieniu atakujący może **zmodyfikować hasło użytkownika głównego**, oraz login w bazie danych:
```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]
> Będziesz musiał mieć możliwość **połączenia się z bazą danych** (zazwyczaj są one dostępne tylko z sieci wewnętrznych).
>
> **Potential Impact:** Odszukanie wrażliwych informacji w bazach danych.
>
> ### rds-db:connect
>
> Zgodnie z {**docs**}(https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html) użytkownik z tym uprawnieniem może połączyć się z instancją DB.
>
> ### Abuse RDS Role IAM permissions
>
> #### Postgresql (Aurora)
>
> > [!TIP]
> > Jeśli uruchamiając **`SELECT datname FROM pg_database;`** znajdziesz bazę danych o nazwie **`rdsadmin`**, wiesz, że jesteś wewnątrz **AWS postgresql database**.
>
> Najpierw możesz sprawdzić, czy ta baza danych była używana do dostępu do innych usług AWS. Możesz to sprawdzić, patrząc na zainstalowane rozszerzenia:
> Będziesz musiał mieć możliwość **połączenia się z bazą danych** (zwykle są dostępne tylko z sieci wewnętrznych).
**Potential Impact:** Odszukanie wrażliwych informacji wewnątrz baz danych.
### rds-db:connect
According to the [**docs**](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html) a user with this permission could connect to the DB instance.
### Nadużycie uprawnień roli RDS IAM
#### Postgresql (Aurora)
> [!TIP]
> Jeśli uruchamiając **`SELECT datname FROM pg_database;`** znajdziesz bazę danych o nazwie **`rdsadmin`**, wiesz, że jesteś w **AWS postgresql database**.
Najpierw możesz sprawdzić, czy ta baza danych była używana do dostępu do innych usług AWS. Możesz to sprawdzić, patrząc na zainstalowane rozszerzenia:
```sql
SELECT * FROM pg_extension;
```
Jeśli znajdziesz coś takiego jak **`aws_s3`** możesz założyć, że ta baza danych ma **jakiegoś rodzaju dostęp do S3** (są też inne rozszerzenia, takie jak **`aws_ml`** i **`aws_lambda`**).
Jeśli znajdziesz coś takiego jak **`aws_s3`** możesz założyć, że ta baza danych ma **jakiś rodzaj dostępu do S3** (są też inne rozszerzenia, takie jak **`aws_ml`** i **`aws_lambda`**).
Ponadto, jeśli masz uprawnienia do uruchomienia **`aws rds describe-db-clusters`** możesz tam zobaczyć, czy **klaster ma przypisaną jakąkolwiek IAM Role** w polu **`AssociatedRoles`**. Jeśli tak, możesz założyć, że baza danych została **przygotowana do dostępu do innych usług AWS**. Na podstawie **nazwy roli** (albo jeśli uda ci się uzyskać **uprawnienia** tej roli) możesz **zgadnąć**, jaki dodatkowy dostęp ma baza danych.
Również, jeśli masz uprawnienia do uruchomienia **`aws rds describe-db-clusters`** możesz tam zobaczyć, czy **klaster ma przypisaną jakąkolwiek IAM Role** w polu **`AssociatedRoles`**. Jeśli tak, możesz założyć, że baza danych była **przygotowana do dostępu do innych usług AWS**. Na podstawie **nazwy roli** (albo jeśli możesz uzyskać **uprawnienia** roli) możesz **zgadnąć**, jaki dodatkowy dostęp ma baza danych.
Teraz, aby **odczytać plik wewnątrz bucket** musisz znać pełną ścieżkę. Możesz go odczytać za pomocą:
Teraz, aby **odczytać plik wewnątrz bucketu** musisz znać pełną ścieżkę. Możesz go odczytać za pomocą:
```sql
// Create table
CREATE TABLE ttemp (col TEXT);
@@ -71,7 +71,7 @@ SELECT * from ttemp;
// Delete table
DROP TABLE ttemp;
```
Gdybyś miał(a) **raw AWS credentials**, mógłbyś również użyć ich do uzyskania dostępu do danych S3 za pomocą:
Gdybyś miał **raw AWS credentials** mógłbyś też użyć ich do dostępu do danych S3 za pomocą:
```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 **nie musi zmieniać żadnej zmiennej grupy parametrów**, aby mieć dostęp do S3.
> Postgresql **nie musi zmieniać żadnej zmiennej grupy parametrów** aby móc uzyskać dostęp do S3.
#### Mysql (Aurora)
> [!TIP]
> W środku mysql, jeśli wykonasz zapytanie **`SELECT User, Host FROM mysql.user;`** i istnieje użytkownik o nazwie **`rdsadmin`**, możesz założyć, że znajdujesz się wewnątrz **AWS RDS mysql db**.
> W instancji mysql, jeśli uruchomisz zapytanie **`SELECT User, Host FROM mysql.user;`** i jest użytkownik o nazwie **`rdsadmin`**, możesz założyć, że jesteś wewnątrz **AWS RDS mysql db**.
W środku mysql uruchom **`show variables;`** i jeśli zmienne takie jak **`aws_default_s3_role`**, **`aurora_load_from_s3_role`**, **`aurora_select_into_s3_role`** mają wartości, możesz założyć, że baza danych jest przygotowana do dostępu do danych S3.
W instancji mysql uruchom **`show variables;`** i jeśli zmienne takie jak **`aws_default_s3_role`**, **`aurora_load_from_s3_role`**, **`aurora_select_into_s3_role`** mają wartości, możesz założyć, że baza danych jest przygotowana do dostępu do danych S3.
Również, jeśli masz uprawnienia do uruchomienia **`aws rds describe-db-clusters`** możesz sprawdzić, czy klaster ma jakąkolwiek **powiązaną rolę**, co zazwyczaj oznacza dostęp do usług AWS).
Również, jeśli masz uprawnienia do uruchomienia **`aws rds describe-db-clusters`**, możesz sprawdzić, czy klaster ma jakąś **powiązaną rolę**, co zwykle oznacza dostęp do usług AWS).
Teraz, aby **odczytać plik wewnątrz bucketu** musisz znać pełną ścieżkę. Możesz go odczytać za pomocą:
Teraz, aby **przeczytać plik w bucketcie** musisz znać pełną ścieżkę. Możesz go przeczytać za pomocą:
```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`
Atakujący posiadający uprawnienia `rds:AddRoleToDBCluster` i `iam:PassRole` może **dodać określoną rolę do istniejącej instancji RDS**. Może to pozwolić atakującemu **uzyskać dostęp do wrażliwych danych** lub modyfikować dane znajdujące się w instancji.
Atakujący posiadający uprawnienia `rds:AddRoleToDBCluster` i `iam:PassRole` może **dodać określoną rolę do istniejącej instancji RDS**. To może pozwolić atakującemu na **uzyskanie dostępu do danych wrażliwych** lub modyfikację danych wewnątrz instancji.
```bash
aws add-role-to-db-cluster --db-cluster-identifier <value> --role-arn <value>
```
**Potencjalny wpływ**: Dostęp do wrażliwych danych lub nieautoryzowane modyfikacje danych w instancji RDS.\
Zwróć uwagę, że niektóre DB wymagają dodatkowej konfiguracji, np. Mysql, który wymaga podania role ARN również w parameter groups.
**Potencjalny wpływ**: Dostęp do danych wrażliwych lub nieautoryzowane modyfikacje danych w instancji RDS.\
Należy pamiętać, że niektóre DBs wymagają dodatkowej konfiguracji, na przykład MySQL, który wymaga także określenia ARN roli w grupach parametrów.
### `rds:CreateDBInstance`
Mając tylko to uprawnienie, atakujący mógłby utworzyć **nową instancję wewnątrz istniejącego klastra**, który ma przypisaną **IAM role**. Nie będzie mógł zmienić hasła głównego użytkownika, ale może być w stanie udostępnić nową instancję bazy danych w internecie:
Posiadając tylko to uprawnienie, atakujący może utworzyć **nową instancję w istniejącym klastrze**, który już istnieje i ma przypisaną **rolę IAM**. Nie będzie w stanie zmienić hasła głównego użytkownika, ale może być w stanie udostępnić nową instancję bazy danych w internecie:
```bash
aws --region eu-west-1 --profile none-priv rds create-db-instance \
--db-instance-identifier mydbinstance2 \
@@ -124,28 +124,48 @@ aws --region eu-west-1 --profile none-priv rds create-db-instance \
> [!NOTE]
> TODO: Przetestować
Atakujący posiadający uprawnienia `rds:CreateDBInstance` i `iam:PassRole` może **utworzyć nową instancję RDS z przypisaną określoną rolą**. Następnie atakujący może potencjalnie **uzyskać dostęp do wrażliwych danych** lub modyfikować dane wewnątrz tej instancji.
Atakujący posiadający uprawnienia `rds:CreateDBInstance` i `iam:PassRole` może **utworzyć nową instancję RDS z dołączoną określoną rolą**. Następnie atakujący może potencjalnie **uzyskać dostęp do wrażliwych danych** lub modyfikować dane w obrębie instancji.
> [!WARNING]
> Niektóre wymagania dotyczące roli/instance-profile do przypisania (z [**here**](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)):
> Some requirements of the role/instance-profile to attach (from [**here**](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)):
> - Profil musi istnieć w Twoim koncie.
> - Profil musi posiadać rolę IAM, którą Amazon EC2 może przyjąć.
> - Nazwa instance profile i powiązana nazwa roli IAM muszą zaczynać się od prefiksu `AWSRDSCustom` .
> - The profile must exist in your account.
> - The profile must have an IAM role that Amazon EC2 has permissions to assume.
> - The instance profile name and the associated IAM role name must start with the prefix `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
```
**Potencjalny wpływ**: Dostęp do wrażliwych danych lub nieautoryzowane modyfikacje danych w instancji RDS.
**Potencjalny wpływ**: Dostęp do danych wrażliwych lub nieautoryzowane modyfikacje danych w instancji RDS.
### `rds:AddRoleToDBInstance`, `iam:PassRole`
Atakujący posiadający uprawnienia `rds:AddRoleToDBInstance` i `iam:PassRole` może **dodać określoną rolę do istniejącej instancji RDS**. To może pozwolić atakującemu **uzyskać dostęp do wrażliwych danych** lub modyfikować dane w obrębie instancji.
Atakujący posiadający uprawnienia `rds:AddRoleToDBInstance` i `iam:PassRole` może **dodać określoną rolę do istniejącej instancji RDS**. Może to pozwolić atakującemu na **dostęp do danych wrażliwych** lub modyfikację danych w tej instancji.
> [!WARNING]
> Instancja DB musi być poza klastrem, aby to zadziałało
> Instancja DB musi znajdować się poza klastrem, aby to zadziałało
```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>
```
**Potencjalny wpływ**: Dostęp do wrażliwych danych lub nieautoryzowane modyfikacje danych w instancji RDS.
**Potential Impact**: Dostęp do wrażliwych danych lub nieautoryzowane modyfikacje danych w instancji RDS.
### `rds:CreateBlueGreenDeployment`, `rds:AddRoleToDBCluster`, `iam:PassRole`, `rds:SwitchoverBlueGreenDeployment`
Atakujący posiadający te uprawnienia może sklonować bazę danych produkcyjną (Blue), przypisać klonowi rolę IAM o wysokich uprawnieniach (Green), a następnie użyć switchover, aby zastąpić środowisko produkcyjne. Pozwala to napastnikowi podnieść uprawnienia bazy danych i uzyskać nieautoryzowany dostęp do innych zasobów 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>
```
**Potencjalny wpływ**: Pełne przejęcie produkcyjnego środowiska bazy danych. Po przełączeniu baza działa z podwyższonymi uprawnieniami, co umożliwia nieautoryzowany dostęp do innych usług AWS (np. S3, Lambda, Secrets Manager) z poziomu bazy danych.
{{#include ../../../../banners/hacktricks-training.md}}