Demostración en vídeo de este post
Con el paso de los años y la evolución de los equipos de desarrollo, los entornos con soluciones de integración y despliegue continuos son cada vez más frecuentes. No obstante, cuando se habla de DevSecOps es importante valorar los riesgos y las potenciales amenazas a las que se enfrenta el entorno y en este sentido, merece la pena conocer el proyecto Top 10 CI/CD. Se trata de una guía que recuerda al conocido OWASP Top 10, sin embargo en este caso orientado completamente a CI/CD.
En el documento se explican las 10 amenazas más habituales en este tipo de entornos y para cada una de ellas, se encuentra una descripción detallada sobre en qué consiste la amenaza, impacto, recomendaciones y referencias.
A continuación, se describe en qué consiste cada uno de estos defectos para que quede mucho más claro.
CICD-SEC-1: Insufficient Flow Control Mechanisms
Según la guía, se trata de la vulnerabilidad muy frecuente y cuyo impacto puede ser devastador para la seguridad general del entorno. Se produce cuando no se cuenta con mecanismos de control estrictos sobre cada una de las dependencias, librerías o servicios de terceros y mediante la inclusión de elementos maliciosos, un atacante tendría la posibilidad de comprometer el entorno. Este tipo de situación es habitual cuando se le permite a un desarrollador, que puede ser un atacante, subir código, librerías/dependencias o programas al repositorio de fuentes y el entorno de CI/CD confía en estos componentes sin validar su seguridad e integridad.
CICD-SEC-2: Inadequate Identity and Access Management
Tal como su nombre indica, se trata de un problema bastante frecuente en entornos en donde hay una amplia variedad de identidades que se deben gestionar y no se cuenta con sistemas especializados para hacerlo o no están correctamente configurados, como por ejemplo soluciones del tipo IAM. Durante los procesos de integración de software o pases a producción, es necesario contar con cuentas de usuario o identidades con los privilegios necesarios para realizar este tipo de labores tan criticas. En este sentido es de vital importancia contar con modelos y políticas de seguridad que gobiernen los procesos para evitar intrusiones, fugas de información y otros problemas relacionados con la integridad, confidencialidad o disponibilidad.
CICD-SEC-3: Dependency Chain Abuse
En este caso, la guía hace referencia a la gestión de dependencias que se produce en proyectos de software, en donde es posible descargar una librería con código vulnerable o con elementos maliciosos y dicho componente se sube directamente al repositorio de fuentes, pasando por cada una de las etapas del pipeline hasta llegar a un entorno productivo. El motivo por el que este problema es tan frecuente se debe a que los proyectos de software son cada vez más complejos y requieren en ocasiones de cientos de librerías, las cuales a su vez, necesitan de otras para funcionar correctamente. En este escenario es posible que alguna de estas dependencias, ya sean directas o indirectas, sirvan como una vía de acceso a un atacante.
CICD-SEC-4: Poisoned Pipeline Execution (PPE)
Las vulnerabilidades PPE se producen cuando un atacante tiene acceso al pipeline que ejecuta el proceso de construcción del proyecto y tiene la habilidad de incluir comandos o código malicioso como parte de dicho proceso. Este tipo de vulnerabilidades tienen cierta relación con CICD-SEC-2 ya que si el entorno de CI/CD no cuenta con mecanismos de autenticación y autorización bien controlados, un atacante podría encontrar una vía de acceso a los pipelines de construcción y manipularlos con el objetivo de ejecutar rutinas maliciosas. Hay que tener en cuenta que un atacante puede tener acceso al pipeline de forma directa, por ejemplo accediendo con un usuario y contraseña a la plataforma de CI/CD, o de forma indirecta modificando alguno de los ficheros IaC ubicados en el SCM, por ejemplo alterando un fichero Jenkinsfile o algún otro relacionado con Gitlab-CI, Github Actions, Circle-CI, etc.
CICD-SEC-5: Insufficient PBAC (Pipeline-Based Access Controls)
Como se ha mencionado antes en el CICD-SEC-4, los pipelines representan el corazón de un entorno CI/CD y por lo tanto se deben implementar mecanismos de control de acceso robustos, en donde solamente usuarios con los privilegios adecuados puedan crear, modificar o eliminar pipelines. Además, hay que considerar son rutinas que en ocasiones se ejecutan sobre múltiples nodos y pueden tener la capacidad de conectarse con sistemas internos o externos, lo que puede brindarle a un atacante la posibilidad de ejecutar movimientos laterales tanto dentro como fuera del entorno de CI/CD.
La guía incluye 5 puntos más, los cuales explicaré en el siguiente post. Si te ha gustado el artículo o crees que hay algo que se me escapa en estas explicaciones, te invito a que dejes un comentario.
Un saludo y Happy Hack!
Adastra.