Volver al blog
13 de abril de 2026

Proteja sus clústeres de Kubernetes con Penetration Testing en la nube

Kubernetes se ha convertido en el estándar de oro para la orquestación de contenedores. Es potente, escala maravillosamente y permite a los desarrolladores enviar código más rápido que nunca. Pero seamos honestos: Kubernetes también es increíblemente complejo. Entre el servidor API, etcd, kubelet, los pods y una montaña de archivos YAML, hay muchos lugares donde las cosas pueden salir mal. Una simple configuración incorrecta del Control de Acceso Basado en Roles (RBAC) o una cuenta de servicio con privilegios excesivos puede convertir un error menor en una toma de control total del clúster.

La mayoría de los equipos comienzan con una configuración "predeterminada", pensando que el servicio administrado del proveedor de la nube tiene todo bloqueado. Si bien GKE, EKS y AKS proporcionan una línea de base decente, no solucionan mágicamente las vulnerabilidades a nivel de aplicación ni los errores de configuración personalizados. La realidad es que la "superficie de ataque" de un clúster de Kubernetes es enorme. No solo está asegurando un servidor; está asegurando un sistema distribuido de microservicios interconectados.

Aquí es donde entra en juego el pentesting en la nube. Los escaneos de seguridad tradicionales a menudo pasan por alto las formas matizadas en que un atacante puede moverse lateralmente dentro de un clúster. Necesita un enfoque proactivo que simule cómo piensa un atacante real, comenzando desde un pod comprometido e intentando llegar al nodo o a la API de metadatos del proveedor de la nube. Para cuando un escáner de vulnerabilidades marque un CVE, un atacante inteligente podría haber utilizado un permiso mal configurado para escalar sus privilegios.

En esta guía, vamos a profundizar en los detalles de la seguridad de Kubernetes. Analizaremos los vectores de ataque más comunes, cómo proteger sus clústeres y por qué aprovechar una plataforma basada en la nube como Penetrify puede ayudarlo a encontrar estos agujeros antes que otra persona.

Comprensión de la superficie de ataque de Kubernetes

Para asegurar un clúster, primero debe comprender cómo se puede romper. Kubernetes no es un monolito; es una colección de componentes que se comunican entre sí. Si alguno de esos canales de comunicación está abierto o confiando, tiene un problema.

El plano de control: el cerebro de la operación

El plano de control es el objetivo principal de cualquier atacante. Si obtienen acceso al servidor API, se acabó el juego. Pueden implementar pods maliciosos, robar secretos o eliminar toda su infraestructura. Los problemas más comunes aquí son:

  • Acceso API no autenticado: Sucede más a menudo de lo que piensa. Alguien deja el servidor API abierto a la internet pública para "depurar" y se olvida de cerrarlo.
  • Políticas RBAC débiles: Otorgar privilegios de cluster-admin a un desarrollador que solo necesita ver los registros es una receta para el desastre.
  • etcd expuesto: etcd es la base de datos donde se almacena todo el estado del clúster. Si un atacante golpea etcd directamente, puede omitir el servidor API por completo y reescribir la realidad del clúster.

El plano de datos: donde ocurre el trabajo

Aquí es donde viven sus pods y nodos. Si bien el plano de control es el cerebro, el plano de datos es el cuerpo. Los atacantes a menudo intentan obtener un punto de apoyo aquí primero.

  • Escape de contenedor: Si un contenedor se está ejecutando como root o tiene acceso privilegiado, un atacante puede "salir" del contenedor y obtener acceso al nodo host subyacente.
  • Comunicación de pod a pod: De forma predeterminada, Kubernetes no bloquea el tráfico entre pods. Si un atacante compromete un pequeño pod orientado a la web, puede olfatear el tráfico o atacar a cualquier otro pod en el clúster.
  • Gestión insegura de secretos: Almacenar contraseñas o claves API en texto plano dentro de un ConfigMap o incluso usar K8s Secrets básicos (que son solo base64 codificados) es un error común.

El elemento humano y de CI/CD

