Politicas de Red Faltantes en Kubernetes
Sin recursos NetworkPolicy, cada pod en el cluster puede comunicarse con todos los demas pods en cualquier puerto, habilitando movimiento lateral sin restricciones despues de que un solo pod sea comprometido.
Cómo Funciona
Por defecto, Kubernetes permite todo el trafico de ingress y egress entre todos los pods del cluster sin importar el namespace. Esto significa que un pod de frontend comprometido puede conectarse directamente a tu pod de base de datos, un pod de redis en otro namespace o al servidor API de Kubernetes. Los recursos NetworkPolicy actuan como reglas de firewall que restringen que pods pueden comunicarse entre si. Sin ellos, un atacante que logre ejecucion remota de codigo en cualquier pod puede escanear la red interna, acceder a bases de datos, robar secretos de otros servicios y pivotar a traves de todo el cluster. La mayoria de los servicios Kubernetes administrados soportan NetworkPolicy pero no crean ninguno por defecto.
# BAD: no NetworkPolicy exists -- all pods can talk to all pods
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend
spec:
replicas: 2
selector:
matchLabels:
app: frontend
template:
spec:
containers:
- name: frontend
image: frontend:latest
ports:
- containerPort: 3000
# No NetworkPolicy -> frontend can reach database, redis, etc.# GOOD: default-deny policy + explicit allow rules
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-all
namespace: production
spec:
podSelector: {} # applies to ALL pods in namespace
policyTypes: ["Ingress", "Egress"]
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-frontend-to-api
spec:
podSelector:
matchLabels:
app: api
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- port: 8080Ejemplo Real
En la brecha de SolarWinds de 2020, el movimiento lateral dentro de redes internas fue un vector de ataque clave. Aunque no fue especifico de Kubernetes, el mismo principio aplica: el malware Sunburst se movio libremente entre sistemas porque no habia segmentacion de red. En entornos Kubernetes sin NetworkPolicies, un contenedor comprometido puede alcanzar de la misma manera cualquier servicio, base de datos o API de gestion dentro del cluster.
Cómo Prevenirlo
- Aplica una NetworkPolicy de denegacion por defecto en cada namespace que bloquee todo el trafico ingress y egress por defecto
- Crea recursos NetworkPolicy de lista de permitidos explicita para cada ruta de comunicacion legitima entre servicios
- Usa un plugin CNI que soporte la aplicacion de NetworkPolicy como Calico, Cilium o Weave Net
- Audita las politicas de red regularmente con herramientas como kubectl-who-can y visualizadores de network policies
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.