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

This commit is contained in:
Translator
2026-01-13 13:29:52 +00:00
parent 4bbcddc78b
commit 3444d3e2c3

View File

@@ -2,9 +2,9 @@
{{#include ../../../../banners/hacktricks-training.md}}
## RDS - Relational Database Service
## RDS - Relacijska usluga baza podataka
Za više informacija o RDS pogledajte:
For more information about RDS check:
{{#ref}}
../../aws-services/aws-relational-database-rds-enum.md
@@ -12,7 +12,7 @@ Za više informacija o RDS pogledajte:
### `rds:ModifyDBInstance`
Sa tom dozvolom napadač može **izmeniti lozinku master korisnika**, i korisničko ime u bazi podataka:
Sa tom dozvolom napadač može **izmeniti lozinku master korisnika**, i kredencijale za prijavu unutar baze podataka:
```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]
> Biće potrebno da možete da **kontaktirate bazu podataka** (obično su dostupne samo iz unutrašnjih mreža).
> Biće potrebno da možete **uspostaviti kontakt sa bazom podataka** (one su obično dostupne samo iz unutrašnjih mreža).
**Potencijalni uticaj:** Pronalaženje osetljivih informacija u bazama podataka.
**Potential Impact:** Pronalazak osetljivih informacija u bazama podataka.
### rds-db:connect
Prema [**docs**](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html) korisnik sa ovom dozvolom može da se poveže na DB instance.
Prema [**docs**](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html) korisnik sa ovom dozvolom može da se poveže na DB instancu.
### Zloupotreba RDS Role IAM permissions
### Zloupotreba RDS Role IAM dozvola
#### Postgresql (Aurora)
> [!TIP]
> Ako pokrenete **`SELECT datname FROM pg_database;`** i pronađete bazu podataka zvanu **`rdsadmin`**, znate da se nalazite u **AWS postgresql bazi**.
> Ako pri izvršavanju **`SELECT datname FROM pg_database;`** nađete bazu podataka nazvanu **`rdsadmin`**, znate da se nalazite unutar **AWS postgresql baze podataka**.
Prvo možete proveriti da li je ova baza korišćena za pristup nekim drugim AWS servisima. To možete proveriti gledajući instalirane ekstenzije:
Prvo možete proveriti da li je ova baza podataka korišćena za pristup nekim drugim AWS servisima. To možete proveriti gledajući instalirane ekstenzije:
```sql
SELECT * FROM pg_extension;
```
Ako nađete nešto poput **`aws_s3`** možete pretpostaviti da ova baza ima **neki vid pristupa over S3** (postoje i druge ekstenzije kao što su **`aws_ml`** i **`aws_lambda`**).
Ako pronađete nešto poput **`aws_s3`** možete pretpostaviti da ova baza ima **neku vrstu pristupa S3** (postoje i druge ekstenzije kao što su **`aws_ml`** i **`aws_lambda`**).
Takođe, ako imate dozvole da pokrenete **`aws rds describe-db-clusters`** možete videti da li **cluster ima bilo koju IAM Role pridruženu** u polju **`AssociatedRoles`**. Ako ih ima, možete pretpostaviti da je baza bila **pripremljena za pristup drugim AWS servisima**. Na osnovu **name of the role** (ili ako možete dobiti **`permissions`** role) možete **pogoditi** koji dodatni pristup baza ima.
Takođe, ako imate dozvole da pokrenete **`aws rds describe-db-clusters`** možete videti da li **klaster ima pridružen IAM Role** u polju **`AssociatedRoles`**. Ako ih ima, možete pretpostaviti da je baza bila **pripremljena za pristup drugim AWS servisima**. Na osnovu **imena role** (ili ako možete dobiti **dozvole** role) možete **pretpostaviti** koji dodatni pristup baza ima.
Sada, da biste **read a file inside a bucket** morate znati punu putanju. Možete ga pročitati pomoću:
Sada, da biste **pročitali fajl unutar bucket-a** morate znati punu putanju. Možete ga pročitati sa:
```sql
// Create table
CREATE TABLE ttemp (col TEXT);
@@ -71,7 +71,7 @@ SELECT * from ttemp;
// Delete table
DROP TABLE ttemp;
```
Ako biste imali **raw AWS credentials**, mogli biste ih takođe koristiti za pristup S3 podacima pomoću:
Ako biste imali **raw AWS credentials**, mogli biste ih koristiti i za pristup S3 podacima pomoću:
```sql
SELECT aws_s3.table_import_from_s3(
't', '', '(format csv)',
@@ -80,16 +80,16 @@ aws_commons.create_aws_credentials('sample_access_key', 'sample_secret_key', '')
);
```
> [!NOTE]
> Postgresql **ne mora da menja nijednu promenljivu parametarske grupe** da bi mogao da pristupi S3.
> Postgresql **ne mora da menja nijednu promenljivu u parameter group-u** da bi mogao da pristupi S3.
#### Mysql (Aurora)
> [!TIP]
> Unutar mysql-a, ako pokrenete upit **`SELECT User, Host FROM mysql.user;`** i postoji korisnik pod imenom **`rdsadmin`**, možete pretpostaviti da ste unutar **AWS RDS mysql db**.
> Inside a mysql, if you run the query **`SELECT User, Host FROM mysql.user;`** and there is a user called **`rdsadmin`**, you can assume you are inside an **AWS RDS mysql db**.
Unutar mysql-a pokrenite **`show variables;`** i ako promenljive kao što su **`aws_default_s3_role`**, **`aurora_load_from_s3_role`**, **`aurora_select_into_s3_role`** imaju vrednosti, možete pretpostaviti da je baza podataka pripremljena za pristup S3 podacima.
Unutar mysql-a pokrenite **`show variables;`** i ako promenljive poput **`aws_default_s3_role`**, **`aurora_load_from_s3_role`**, **`aurora_select_into_s3_role`** imaju vrednosti, možete pretpostaviti da je baza podataka pripremljena za pristup S3 podacima.
Takođe, ako imate dozvole da pokrenete **`aws rds describe-db-clusters`** možete proveriti da li klaster ima neku **associated role**, što obično znači pristup AWS servisima).
Takođe, ako imate dozvole da izvršite **`aws rds describe-db-clusters`** možete proveriti da li klaster ima neki **associated role**, što obično znači pristup AWS servisima).
Sada, da biste **pročitali fajl unutar bucket-a** morate znati punu putanju. Možete ga pročitati sa:
```sql
@@ -100,16 +100,16 @@ DROP TABLE ttemp;
```
### `rds:AddRoleToDBCluster`, `iam:PassRole`
Napadač sa dozvolama `rds:AddRoleToDBCluster` i `iam:PassRole` može **dodati određenu ulogu postojećoj RDS instanci**. To bi moglo omogućiti napadaču da **pristupi osetljivim podacima** ili izmeni podatke u toj instanci.
Napadač sa dozvolama `rds:AddRoleToDBCluster` i `iam:PassRole` može **dodati određenu ulogu na postojeću RDS instancu**. Ovo može omogućiti napadaču da **pristupi osetljivim podacima** ili izmeni podatke unutar instance.
```bash
aws add-role-to-db-cluster --db-cluster-identifier <value> --role-arn <value>
```
**Potencijalni uticaj**: Pristup osetljivim podacima ili neovlašćene izmene podataka u RDS instance.\
Imajte na umu da neki DB-ovi zahtevaju dodatne konfiguracije kao što je Mysql, koji takođe zahteva navođenje role ARN u grupama parametara.
**Potencijalni uticaj**: Pristup osetljivim podacima ili neovlašćene izmene podataka u RDS instanci.\
Imajte na umu da neke DBs zahtevaju dodatne konfiguracije, kao što je Mysql, za koje je potrebno takođe navesti role ARN u aprameter groups.
### `rds:CreateDBInstance`
Samo sa ovom dozvolom napadač bi mogao da kreira **novu instancu unutar klastera** koji već postoji i ima prikačenu **IAM role**. Neće moći da promeni lozinku master korisnika, ali bi mogao da izloži novu instancu baze podataka internetu:
Samo sa ovom dozvolom napadač može kreirati **novu instancu unutar klastera** koja već postoji i kojoj je pridružen **IAM role**. Neće moći da promeni lozinku master korisnika, ali bi mogao da izloži novu instancu baze podataka internetu:
```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: Test
Napadač koji ima dozvole `rds:CreateDBInstance` i `iam:PassRole` može **da kreira novu RDS instancu sa specificiranom ulogom prikačenom**. Napadač potom potencijalno može **pristupiti osetljivim podacima** ili izmeniti podatke unutar instance.
Napadač koji ima dozvole `rds:CreateDBInstance` i `iam:PassRole` može **kreirati novu RDS instancu sa navedenom pridruženom rolom**. Napadač potom može potencijalno **pristupiti osetljivim podacima** ili izmeniti podatke unutar instance.
> [!WARNING]
> Some requirements of the role/instance-profile to attach (from [**here**](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)):
> Neki zahtevi za role/instance-profile koje treba prikačiti (iz [**here**](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)):
> - Profil mora postojati na vašem nalogu.
> - Profil mora imati IAM ulogu koju Amazon EC2 ima dozvole da preuzme.
> - Ime instance profila i ime povezane IAM role moraju počinjati prefiksom `AWSRDSCustom` .
> - Profil mora imati IAM rolu koju Amazon EC2 ima dozvole da preuzme.
> - Ime instance profila i ime pridružene IAM role moraju početi prefiksom `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
```
**Mogući uticaj**: Pristup osetljivim podacima ili neovlašćene izmene podataka u RDS instanci.
**Mogući uticaj**: Pristup osetljivim podacima ili neovlašćene izmene podataka u RDS instance.
### `rds:AddRoleToDBInstance`, `iam:PassRole`
Napadač sa permisijama `rds:AddRoleToDBInstance` i `iam:PassRole` može **dodati određenu rolu postojećoj RDS instanci**. Ovo bi napadaču omogućilo da **pristupi osetljivim podacima** ili izmeni podatke u instanci.
Napadač sa dozvolama `rds:AddRoleToDBInstance` i `iam:PassRole` može **dodati određenu ulogu postojećoj RDS instance**. Ovo može omogućiti napadaču da **pristupi osetljivim podacima** ili izmeni podatke unutar instance.
> [!WARNING]
> DB instanca mora biti van klastera za ovo
> DB instance mora biti izvan klastera da bi ovo radilo
```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>
```
**Potencijalni uticaj**: Pristup osetljivim podacima ili neovlašćene izmene podataka u RDS instanci.
### `rds:CreateBlueGreenDeployment`, `rds:AddRoleToDBCluster`, `iam:PassRole`, `rds:SwitchoverBlueGreenDeployment`
Napadač sa ovim dozvolama može da klonira produkcijsku bazu podataka (Blue), pridruži IAM ulogu sa visokim privilegijama klonu (Green), i potom koristi switchover da zameni produkcijsko okruženje. Ovo omogućava napadaču da poveća privilegije baze podataka i stekne neovlašćen pristup drugim AWS resursima.
```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>
```
**Potential Impact**: Potpuno preuzimanje produkcionog okruženja baze podataka. Nakon prebacivanja, baza podataka radi sa povišenim privilegijama, što omogućava neautorizovan pristup drugim AWS servisima (npr. S3, Lambda, Secrets Manager) iz same baze podataka.
{{#include ../../../../banners/hacktricks-training.md}}