Secretos en values.yaml de Helm Charts
Contrasenas, API keys y otros secretos estan hardcodeados directamente en archivos values.yaml de Helm, que se commitean al control de versiones y quedan expuestos a cualquiera con acceso al repositorio.
Cómo Funciona
Los Helm charts usan un archivo values.yaml para parametrizar manifiestos de Kubernetes. Los desarrolladores frecuentemente ponen contrasenas de bases de datos, API keys y certificados TLS directamente en values.yaml porque es la forma mas facil de pasar configuracion. El problema es que values.yaml es un archivo de texto plano que se commitea a Git. Cualquiera con acceso de lectura al repositorio puede ver todos los secretos. Incluso si se eliminan despues, los secretos permanecen en el historial de Git para siempre. Ademas, Helm almacena metadata de releases incluyendo templates renderizados en Kubernetes Secrets (codificados en base64, no cifrados), asi que los secretos en texto plano tambien son visibles para cualquiera con acceso al cluster.
# BAD: secrets hardcoded in values.yaml
# values.yaml
database:
host: prod-db.example.com
username: admin
password: "SuperS3cret!Pass"
api:
stripeKey: "sk_live_abc123def456"
jwtSecret: "my-jwt-signing-key-do-not-share"# GOOD: reference external secrets, never store in values.yaml
# values.yaml
database:
host: prod-db.example.com
existingSecret: db-credentials # references a K8s Secret
existingSecretPasswordKey: password
---
# Create the secret separately (via sealed-secrets or external-secrets)
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: db-credentials
spec:
secretStoreRef:
name: vault-backend
target:
name: db-credentials
data:
- secretKey: password
remoteRef:
key: prod/database/passwordEjemplo Real
En 2021, investigadores de Aqua Security escanearon repositorios publicos de Helm charts y encontraron miles de charts con secretos hardcodeados en values.yaml, incluyendo access keys de AWS, contrasenas de bases de datos y claves privadas TLS. Muchos de estos charts eran forks de charts oficiales de Bitnami donde los desarrolladores habian llenado credenciales reales de produccion antes de pushearlos a repos publicos.
Cómo Prevenirlo
- Nunca pongas contrasenas, API keys o certificados directamente en archivos values.yaml -- usa referencias existingSecret en su lugar
- Usa una herramienta de gestion de secretos como HashiCorp Vault, AWS Secrets Manager o external-secrets-operator para inyectar secretos al momento del deploy
- Usa el plugin helm-secrets con Mozilla SOPS para cifrar valores sensibles antes de commitearlos a Git
- Agrega patrones de values.yaml a .gitignore y usa values.yaml.example con valores placeholder para documentacion
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
Estado de Terraform Expuesto
criticalTu 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.
Credenciales de Proveedor Terraform Hardcodeadas
criticalLas credenciales de AWS, GCP o Azure están hardcodeadas en tus archivos .tf en lugar de usar variables de entorno o roles de instancia, commiteando claves de acceso cloud al control de versiones.
Contenedor Kubernetes Privilegiado
highTu pod de Kubernetes corre con securityContext.privileged: true, dándole al contenedor acceso completo al kernel del host y efectivamente evitando el aislamiento del contenedor.
Cuenta de Servicio Predeterminada en Kubernetes
mediumLos pods que corren con la cuenta de servicio predeterminada heredan permisos RBAC a nivel de cluster que generalmente son mucho mas amplios de lo que el workload necesita, permitiendo movimiento lateral si el pod es comprometido.