Gh Actions - Context Script Injections
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:
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.
Última actualización