Una investigación reciente identificó una vulnerabilidad significativa en la configuración de workflows de GitHub Actions utilizados por múltiples repositorios muy conocidos.
Riesgos asociados a la vulnerabilidad
Entre los repositorios afectados se incluyen MITRE y Splunk. La principal amenaza surge del uso inadecuado del evento pull_request_target. El evento pull_request_target permite a las pull requests de colaboradores externos acceder a los secretos del repositorio.
Esta práctica puede facilitar ataques de cadena de suministro y el robo de credenciales. El uso combinado del evento pull_request_target con un checkout de código no confiable permite que los workflows se ejecuten con permisos de la rama principal, pero compilen código proveniente de forks atacantes.
El acceso al token GITHUB_TOKEN con permisos de escritura puede permitir que el payload modifique el repositorio, suba artefactos infectados o publique nuevas versiones. Se puede realizar la exfiltración de secretos mediante comandos simples como echo $SECRET | curl ...
Esta técnica expone API keys, credenciales de despliegue y tokens de publicación. Los analistas demostraron esta técnica en proyectos como el MITRE Cyber Analytics Repository y Splunk Security Content.
Riesgos potenciales del compromiso
Lograron la exfiltración de tokens con privilegios completos en segundos. El compromiso total del repositorio puede permitir modificaciones de código, releases y documentación. Los ataques aguas abajo pueden afectar a organizaciones que consumen estos paquetes como dependencias.
La facturación ilícita es otro riesgo posible si las claves robadas otorgan acceso a infraestructuras externas en servicios cloud.
Mitigaciones recomendadas
- Migrar al evento pull_request en lugar de pull_request_target para evitar que las pull requests de forks externos tengan acceso a los secretos del repositorio.
- Aplicar el principio de mínimos privilegios al GITHUB_TOKEN, configurando permissions con solo los ámbitos estrictamente necesarios (por ejemplo, contents: read).
- Bloquear la ejecución de código procedente de forks añadiendo una condición en el workflow (if: github.event.pull_request.head.repo.fork == false) para impedir que Jobs privilegiados se lancen sobre código no confiable.
- Referenciar acciones mediante etiquetas o SHA inmutables (por ejemplo, actions/checkout@v4.1.2) y firmar las acciones propias para garantizar la integridad de la cadena de suministro.
- Auditar periódicamente los archivos de workflow con herramientas de seguridad de CI/CD como Scorecard, GHA-Guard o Sysdig zizmor, a fin de detectar permisos excesivos, uso de eventos riesgosos y secretos expuestos.