A menudo olvidamos que el clúster es administrado por personas y pipelines.

  • Archivos Kubeconfig filtrados: Un desarrollador accidentalmente sube su .kube/config a un repositorio público de GitHub, y de repente el mundo tiene acceso de administrador a su clúster de producción.
  • Imágenes envenenadas: Usar una imagen no verificada de Docker Hub que contiene una puerta trasera.
  • Vulnerabilidades de Pipeline: Atacantes que apuntan al ejecutor de Jenkins o GitLab que tiene los permisos para implementar en el clúster.

Vulnerabilidades comunes de Kubernetes y cómo explotarlas (y detenerlas)

Una cosa es leer una lista de riesgos; otra es comprender cómo se desarrollan realmente. Veamos algunos escenarios del mundo real.

Escenario 1: La cuenta de servicio con privilegios excesivos

Imagine un pod que ejecuta un agente de monitoreo simple. Por alguna razón, el desarrollador le dio una ServiceAccount con un ClusterRole que le permite list y get secretos en todo el namespace.

El ataque:

  1. Un atacante encuentra un error de ejecución remota de código (RCE) en el agente de monitoreo.
  2. Encuentran el token de la cuenta de servicio montado en /var/run/secrets/kubernetes.io/serviceaccount/token.
  3. Usando kubectl, usan este token para consultar el servidor API: kubectl get secrets.
  4. Encuentran la contraseña de la base de datos y las claves de acceso del proveedor de la nube.

La solución: Implemente el Principio del mínimo privilegio. Use Roles específicos en lugar de ClusterRoles siempre que sea posible. Use herramientas como audit2rbac para analizar qué permisos se están utilizando realmente y elimine el resto.

Escenario 2: El escape de contenedor privilegiado

Un equipo implementa una herramienta de registro que requiere el modo "privilegiado" para ver las interfaces de red del host.

El ataque:

  1. El atacante compromete el pod de registro.
  2. Dado que el pod tiene privilegios, puede ver los dispositivos del host.
  3. Montan el sistema de archivos raíz del host (/) en el contenedor.
  4. Crean un trabajo cron en el host o añaden una nueva clave SSH al archivo authorized_keys del host.
  5. Ahora tienen acceso root completo al Nodo. Desde allí, pueden acceder potencialmente a otros pods en el mismo nodo.

La solución: Evite privileged: true a toda costa. Si necesita capacidades específicas (como NET_ADMIN), conceda solo esas capacidades específicas utilizando el bloque capabilities en el contexto de seguridad. Utilice un controlador Pod Security Admission (PSA) para aplicar políticas de "Baseline" o "Restricted".

Escenario 3: La fuga de la Metadata API

En entornos de nube (AWS, GCP, Azure), los pods a menudo pueden acceder al servicio de metadatos de la nube (por ejemplo, 169.254.169.254).

El ataque:

  1. Un atacante obtiene acceso a un pod.
  2. Hacen curl al endpoint de metadatos: curl http://169.254.169.254/latest/meta-data/iam/security-credentials/.
  3. El servicio de metadatos devuelve credenciales temporales de AWS para el rol IAM adjunto al nodo de trabajo.
  4. El atacante utiliza estas credenciales para acceder a buckets de S3 o modificar la configuración de VPC.

La solución: Utilice Network Policies para bloquear todo el tráfico de salida a la dirección IP de los metadatos. Alternativamente, utilice acceso basado en identidad como AWS IRSA (IAM Roles for Service Accounts) o Azure Pod Identity para que los pods obtengan sus propias identidades limitadas en lugar de heredar la identidad del nodo.

Por qué el escaneo tradicional no es suficiente

Probablemente haya utilizado un escáner de vulnerabilidades. Le dice que su imagen de Alpine Linux tiene tres CVE de gravedad media. Eso es útil, pero no es "seguridad".

El escaneo es pasivo. El Penetration Testing es activo.

