AWS - RDS Privesc
RDS - Servizio di Database Relazionale
Per ulteriori informazioni su RDS controlla:
AWS - Relational Database (RDS) Enumrds:ModifyDBInstance
rds:ModifyDBInstance
Con quel permesso un attaccante può modificare la password dell'utente master, e il login all'interno del database:
Dovrai essere in grado di contattare il database (di solito sono accessibili solo da reti interne).
Impatto Potenziale: Trovare informazioni sensibili all'interno dei database.
rds-db:connect
Secondo la documentazione, un utente con questo permesso potrebbe connettersi all'istanza DB.
Abuso dei permessi IAM del ruolo RDS
Postgresql (Aurora)
Se eseguendo SELECT datname FROM pg_database;
trovi un database chiamato rdsadmin
, sai di essere all'interno di un database postgresql AWS.
Prima puoi controllare se questo database è stato utilizzato per accedere a qualche altro servizio AWS. Potresti controllare questo guardando le estensioni installate:
Se trovi qualcosa come aws_s3
puoi assumere che questo database ha una sorta 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 ruolo IAM associato nel campo AssociatedRoles
. Se presente, puoi assumere che il database fosse preparato per accedere ad altri servizi AWS. Basandoti sul nome del ruolo (o se riesci a ottenere le permissive del ruolo) potresti indovinare quale accesso extra ha il database.
Ora, per leggere un file all'interno di un bucket devi conoscere il percorso completo. Puoi leggerlo con:
Se avessi credenziali AWS raw potresti anche usarle per accedere ai dati S3 con:
Postgresql non ha bisogno di modificare alcuna variabile del gruppo di parametri per poter accedere a S3.
Mysql (Aurora)
All'interno di un mysql, se esegui la query SELECT User, Host FROM mysql.user;
e c'è un utente chiamato rdsadmin
, puoi assumere di essere all'interno di un AWS RDS mysql db.
All'interno del mysql esegui show variables;
e se le variabili come aws_default_s3_role
, aurora_load_from_s3_role
, aurora_select_into_s3_role
, hanno valori, puoi assumere che il database sia preparato per accedere ai dati S3.
Inoltre, se hai i permessi per eseguire aws rds describe-db-clusters
puoi controllare se il cluster ha qualche ruolo associato, il che di solito significa accesso ai servizi AWS).
Ora, per leggere un file all'interno di un bucket devi conoscere il percorso completo. Puoi leggerlo con:
rds:AddRoleToDBCluster
, iam:PassRole
rds:AddRoleToDBCluster
, iam:PassRole
Un attaccante con i permessi rds:AddRoleToDBCluster
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.
Impatto Potenziale: Accesso a dati sensibili o modifiche non autorizzate ai dati nell'istanza RDS. Nota che alcuni DB richiedono configurazioni aggiuntive come Mysql, che deve specificare l'ARN del ruolo nei gruppi di parametri.
rds:CreateDBInstance
rds:CreateDBInstance
Solo con questo permesso un attaccante potrebbe creare una nuova istanza all'interno di un cluster che esiste già e ha un ruolo IAM allegato. Non sarà in grado di cambiare la password dell'utente master, ma potrebbe essere in grado di esporre la nuova istanza del database a Internet:
rds:CreateDBInstance
, iam:PassRole
rds:CreateDBInstance
, iam:PassRole
TODO: Test
Un attaccante con i permessi rds:CreateDBInstance
e iam:PassRole
può creare una nuova istanza RDS con un ruolo specificato allegato. L'attaccante può quindi potenzialmente accedere a dati sensibili o modificare i dati all'interno dell'istanza.
Alcuni requisiti del ruolo/profilo istanza da allegare (da qui):
Il profilo deve esistere nel tuo account.
Il profilo deve avere un ruolo IAM che Amazon EC2 ha i permessi di assumere.
Il nome del profilo dell'istanza e il nome del ruolo IAM associato devono iniziare con il prefisso
AWSRDSCustom
.
Impatto Potenziale: Accesso a dati sensibili o modifiche non autorizzate ai dati nell'istanza RDS.
rds:AddRoleToDBInstance
, iam:PassRole
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.
L'istanza DB deve essere al di fuori di un cluster per questo
Impatto Potenziale: Accesso a dati sensibili o modifiche non autorizzate ai dati nell'istanza RDS.
Last updated