Gh Actions - Context Script Injections
Informações Básicas
Note que existem certos contextos do github cujos valores são controlados pelo usuário que cria o PR. Se a ação do github estiver usando esses dados para executar algo, isso pode levar a execução arbitrária de código. Esses contextos geralmente terminam com body
, default_branch
, email
, head_ref
, label
, message
, name
, page_name
,ref
e title
. Por exemplo (lista deste relato):
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 há fontes menos óbvias de entrada potencialmente não confiável, como nomes de branches e endereços de email, que podem ser bastante flexíveis em termos de conteúdo permitido. Por exemplo, zzz";echo${IFS}"hello";#
seria um nome de branch válido e seria um possível vetor de ataque para um repositório alvo.
Exemplo de um ataque de injeção de script
Um ataque de injeção de script pode ocorrer diretamente dentro do script inline de um workflow. No exemplo a seguir, uma ação usa uma expressão para testar a validade de um título de pull request, mas também adiciona o risco de injeção de script:
Antes de o script shell ser executado, as expressões dentro de ${{ }}
são avaliadas e substituídas pelos valores resultantes, o que pode torná-lo vulnerável a injeção de comandos shell.
Para injetar comandos neste workflow, o atacante poderia criar um pull request com um título de a"; ls $GITHUB_WORKSPACE"
Neste exemplo, o caractere "
é usado para interromper a declaração title=
"${{ github.event.pull_request.title }}"
, permitindo que o comando ls
seja executado no runner.
Last updated