GitHub Actions Sin Fijar a SHA
Usar GitHub Actions referenciados por tags mutables como @main o @v3 en lugar de SHAs de commit completos significa que una action comprometida o secuestrada puede inyectar codigo malicioso en tu pipeline CI sin ningun cambio en tu archivo workflow.
Cómo Funciona
Las GitHub Actions se referencian por owner/repo@ref donde ref puede ser una rama, tag o SHA de commit. Cuando usas actions/checkout@v3, GitHub resuelve 'v3' a cualquier commit al que ese tag apunte actualmente. Si el repositorio de la action es comprometido, el atacante actualiza el tag para apuntar a un commit malicioso. Tu siguiente ejecucion de workflow jala el codigo del atacante automaticamente. Como las actions corren con los secrets de tu repositorio y el GITHUB_TOKEN, el atacante puede robar secrets, modificar codigo o publicar paquetes maliciosos. Fijar a un SHA de commit completo (actions/checkout@abc123...) asegura que siempre ejecutes exactamente el codigo que revisaste, y cualquier manipulacion de tags no tiene efecto.
# BAD: actions referenced by mutable tags
name: CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4 # mutable tag
- uses: actions/setup-node@v4 # mutable tag
- uses: some-org/deploy@main # mutable branch!
- uses: docker/build-push-action@latest # worst: 'latest' tag# GOOD: actions pinned to full commit SHAs
name: CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65 # v4.0.0
- uses: some-org/deploy@a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0
- uses: docker/build-push-action@4a13e500e55cf31b7a5d59a38ab2040ab0f42f56 # v5.1.0
# Use dependabot or renovate to auto-update SHA pinsEjemplo Real
En el ataque a la cadena de suministro de ua-parser-js de 2022, la cuenta del mantenedor del paquete npm fue comprometida y se publicaron versiones maliciosas. El mismo vector de ataque aplica a GitHub Actions: en 2023, la action tj-actions/changed-files fue comprometida cuando un atacante hizo force-push de un commit malicioso y movio el tag de version. Los workflows fijados al tag mutable ejecutaron el codigo del atacante, filtrando secrets de CI.
Cómo Prevenirlo
- Fija todas las GitHub Actions de terceros a SHAs de commit completos de 40 caracteres, con el tag de version en un comentario como referencia
- Usa Dependabot o Renovate para proponer automaticamente actualizaciones de SHA pins cuando se lancen nuevas versiones
- Solo usa actions de creadores verificados (actions/*, github/* u organizaciones en las que confies explicitamente)
- Habilita la lista de permitidos de actions a nivel de organizacion en GitHub para restringir que actions pueden ejecutarse
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
Inyeccion de Script en GitHub Actions
criticalUsar datos de eventos no confiables como github.event.issue.title directamente dentro de bloques run: permite a los atacantes inyectar comandos shell arbitrarios en tu pipeline CI creando titulos de issues, cuerpos de PR o mensajes de commit maliciosos.
Secretos Filtrados en Logs de CI
highImprimir o hacer echo de variables de entorno que contienen secretos en scripts de CI los expone en los logs de build, que frecuentemente son accesibles para todos los colaboradores del repositorio y a veces visibles publicamente en proyectos open-source.
Riesgos de Runners Self-Hosted
highUsar runners self-hosted de GitHub Actions con pull_request_target o workflows de forks publicos permite que codigo no confiable de contribuidores externos se ejecute en tu infraestructura con acceso a secrets, estado persistido y la red del host.
Permisos de Workflow Excesivos
mediumLos workflows de GitHub Actions con permissions: write-all o sin bloque de permissions explicito otorgan al GITHUB_TOKEN acceso excesivo, permitiendo que un paso comprometido modifique codigo, cree releases, escriba paquetes o cambie configuraciones del repositorio.