AWS - Redshift Privesc
Redshift
RDSについての詳細は以下を確認してください:
AWS - Redshift Enumredshift:DescribeClusters
, redshift:GetClusterCredentials
redshift:DescribeClusters
, redshift:GetClusterCredentials
これらの権限があれば、すべてのクラスターの情報(名前やクラスターのユーザー名を含む)を取得し、アクセスするための資格情報を取得できます:
潜在的影響: データベース内の機密情報を見つける。
redshift:DescribeClusters
, redshift:GetClusterCredentialsWithIAM
redshift:DescribeClusters
, redshift:GetClusterCredentialsWithIAM
これらの権限があれば、すべてのクラスターの情報を取得し、アクセスするための資格情報を取得できます。 postgresユーザーは、資格情報を取得するために使用されたIAMアイデンティティが持つ権限を持つことに注意してください。
潜在的影響: データベース内の機密情報を見つける。
redshift:DescribeClusters
, redshift:ModifyCluster?
redshift:DescribeClusters
, redshift:ModifyCluster?
aws cliから内部postgres (redshift) ユーザーのマスターパスワードを変更することが可能です (これらの権限が必要だと思いますが、まだテストしていません):
潜在的影響: データベース内の機密情報を見つける。
外部サービスへのアクセス
以下のすべてのリソースにアクセスするには、使用するロールを指定する必要があります。Redshiftクラスターには、使用できるAWSロールのリストが割り当てられている場合があり、ARNを知っていればそれを使用することができます。または、割り当てられたデフォルトのロールを使用するために「default」を設定することもできます。
さらに、ここで説明されているように、Redshiftはロールを連結することも可能です(最初のロールが2番目のロールを引き受けることができる限り)ので、カンマで区切るだけでさらにアクセスを得ることができます: 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関数を呼び出すことが可能です。例えば次のように:
S3
https://docs.aws.amazon.com/redshift/latest/dg/tutorial-loading-run-copy.htmlで説明されているように、S3バケットに読み書きすることが可能です:
Dynamo
https://docs.aws.amazon.com/redshift/latest/dg/t_Loading-data-from-dynamodb.htmlで説明されているように、dynamodbからデータを取得することが可能です:
Amazon DynamoDBテーブルがデータを提供する場合、Amazon DynamoDBテーブルが配置されているAWSリージョンを指定するREGIONオプションを使用しない限り、クラスターと同じAWSリージョンに作成する必要があります。
EMR
https://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-emr.htmlを確認してください。
References
Last updated