Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

El token y los disparadores en GitHub Actions

5 tareas · 40 min · Principiante

Cada ejecución de un flujo de GitHub Actions recibe un token propio, el GITHUB_TOKEN, y se dispara por un evento que decide quién controla lo que corre. Con los cinco archivos de flujo de Mirto Pagos, una empresa ficticia de pagos con el repositorio mirto/pasarela-api, lees el YAML como lo leería un auditor: qué permisos trae cada trabajo, qué los dispara y qué código ejecutan. Todo es lectura de archivos de ejemplo en la consola del navegador; no se ejecuta nada.

0 de 5 · 0%

Objetivo de la sala

Cada ejecución de un flujo de GitHub Actions recibe un token propio, el GITHUB_TOKEN, y se dispara por un evento que decide quién controla lo que corre. Con los cinco archivos de flujo de Mirto Pagos, una empresa ficticia de pagos con el repositorio mirto/pasarela-api, lees el YAML como lo leería un auditor: qué permisos trae cada trabajo, qué los dispara y qué código ejecutan. Todo es lectura de archivos de ejemplo en la consola del navegador; no se ejecuta nada.

El token que GitHub entrega a cada ejecución tiene permisos por alcance: leer el contenido, escribir propuestas, publicar paquetes, pedir una identidad para la nube. Se fijan con la clave permissions, a nivel de flujo o de trabajo. Si el flujo no la declara, el token hereda lo que diga el ajuste por defecto del repositorio o de la organización, que puede ser solo lectura o lectura y escritura.

La recomendación de la documentación oficial es partir de lo mínimo y subir los permisos solo en el trabajo que los necesita. Así, si algo dentro de un trabajo se desvía, el token que hereda es pequeño.

Responde para continuar

¿Cuál es la forma más sana de fijar los permisos del token en un flujo de GitHub Actions?

Ver pista de ayuda

Es el principio de mínimo privilegio aplicado a una credencial que se emite sola en cada ejecución.

Un flujo con el evento pull_request que viene de una bifurcación corre con un token de solo lectura y sin secretos: es lo que le toca a una propuesta de un desconocido. El evento pull_request_target es distinto: corre en el contexto de la rama base, con acceso a los secretos y, según el flujo, con permisos de escritura. Está pensado para tareas como poner una etiqueta o un comentario, que no necesitan el código de quien propone.

El riesgo aparece cuando un flujo con pull_request_target descarga el código de la propuesta y lo ejecuta: entonces el código de un extraño corre con los privilegios de la rama base. La documentación oficial pide evitar este evento si no es necesario.

Abre los cinco flujos de .github/workflows y busca el que reúne las dos cosas.

Responde para continuar

Escribe el nombre (campo name) del flujo que se dispara con pull_request_target, descarga el código de la propuesta y lo ejecuta con un secreto.

Ver pista de ayuda

Mira en cada flujo el evento y, si hay un paso de descarga, el valor de ref. Hay dos flujos con pull_request_target y solo uno ejecuta lo descargado.

Para saber cuánto puede escribir un trabajo no basta con leer el flujo: hay que mirar también el ajuste del repositorio. Un trabajo sin permissions ni en el flujo ni en él mismo recibe el permiso por defecto, y el archivo de ajustes de Mirto Pagos dice cuál es.

Cuenta los trabajos con permiso de escritura efectivo: los que lo declaran y los que lo heredan.

Responde para continuar

Entre los cinco flujos, ¿cuántos trabajos tienen algún permiso con valor write de forma efectiva (incluido id-token), contando el que lo hereda del ajuste por defecto?

Ver pista de ayuda

Lee actions.txt y, flujo por flujo, anota si el permiso está declarado o heredado. Un flujo sin permissions no es de solo lectura si el ajuste dice lo contrario.

En el flujo que publica la imagen aparece id-token: write. Ese permiso no escribe en el repositorio: deja que el trabajo pida a GitHub un token OIDC de vida corta que un proveedor de nube puede aceptar a cambio de un acceso temporal. Es la alternativa a guardar una clave larga como secreto.

Responde para continuar

¿Qué permite el permiso id-token con valor write en un trabajo?

Ver pista de ayuda

Se emite por ejecución y caduca; sirve para identificarse ante un tercero, no para tocar el repositorio.

El flujo de la vista previa ejecuta el código de una propuesta externa con un secreto a mano. La corrección no es añadir una validación al script: es cambiar quién controla lo que corre. La vista previa de una propuesta ajena puede construirse con el evento pull_request, que no entrega secretos a las bifurcaciones; lo que sí necesite un secreto va en un paso posterior, ya sobre código revisado y aprobado.

Responde para continuar

¿Cómo se corrige el flujo que ejecuta código de una propuesta externa con un secreto?

Ver pista de ayuda

Si el código de un extraño corre con los privilegios de la rama base, ningún filtro posterior lo arregla.

Inicia sesión para registrar tus puntos y progreso en el ranking.

Whoami-Labs Pro

Whoami-Labs Pro utiliza cookies

Utilizamos cookies y almacenamiento local para el funcionamiento del sitio, seguridad de sesión y, si lo autorizas, analítica y marketing. Puedes aceptar, rechazar o personalizar. Política de Privacidad