Un escáner puede decirle que una biblioteca está desactualizada. No puede decirle que su configuración RBAC permite a un desarrollador eliminar accidentalmente la base de datos de producción. No puede decirle que un atacante puede usar una cadena específica de errores de configuración para saltar de un pod frontend al administrador del clúster.

El Penetration Testing en la nube implica la "cadena de exploits". Un atacante no solo encuentra un error; encuentra una secuencia de pequeños errores que, cuando se combinan, conducen a un compromiso total.

Por ejemplo:

  • Paso 1: Encuentra una imagen desactualizada (el escáner encuentra esto).
  • Paso 2: Usa esa imagen para obtener una shell (el escáner no puede hacer esto).
  • Paso 3: Encuentra un token filtrado en el sistema de archivos (el escáner podría pasar esto por alto).
  • Paso 4: Usa el token para pivotar a un pod con más privilegios (el escáner definitivamente no puede hacer esto).

Esta es la razón por la que las empresas se están moviendo hacia evaluaciones de seguridad continuas. En lugar de una auditoría anual, utilizan plataformas nativas de la nube para simular estos ataques constantemente. Penetrify simplifica esto al proporcionar un entorno administrado donde estas simulaciones pueden ocurrir sin la necesidad de que usted construya su propio "laboratorio de ataque".

Una guía paso a paso para proteger su clúster de Kubernetes

Si está mirando un clúster complejo y no sabe por dónde empezar, siga esta lista de verificación. Iremos desde las "victorias fáciles" hasta los cambios arquitectónicos más complejos.

Fase 1: La fruta madura (victorias fáciles)

  1. Deshabilitar el montaje automático del token de la cuenta de servicio predeterminada: De forma predeterminada, K8s monta un token en cada pod. La mayoría de los pods no necesitan comunicarse con el servidor API. Establezca automountServiceAccountToken: false en su PodSpec.
  2. Actualice sus imágenes: Utilice una herramienta como Trivy o Grype para escanear sus imágenes durante la canalización CI/CD. Si una imagen tiene una vulnerabilidad de alta gravedad, falle la compilación.
  3. Elimine los permisos innecesarios: Audite sus ClusterRoles. Si ve * en los campos resources o verbs, eso es una señal de alerta.
  4. Asegure el servidor API: Asegúrese de que el servidor API no sea accesible desde la internet abierta. Utilice un balanceador de carga con listas blancas de IP o un endpoint privado.

Fase 2: Implementación de controles de red

  1. Política de red de denegación predeterminada: De forma predeterminada, todos los pods pueden comunicarse con todos los pods. Cambie esto. Cree una política de "Denegación predeterminada" para todo el tráfico de entrada y salida, luego permita explícitamente solo las conexiones que son necesarias para que la aplicación funcione.
  2. Aislamiento de Namespace: Utilice namespaces para separar entornos (desarrollo, staging, producción) y diferentes equipos. Si bien los namespaces no son un límite de seguridad estricto, facilitan mucho la aplicación de Network Policies y RBAC.
  3. Filtrado de salida: No permita que sus pods se comuniquen con toda la internet. Si su pod solo necesita comunicarse con una API de pasarela de pago específica, restrinja la salida a ese rango de IP o nombre DNS específico.

Fase 3: Seguridad en tiempo de ejecución y aplicación de políticas

  1. Implemente Pod Security Admissions (PSA): Utilice el PSA integrado para asegurarse de que ningún pod se esté ejecutando como root o utilizando la red del host.
  2. Utilice una herramienta de seguridad en tiempo de ejecución: Herramientas como Falco pueden alertarle en tiempo real si se abre una shell dentro de un pod o si se lee un archivo confidencial (como /etc/shadow).
  3. Sistema de archivos raíz de solo lectura: Siempre que sea posible, establezca readOnlyRootFilesystem: true. Esto evita que los atacantes descarguen conjuntos de herramientas (como nmap o netcat) en el contenedor si obtienen una shell.

