{"meta":{"title":"Injeções de script","intro":"Entenda os riscos de segurança associados a injeções de script e fluxos de trabalho do GitHub Actions.","product":"GitHub Actions","breadcrumbs":[{"href":"/pt/actions","title":"GitHub Actions"},{"href":"/pt/actions/concepts","title":"Conceitos"},{"href":"/pt/actions/concepts/security","title":"Segurança"},{"href":"/pt/actions/concepts/security/script-injections","title":"Injeções de script"}],"documentType":"article"},"body":"# Injeções de script\n\nEntenda os riscos de segurança associados a injeções de script e fluxos de trabalho do GitHub Actions.\n\n## Entendendo o risco de injeções de script\n\nAo criar fluxos de trabalho, [ações personalizadas](/pt/actions/creating-actions/about-custom-actions) e [ações compostas](/pt/actions/creating-actions/creating-a-composite-action), você sempre deve considerar se o seu código pode executar entradas não confiáveis de invasores. Isso pode ocorrer quando um invasor adiciona comandos maliciosos e scripts em um contexto. Quando seu fluxo de trabalho é executado, essas strings podem ser interpretadas como código, que então é executado no runner.\n\nOs invasores podem adicionar um conteúdo próprio mal-intencionado ao [contexto `github`](/pt/actions/learn-github-actions/contexts#github-context), que deve ser tratado como uma entrada potencialmente não confiável. Esses contextos geralmente terminam com `body`, `default_branch`, `email`, `head_ref`, `label`, `message`, `name`, `page_name`,`ref` e `title`. Por exemplo: `github.event.issue.title` ou `github.event.pull_request.body`.\n\nVocê deve garantir que esses valores não fluam diretamente para fluxos de trabalho, ações, chamadas de API ou para qualquer outro lugar onde possam ser interpretados como código executável. Ao adotar a mesma postura defensiva de programação que você adotaria para qualquer outro código privilegiado do aplicativo, você pode ajudar a melhorar a segurança do seu uso de GitHub Actions. Para obter mais informações sobre algumas das etapas que um invasor pode executar, confira [Referência de uso seguro](/pt/actions/security-guides/security-hardening-for-github-actions#potential-impact-of-a-compromised-runner).\n\nAlém disso, há outras fontes menos óbvias de entrada potencialmente não confiável como, por exemplo, nomes de branches e endereços de e-mail, que podem ser bastante flexíveis em termos de conteúdo permitido. Por exemplo, `zzz\";echo${IFS}\"hello\";#` será um nome de branch válido e um possível vetor de ataque em um repositório de destino.\n\nAs seções a seguir explicam como você pode ajudar a mitigar o risco de injeção de scripts.\n\n### Exemplo de um ataque de injeção de script\n\nUm ataque de injeção de script pode ocorrer diretamente dentro do script embutido de um fluxo de trabalho. 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:\n\n```yaml\n      - name: Check PR title\n        run: |\n          title=\"${{ github.event.pull_request.title }}\"\n          if [[ $title =~ ^octocat ]]; then\n          echo \"PR title starts with 'octocat'\"\n          exit 0\n          else\n          echo \"PR title did not start with 'octocat'\"\n          exit 1\n          fi\n```\n\nEste exemplo é vulnerável à injeção do script porque o comando `run` é executado dentro de um script de shell temporário no executor. Antes que o script de shell seja executado, as expressões dentro de `${{ }}` são avaliadas e substituídas pelos valores resultantes, o que pode torná-lo vulnerável à injeção de comando do shell.\n\nPara injetar comandos neste fluxo de trabalho, o invasor pode criar uma solicitação de pull com o título `a\"; ls $GITHUB_WORKSPACE\"`:\n\n![Captura de tela do título de uma solicitação de pull no modo de edição. Um novo título foi inserido no campo: a\"; ls $GITHUB\\_WORKSPACE\".](/assets/images/help/actions/example-script-injection-pr-title.png)\n\nNeste exemplo, o caractere `\"` é usado para interromper a instrução `title=\"${{ github.event.pull_request.title }}\"`, permitindo que o comando `ls` seja executado no executor. Você poderá ver a saída do comando `ls` no log:\n\n```shell\nRun title=\"a\"; ls $GITHUB_WORKSPACE\"\"\nREADME.md\ncode.yml\nexample.js\n```\n\nPara obter as práticas recomendadas para manter a segurança dos runners, confira [Referência de uso seguro](/pt/actions/reference/secure-use-reference#good-practices-for-mitigating-script-injection-attacks)."}