Los investigadores de seguridad demostraron un ataque a la cadena de suministro de software que podría haberles permitido acceder al código base de Bazel, una herramienta de código abierto desarrollada por Google para automatizar la creación y prueba de software. El ataque aprovechó las vulnerabilidades en una GitHub Action personalizada utilizada por el proyecto en sus flujos de trabajo de CI/CD, destacando cómo los problemas de seguridad pueden heredarse de dependencias de CI/CD de terceros.
«Descubrimos que un flujo de trabajo de GitHub Actions podría haber sido inyectado por un código malicioso debido a una vulnerabilidad de inyección de comandos en una de las acciones dependientes de Bazel», dijeron investigadores de la firma de seguridad de aplicaciones Cycode en una publicación de blog. “Esta vulnerabilidad afecta directamente la cadena de suministro de software, permitiendo potencialmente que actores maliciosos inserten código dañino en el código base de Bazel, creen una puerta trasera y afecten el entorno de producción de cualquiera que use Bazel. Esta vulnerabilidad podría haber afectado a millones de proyectos y usuarios que usan Bazel, incluidos Kubernetes, Angular, Uber, LinkedIn, Databricks, DropBox, Nvidia, Google y muchos más”.
Las acciones personalizadas de GitHub pueden introducir riesgos de seguridad ocultos
GitHub Actions es un servicio de CI/CD ofrecido por GitHub que permite a los desarrolladores automatizar la creación y prueba de código de software definiendo flujos de trabajo que se ejecutan automáticamente dentro de contenedores en la infraestructura de GitHub o del propio usuario. Este es un servicio popular en el que confían muchos proyectos alojados en GitHub para ejecutar varias pruebas o acciones automatizadas en el código aportado a sus repositorios.
Sin embargo, la funcionalidad ofrecida por GitHub Actions se puede utilizar de forma insegura y los investigadores han destacado múltiples errores de este tipo en el pasado que podrían haber resultado en compromisos en la cadena de suministro de software. En diciembre de 2022, investigadores de la empresa de seguridad Legit Security mostraron cómo los atacantes podría envenenar artefactos binarios que luego se usaría como entrada para los flujos de trabajo de GitHub Action de un proyecto. A principios de este mes, otro equipo de investigadores de Praetorian mostró cómo se pueden explotar los ejecutores de GitHub Actions autohospedados para infiltrarse en la infraestructura de desarrollo de una organización. Del mismo modo, la nueva investigación de Cycode no explota ninguna vulnerabilidad inherente en GitHub Actions en sí, sino más bien en la forma en que algunos proyectos eligen utilizar algunas de sus características sin considerar los riesgos.
Los usuarios definen los flujos de trabajo de GitHub Actions creando archivos YAML dentro del directorio .github/workflows de un repositorio. Estos archivos de flujo de trabajo contienen una serie de trabajos y pasos que deben ejecutarse para lograr una tarea y, a menudo, implican llamar a «acciones» predefinidas. Estas acciones son como pequeños scripts o funciones de código y algunas de ellas son proporcionadas por el propio GitHub mientras que otras son creadas y proporcionadas por terceros. Estas últimas se conocen como acciones personalizadas y permiten un nivel de reutilización de código y dependencias anidadas similar al visto con varios administradores de paquetes como npm para JavaScript o pip para Python.
Así como las vulnerabilidades se pueden heredar de las dependencias de paquetes en npm o pip, las vulnerabilidades transitivas pueden llegar a un flujo de trabajo a partir de acciones de GitHub personalizadas escritas por otras personas. De hecho, es aún peor, porque las GitHub Actions personalizadas pueden ejecutar no solo acciones adicionales sino también paquetes de JavaScript y Python, así como comandos de shell. Éstas se conocen como acciones compuestas.