Fase 4: Gestión de identidades y secretos

  1. Deje de usar secretos de K8s para datos confidenciales: Los secretos de K8s solo están codificados en base64. Utilice un administrador de secretos dedicado como HashiCorp Vault, AWS Secrets Manager o Azure Key Vault.
  2. Tokens de corta duración: Abandone los tokens de larga duración. Utilice OIDC (OpenID Connect) para la autenticación de usuarios en el clúster.
  3. Registro de auditoría: Habilite los registros de auditoría de Kubernetes. Si ocurre una brecha, necesita saber exactamente quién llamó a qué API y cuándo. Sin registros, solo está adivinando.

Comparación de diferentes enfoques de seguridad

Es fácil confundirse con la sopa de letras de las herramientas de seguridad. Aquí hay un desglose de cómo se comparan los diferentes métodos y dónde encajan en su estrategia.

Enfoque Qué hace Pros Contras Cuándo usarlo
Análisis de vulnerabilidades Comprueba si hay CVE conocidos en imágenes/paquetes. Rápido, automatizado, detecta errores "conocidos". Pasa por alto errores de configuración y fallas lógicas. Cada compilación en CI/CD.
Auditoría de configuración Verifica los archivos YAML con respecto a los puntos de referencia (como CIS). Encuentra errores comunes (por ejemplo, pods privilegiados). Puede producir muchos "False Positives" o ruido. Antes de la implementación y periódicamente.
Protección en tiempo de ejecución Supervisa los pods activos en busca de comportamientos extraños. Detecta Zero Day y ataques activos. Puede ser complejo de ajustar; alto volumen de alertas. Entornos de producción.
Penetration Testing en la nube Simula la ruta de un atacante humano. Encuentra complejas cadenas de ataque y fallas lógicas. Lleva más tiempo que un escaneo. Trimestralmente o después de cambios importantes.

El secreto es que ninguno de estos es "suficiente" por sí solo. Necesita un enfoque por capas. Escanea imágenes para detener errores conocidos, audita las configuraciones para detener errores comunes, supervisa el tiempo de ejecución para detectar amenazas activas y realiza Penetration Test para encontrar las brechas que los otros tres pasaron por alto.

Escalando su seguridad con plataformas nativas de la nube

Para una empresa mediana, contratar a un experto en seguridad de Kubernetes a tiempo completo es costoso. La mayoría de los equipos de TI ya están sobrecargados. Aquí es donde el modelo de "Penetration Testing en la nube" resuelve un problema comercial real.

En lugar de intentar construir un "equipo rojo" interno, puede usar una plataforma como Penetrify para cerrar la brecha. Aquí está el por qué eso importa para K8s específicamente:

1. Sin sobrecarga de hardware Configurar un entorno seguro para realizar pruebas de Penetration Testing en un clúster a menudo requiere un espejo de su entorno de producción. Eso es mucho gasto en la nube. Una plataforma nativa de la nube le permite ejecutar estas evaluaciones a través de una arquitectura administrada, lo que reduce la necesidad de que active costosos "clústeres de prueba" que simplemente se quedan ahí.

2. Escalado bajo demanda Sus necesidades de seguridad cambian. Tal vez esté lanzando un nuevo microservicio para un cliente importante, o esté migrando de una configuración de VM heredada a EKS. No necesita un pentester todos los días, pero sí lo necesita durante estas ventanas de alto riesgo. Las plataformas en la nube le permiten escalar su frecuencia de prueba hacia arriba o hacia abajo según su ciclo de lanzamiento.

3. Integración con flujos de trabajo El mayor problema con el Penetration Testing tradicional es el "Informe en PDF". Obtiene un documento de 50 páginas, permanece en un correo electrónico durante tres semanas y luego un desarrollador tiene que crear manualmente tickets de Jira para cada hallazgo. Las plataformas modernas envían los resultados directamente a sus sistemas SIEM o de emisión de tickets existentes. Cuando se encuentra una vulnerabilidad en un clúster de K8s, debe convertirse en un ticket en el backlog de inmediato, no en una viñeta en un documento.

Escenario del mundo real: el ataque de "camino de menor resistencia"

