GitHub ha lanzado archivos de bloqueo de flujo de trabajo para mitigar ataques de cadena de suministro en los que un atacante mueve una etiqueta de versión previamente segura a un commit malicioso. Esta nueva función permite a los desarrolladores mantener la legibilidad de las etiquetas de versión (como `v7.0.1`) en sus archivos de configuración, mientras el sistema aplica automáticamente el hash de commit exacto asociado con esa etiqueta en el momento del bloqueo.
El riesgo de las etiquetas mutables
En las configuraciones estándar de GitHub Actions, los desarrolladores suelen usar etiquetas para referenciar acciones. Sin embargo, debido a que las etiquetas son mutables, puede ocurrir un ataque de cadena de suministro si un atacante apunta una etiqueta de confianza a un nuevo commit malicioso. Para evitar esto, la mejor práctica anterior era anclar las acciones directamente a un SHA completo, lo cual es menos legible para los humanos y más difícil de gestionar manualmente.
“Los archivos de bloqueo te permiten mantener referencias de etiquetas y ramas legibles en tus flujos de trabajo mientras ejecutas los commits exactos que bloqueaste, incluso si esas referencias se mueven.”
— GitHub Actions workflow lockfiles are generally available - GitHub Changelog
Cómo funciona el mecanismo de archivo de bloqueo
El nuevo sistema de archivos de bloqueo cierra la brecha entre la legibilidad y la seguridad. Al usar la extensión `gh actions-lock`, un desarrollador puede ejecutar un comando que escanea el flujo de trabajo y genera un archivo `.github/workflows/actions.lock` legible por máquina. Este archivo mapea las etiquetas legibles por humanos utilizadas en el archivo YAML a los hashes de commit específicos que representan.

Esta imagen demuestra la aplicación práctica de la herramienta gh actions-lock mencionada en la sección de mecanismo.
Cuando se ejecuta un flujo de trabajo, GitHub Actions verifica el archivo de bloqueo. Si una dependencia está listada, el ejecutor ejecuta el commit registrado en lugar de lo que sea que la etiqueta actual apunte. Esto garantiza que el código que se está ejecutando sea exactamente el que fue verificado durante el proceso de bloqueo.
Automatización y verificación
Para mantener estos bloqueos a lo largo del tiempo, GitHub ha integrado soporte para Renovate y Dependabot. Cuando estas herramientas abren un pull request para actualizar una versión, regeneran automáticamente la entrada correspondiente en el archivo de bloqueo. Esto permite actualizaciones de dependencias automatizadas sin romper las garantías de seguridad del bloqueo.
GitHub también recomienda verificar el archivo de bloqueo dentro del pipeline de CI. Los desarrolladores pueden usar un trabajo dedicado para ejecutar `gh actions-lock --verify`, lo que asegura que el archivo de bloqueo esté en sincronía con la configuración del flujo de trabajo y no haya sido corrompido o manipulado manualmente.
Limitaciones actuales y compensaciones
Si bien los archivos de bloqueo proporcionan una capa de seguridad significativa, no determinan si una dependencia es inherentemente 'segura'; solo aseguran que la dependencia no haya cambiado desde que fue bloqueada. Se sigue alentando a los usuarios a revisar las dependencias antes de incluirlas en un archivo de bloqueo.
Actualmente existen limitaciones técnicas con respecto a flujos de trabajo complejos. Los archivos de bloqueo no admiten el bloqueo directo de flujos de trabajo reutilizables o acciones compuestas. Las acciones compuestas solo se bloquean de forma transitiva a través de sus sitios de llamada, lo que significa que un llamador individual permanece seguro, pero la acción compuesta en sí misma permanece sin bloquear para otros posibles llamadores.
Qué dicen los lectores de Hacker News
- Nota técnica: Un comentarista, que es mantenedor de un proyecto relacionado, señaló que la implementación actual del archivo de bloqueo tiene limitaciones, como no bloquear directamente flujos de trabajo reutilizables o acciones compuestas. comentario ↗
- Escéptico: Varios comentaristas expresaron su preocupación de que los archivos de bloqueo podrían no prevenir comportamientos maliciosos si la lógica interna de una acción extrae dependencias externas o ejecuta comandos de shell arbitrarios. comentario ↗
- Alternativa: Un usuario sugirió que, en lugar de importar acciones externas, los desarrolladores podrían copiar y pegar los scripts necesarios directamente en su configuración para mantener el control total. comentario ↗
Resumen de opiniones del hilo de Hacker News; no son hechos verificados. Leer el debate completo ↗