Gh Actions - Context Script Injections

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Información Básica

Ten en cuenta que hay ciertos contextos de github cuyos valores son controlados por el usuario que crea el PR. Si la acción de github utiliza 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 artículo):

  • github.event.comment.body

  • github.event.issue.body

  • github.event.issue.title

  • github.head_ref

  • github.pull_request.*

  • github.*.*.authors.name

  • github.*.*.authors.email

Ten en cuenta que hay fuentes menos obvias de entrada potencialmente no confiable, como los nombres de las ramas y las 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 ejecutar el script de shell, las expresiones dentro de ${{ }} son evaluadas y luego sustituidas por los valores resultantes, lo que puede hacerlo 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 ejecutor.

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Última actualización