Gh Actions - Context Script Injections

Support HackTricks

Información Básica

Note que hay ciertos contextos de github cuyos valores son controlados por el usuario que crea el PR. Si la acción de github está usando esos datos para ejecutar algo, podría llevar a ejecución de código arbitrario. Estos contextos típicamente terminan con body, default_branch, email, head_ref, label, message, name, page_name,ref, y title. Por ejemplo (lista de este escrito):

  • github.event.comment.body

  • github.event.issue.body

  • github.event.issue.title

  • github.head_ref

  • github.pull_request.*

  • github.*.*.authors.name

  • github.*.*.authors.email

Note que aquí hay fuentes menos obvias de entrada potencialmente no confiable, como nombres de ramas y direcciones de correo electrónico, que pueden ser bastante flexibles en términos de su contenido permitido. Por ejemplo, zzz";echo${IFS}"hello";# sería un nombre de rama válido y sería un posible vector de ataque para un repositorio objetivo.

Ejemplo de un ataque de inyección de script

Un ataque de inyección de script puede ocurrir directamente dentro del script en línea de un flujo de trabajo. En el siguiente ejemplo, una acción utiliza una expresión para probar la validez de un título de pull request, pero también añade el riesgo de inyección de script:

- name: Check PR title
run: |
title="${{ github.event.pull_request.title }}"
if [[ $title =~ ^octocat ]]; then
echo "PR title starts with 'octocat'"
exit 0
else
echo "PR title did not start with 'octocat'"
exit 1
fi

Antes de que se ejecute el script de shell, las expresiones dentro de ${{ }} son evaluadas y luego sustituidas por los valores resultantes, lo que puede hacer que sea vulnerable a la inyección de comandos de shell.

Para inyectar comandos en este flujo de trabajo, el atacante podría crear una solicitud de extracción con un título de a"; ls $GITHUB_WORKSPACE"

En este ejemplo, el carácter " se utiliza para interrumpir la declaración title="${{ github.event.pull_request.title }}", permitiendo que se ejecute el comando ls en el runner.

Support HackTricks

Last updated