Para ilustrar por qué nos enfocamos en "cadenas" de vulnerabilidad, rastreemos un ataque hipotético en un sitio de comercio electrónico basado en Kubernetes.

La configuración:

  • Una aplicación React frontend que se ejecuta en un pod.
  • Un pod de API backend.
  • Un pod de base de datos.
  • Una instancia de Prometheus para la supervisión.

La cadena de ataque:

  1. La entrada: El atacante encuentra una vulnerabilidad de Server-Side Request Forgery (SSRF) en la aplicación frontend. Este es un error web común.
  2. El reconocimiento: Usando el SSRF, el atacante no puede llegar a la base de datos, pero puede llegar al DNS interno de Kubernetes. Descubren que el servicio Prometheus se está ejecutando en el puerto 9090.
  3. El pivote: Descubren que la instancia de Prometheus tiene un panel abierto sin contraseña. En el panel, encuentran una etiqueta que revela las direcciones IP internas de todos los demás pods en el espacio de nombres.
  4. La escalada: Usan el SSRF nuevamente, pero esta vez apuntan al servidor API interno usando un token filtrado que encontraron en un registro de Prometheus (que estaba registrando accidentalmente los encabezados).
  5. Las joyas de la corona: El token tiene permiso get secrets. Extraen la contraseña raíz de la base de datos y vuelcan toda la tabla de clientes.

¿Cómo detener esta cadena? Observe que la mayoría de estos no son errores "críticos" por sí solos. Un SSRF es malo, pero si tiene Network Policies que bloquean el acceso al pod de Prometheus, el ataque se detiene en el paso 2. Si Prometheus está autenticado, se detiene en el paso 3. Si el token de la cuenta de servicio no está montado automáticamente, se detiene en el paso 4.

Esto es lo que encuentra el Penetration Testing en la nube. No solo dice "Tiene un SSRF"; dice "Su SSRF permite que un atacante robe su base de datos a través de Prometheus". Ese es el tipo de información que realmente impulsa la prioridad de seguridad.

Errores comunes que cometen los equipos al proteger K8s

Incluso con las mejores intenciones, la gente se equivoca. Aquí están los errores más comunes.

1. Confiar en el "Cloud Default"

Muchos equipos asumen que, dado que utilizan GKE o EKS, el "clúster" es seguro. Recuerda: el proveedor de la nube asegura la infraestructura (el hardware, el hipervisor, la disponibilidad del plano de control), pero aseguras la configuración. Si implementas un pod como root, AWS no te va a detener.

2. Dependencia excesiva de los "Security Groups"

Los Security Groups (firewalls) son excelentes para bloquear el tráfico externo, pero son inútiles para el tráfico interno de pod a pod. Una vez que un paquete está dentro del clúster, el Security Group no lo ve. Debes utilizar Kubernetes Network Policies para la segmentación interna.

3. Ignorar la fase de "Build"

Esperar hasta que la aplicación se implemente para escanearla. Esto es una pesadilla para los desarrolladores. Para cuando les dices "esta imagen es vulnerable", ya han pasado a la siguiente función. Desplaza la seguridad hacia la izquierda. Coloca el escaneo en el pipeline de CI/CD para que el desarrollador reciba el error mientras aún está escribiendo el código.

4. No probar el lado "Humano"

Puedes tener el clúster más seguro del mundo, pero si tu desarrollador principal almacena el cluster-admin kubeconfig en un canal público de Slack, nada de eso importa. La seguridad es una cultura, no solo un conjunto de archivos YAML.

FAQ: Seguridad de Kubernetes y Cloud Pentesting

P: ¿El escaneo automatizado es lo mismo que el pentesting?

R: No. El escaneo automatizado es como un detector de humo: te dice que hay un problema basándose en patrones conocidos. Penetration Testing es como un jefe de bomberos: un humano (o una simulación avanzada) que observa la estructura del edificio, comprueba las salidas y encuentra el único punto donde una chispa podría iniciar un incendio. Necesitas ambos.

