# AWS - Redshift Privesc {{#include ../../../banners/hacktricks-training.md}} ## Redshift Für weitere Informationen zu RDS siehe: {{#ref}} ../aws-services/aws-redshift-enum.md {{#endref}} ### `redshift:DescribeClusters`, `redshift:GetClusterCredentials` Mit diesen Berechtigungen können Sie **Informationen zu allen Clustern** (einschließlich Name und Cluster-Benutzername) abrufen und **Zugangsdaten** zum Zugriff darauf erhalten: ```bash # 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:" -d template1 -p 5439 ``` **Potenzielle Auswirkungen:** Sensible Informationen in den Datenbanken finden. ### `redshift:DescribeClusters`, `redshift:GetClusterCredentialsWithIAM` Mit diesen Berechtigungen können Sie **Informationen über alle Cluster** abrufen und **Zugangsdaten** dafür erhalten.\ Beachten Sie, dass der postgres-Benutzer die **Berechtigungen hat, die die IAM-Identität** hat, die verwendet wurde, um die Zugangsdaten zu erhalten. ```bash # 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 ``` **Potenzielle Auswirkungen:** Sensible Informationen in den Datenbanken finden. ### `redshift:DescribeClusters`, `redshift:ModifyCluster?` Es ist möglich, das **Master-Passwort** des internen postgres (redshift) Benutzers über die aws cli zu **ändern** (ich denke, das sind die Berechtigungen, die du benötigst, aber ich habe sie noch nicht getestet): ``` aws redshift modify-cluster –cluster-identifier –master-user-password ‘master-password’; ``` **Potenzielle Auswirkungen:** Sensible Informationen in den Datenbanken finden. ## Zugriff auf externe Dienste > [!WARNING] > Um auf alle folgenden Ressourcen zuzugreifen, müssen Sie **die zu verwendende Rolle angeben**. Ein Redshift-Cluster **kann eine Liste von AWS-Rollen zugewiesen haben**, die Sie verwenden können, **wenn Sie die ARN kennen**, oder Sie können einfach "**default**" setzen, um die standardmäßig zugewiesene zu verwenden. > Darüber hinaus erlaubt Redshift, wie [**hier erklärt**](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html), auch das Verketten von Rollen (solange die erste die zweite annehmen kann), um weiteren Zugriff zu erhalten, indem Sie sie einfach mit einem **Komma** trennen: `iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';` ### Lambdas Wie in [https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_FUNCTION.html](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_FUNCTION.html) erklärt, ist es möglich, **eine Lambda-Funktion von Redshift aus aufzurufen** mit etwas wie: ```sql CREATE EXTERNAL FUNCTION exfunc_sum2(INT,INT) RETURNS INT STABLE LAMBDA 'lambda_function' IAM_ROLE default; ``` ### S3 Wie in [https://docs.aws.amazon.com/redshift/latest/dg/tutorial-loading-run-copy.html](https://docs.aws.amazon.com/redshift/latest/dg/tutorial-loading-run-copy.html) erklärt, ist es möglich, **in S3-Buckets zu lesen und zu schreiben**: ```sql # Read copy table from 's3:///load/key_prefix' credentials 'aws_iam_role=arn:aws:iam:::role/' region '' options; # Write unload ('select * from venue') to 's3://mybucket/tickit/unload/venue_' iam_role default; ``` ### Dynamo Wie in [https://docs.aws.amazon.com/redshift/latest/dg/t_Loading-data-from-dynamodb.html](https://docs.aws.amazon.com/redshift/latest/dg/t_Loading-data-from-dynamodb.html) erklärt, ist es möglich, **Daten von dynamodb zu erhalten**: ```sql copy favoritemovies from 'dynamodb://ProductCatalog' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'; ``` > [!WARNING] > Die Amazon DynamoDB-Tabelle, die die Daten bereitstellt, muss in derselben AWS-Region wie Ihr Cluster erstellt werden, es sei denn, Sie verwenden die [REGION](https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-source-s3.html#copy-region) Option, um die AWS-Region anzugeben, in der sich die Amazon DynamoDB-Tabelle befindet. ### EMR Überprüfen Sie [https://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-emr.html](https://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-emr.html) ## References - [https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a](https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a) {{#include ../../../banners/hacktricks-training.md}}