Un tester de penetración obtuvo acceso root a nuestro clúster de Kubernetes en 15 minutos. Esto es lo que explotaron. La cadena de ataque: - Encontró el panel de control de Kubernetes expuesto (nuestro error) - El panel tenía una cuenta de servicio de solo lectura (pensamos que esto era seguro) - La cuenta de servicio podía listar secretos en todos los espacios de nombres - Encontró credenciales de AWS en un secreto - Usó las credenciales de AWS para acceder al perfil de instancia de EC2 - El perfil de instancia tenía acceso completo de administrador de Kubernetes a través de IAM - Usó kubectl para crear un pod privilegiado - Escapó al nodo - Acceso root a todo el clúster Lo que pensamos que hicimos bien: - El panel era de solo lectura - Los secretos estaban cifrados en reposo - Había políticas de red en su lugar - Actualizaciones de seguridad regulares Lo que nos perdimos: - El panel no debería estar expuesto en absoluto - Las cuentas de servicio necesitan el principio de menor privilegio - Los secretos no deberían contener credenciales de AWS (usar IRSA en su lugar) - Las Políticas de Seguridad de Pods no se aplicaron - El acceso al nodo no estaba endurecido La solución tomó 2 semanas: - Se eliminó completamente el panel de control de Kubernetes - Se implementó IRSA para todo el acceso a AWS de los pods - Se aplicaron PSPs/Estándares de Seguridad de Pods estrictos...