P: ¿Con qué frecuencia debo realizar un Penetration Test en mis clústeres de Kubernetes?

R: Como mínimo, una vez al año. Sin embargo, para las empresas con ciclos de lanzamiento rápidos, las pruebas trimestrales o las pruebas "basadas en eventos" (después de un cambio importante en la arquitectura o el lanzamiento de una nueva función) son mejores. La evaluación continua es el estándar de oro.

P: ¿Puede el pentesting bloquear mi clúster de producción?

R: Puede, si se hace mal. Esta es la razón por la que el cloud pentesting profesional generalmente se realiza en un entorno de staging que refleja la producción. Un buen pentester sabe cómo realizar pruebas cuidadosamente sin derribar tus pods.

P: ¿Qué es más importante: RBAC o Network Policies?

R: Ninguno es "más" importante; resuelven diferentes problemas. RBAC controla quién puede hacer qué (Autorización). Network Policies controlan quién puede hablar con quién (Comunicación). Si tienes un excelente RBAC pero no tienes Network Policies, un pod comprometido aún puede rastrear el tráfico o atacar otros servicios.

P: ¿Penetrify es compatible con Kubernetes administrados como EKS o GKE?

R: Sí. Debido a que Penetrify es nativo de la nube, está diseñado para integrarse con los principales proveedores de la nube. Se centra en las vulnerabilidades que existen independientemente de si el clúster es autoadministrado o administrado.

Conclusiones prácticas: Tu plan de seguridad de 30 días

Si te sientes abrumado, no intentes hacerlo todo a la vez. Divídelo en una hoja de ruta mensual.

Semana 1: Visibilidad y líneas de base

  • Ejecuta una auditoría de configuración (intenta usar kube-bench o polaris).
  • Enumera cada ClusterRole y mira quién tiene acceso de cluster-admin.
  • Habilita el registro de auditoría para tu plano de control.

Semana 2: Reducción de la superficie de ataque

  • Establece automountServiceAccountToken: false para todos los pods que no necesiten acceso a la API.
  • Implementa una política de red de "Denegación predeterminada" en tu espacio de nombres de desarrollo.
  • Actualiza todas tus imágenes base a las últimas versiones estables.

Semana 3: Refuerzo del acceso

  • Reemplaza cualquier contenedor "privileged: true" con capacidades específicas.
  • Mueve tus contraseñas confidenciales de K8s Secrets a un administrador de secretos.
  • Configura una política de Pod Security Admission para bloquear los contenedores root.

Semana 4: Validación y pruebas

  • Aquí es donde dejas de adivinar y empiezas a saber. Programa un cloud pentest a través de Penetrify para ver si los cambios que realizaste en las Semanas 1-3 realmente funcionaron.
  • Utiliza los resultados de ese Penetration Test para crear un backlog de correcciones de seguridad para el próximo mes.

Reflexiones finales

Kubernetes es una bestia. Nos da un poder increíble, pero ese poder conlleva mucha complejidad. El mayor error que puedes cometer es asumir que "complejo" significa "seguro". En realidad, la complejidad es a menudo donde se esconden las vulnerabilidades.

Asegurar tu clúster no es un proyecto único; es un hábito. Se trata de pasar de una mentalidad de "Espero que estemos seguros" a "Sé que estamos seguros porque he intentado romperlo". Al combinar un RBAC estricto, políticas de red ajustadas y cloud pentesting regulares, puedes disfrutar de los beneficios de Kubernetes sin quedarte despierto por la noche preguntándote si un solo archivo YAML mal configurado va a arruinar tu negocio.

Si estás listo para dejar de adivinar, es hora de poner tu infraestructura a prueba. Ya seas un equipo pequeño o una empresa enorme, el objetivo es el mismo: encontrar los agujeros antes de que lo hagan los malos. Una plataforma como Penetrify hace que este proceso sea manejable, escalable y, lo que es más importante, práctico. No esperes a una brecha para descubrir dónde están tus debilidades. Anticípate hoy mismo.

Volver al blog