mediumCWE-284OWASP A01:2021

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.

Código Vulnerable
# 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.
Código Seguro
# 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: 8080

Ejemplo 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

TerraformKubernetesDocker

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas