criticalCWE-312OWASP A02:2021

Estado de Terraform Expuesto

Tu archivo terraform.tfstate está commiteado en tu repositorio o almacenado en un lugar sin cifrar y públicamente accesible — contiene cada secreto e ID de recurso en tu infraestructura.

Cómo Funciona

Los archivos de estado de Terraform son un snapshot completo de tu infraestructura, incluyendo todos los IDs de recursos, todos los outputs y — críticamente — todos los valores sensibles como contraseñas de base de datos, API keys y certificados TLS en texto plano. Commitear terraform.tfstate a git es esencialmente commitear cada secreto en tu infraestructura. Incluso un bucket S3 privado sin cifrado es un riesgo si el bucket alguna vez se mal configura.

Código Vulnerable
# MAL: almacenando el estado localmente (que se commitea a git)
# terraform.tf — sin backend configurado, el estado queda en terraform.tfstate
terraform {
  required_providers {
    aws = { source = "hashicorp/aws" }
  }
  # Sin bloque backend — el estado es local y probablemente commiteado
}
Código Seguro
# BIEN: estado remoto en S3 cifrado con bloqueo de estado
terraform {
  backend "s3" {
    bucket         = "mi-estado-terraform-privado"
    key            = "prod/terraform.tfstate"
    region         = "us-east-1"
    encrypt        = true  # cifrado AES-256 en reposo
    dynamodb_table = "terraform-state-lock"  # previene ejecuciones concurrentes
  }
}

Ejemplo Real

En 2023, investigadores que escaneaban repositorios públicos de GitHub encontraron más de 1,000 archivos terraform.tfstate que contenían claves de acceso AWS activas, contraseñas de RDS y claves secretas de Stripe. Muchos eran de startups que simplemente habían ejecutado terraform init en la raíz de su proyecto sin configurar un backend remoto.

Cómo Prevenirlo

  • Siempre configura un backend remoto (S3 + DynamoDB para AWS, GCS para GCP) con cifrado habilitado
  • Agrega terraform.tfstate, terraform.tfstate.backup y .terraform/ a tu .gitignore inmediatamente
  • Audita tu historial de git en busca de archivos de estado commiteados: git log --all --full-history -- '**/*.tfstate'
  • Si el estado alguna vez fue commiteado, rota todos los secretos encontrados en él — están permanentemente en el historial de git
  • Usa Terraform Cloud o Atlantis para gestión colaborativa de estado con controles de acceso

Tecnologías Afectadas

Node.jsPython

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas