highCWE-1395OWASP A08:2021

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.

Código Vulnerable
# 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
Código Seguro
# 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 pins

Ejemplo 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

GitHub ActionsNode.jsPythonDocker

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas