Como Prevenir Ataques de Injeção em GitHub Actions: Guia de Detecção e Mitigação
Saiba como detectar e mitigar ataques de injeção em workflows do GitHub Actions, explorando vetores de ataque, impactos e estratégias de segurança recomendadas por especialistas.
Como Prevenir Ataques de Injeção em GitHub Actions
Ataques de injeção em workflows do GitHub Actions estão entre as vulnerabilidades de segurança mais prevalentes em repositórios GitHub, de acordo com o relatório Octoverse 2024 da GitHub. Esses ataques exploram entradas não confiáveis em workflows, permitindo que agentes mal-intencionados executem comandos maliciosos com permissões no nível do workflow. Profissionais de segurança podem mitigar esses riscos utilizando ferramentas integradas do GitHub, práticas de codificação segura e varreduras automatizadas.
Detalhes Técnicos das Injeções em Workflows
Ataques de injeção em GitHub Actions ocorrem quando um invasor submete uma entrada maliciosa—como o título de uma issue ou o nome de uma branch—que é posteriormente executada por um workflow. A vulnerabilidade surge da sintaxe ${{}}, que expande entradas não confiáveis durante o pré-processamento, podendo alterar o comportamento do workflow. Por exemplo:
- name: print title
run: echo "${{ github.event.issue.title }}"
Um invasor poderia criar um título de issue como `touch pwned.txt`, que seria executado como um comando quando o workflow fosse executado. Como os workflows frequentemente herdam permissões elevadas, isso pode levar a acesso não autorizado ou exfiltração de dados.
Principais Vetores de Ataque
- Expansão de Entrada Não Confiável: Uso direto de
${{}}em comandosrun. - Escalonamento de Privilégios: Workflows executados com permissões excessivas (por exemplo, acesso
writeou exposição de segredos). - Gatilho
pull_request_target: Contorna restrições de segurança padrão, concedendo a PRs de forks acesso a segredos e permissões de escrita.
Análise de Impacto
Injeções bem-sucedidas em workflows podem resultar em:
- Execução de Código: Comandos maliciosos executados com permissões do workflow.
- Vazamentos de Dados: Exposição de segredos do repositório ou arquivos sensíveis.
- Comprometimento do Repositório: Modificações não autorizadas em código ou pipelines de CI/CD.
O risco se estende além das branches main—invasores podem atacar qualquer branch pública com workflows vulneráveis.
Estratégias de Mitigação
1. Variáveis de Ambiente para Entradas Não Confiáveis
Evite a expansão direta de entradas não confiáveis em comandos run. Em vez disso, passe os dados por meio de variáveis de ambiente:
- name: print title
env:
TITLE: ${{ github.event.issue.title }}
run: echo "$TITLE"
Embora isso não sanitize a entrada, limita a superfície de ataque ao impedir a injeção de comandos.
2. Princípio do Menor Privilégio
Restrinja as permissões do workflow utilizando a chave permissions para o GITHUB_TOKEN:
permissions:
contents: read
issues: write
Adote acesso read-only por padrão, a menos que permissões de escrita sejam explicitamente necessárias.
3. Evite pull_request_target
Utilize pull_request em vez de pull_request_target para bloquear PRs de forks de acessarem segredos ou permissões de escrita. Se o uso de pull_request_target for inevitável, audite os workflows em busca de riscos de injeção e restrinja permissões.
4. Varredura com CodeQL para Workflows
O CodeQL da GitHub agora oferece suporte à varredura automatizada de workflows do GitHub Actions. Ative-o por meio de:
- Configuração Padrão: Varredura automática de branches protegidas.
- Configuração Avançada: Adicione
actionsàs linguagens-alvo no arquivo de configuração do CodeQL.
O rastreamento de taint do CodeQL identifica fluxos de dados não confiáveis, revelando riscos sutis de injeção.
Recomendações
- Varredura em Todas as Branches: Vulnerabilidades em branches de funcionalidades podem ser exploradas mesmo que a
mainesteja segura. - Combine Ferramentas com Revisão Manual: Nenhuma ferramenta é 100% eficaz—mantenha uma mentalidade de segurança em primeiro lugar.
- Eduque as Equipes: Compartilhe a série de segurança em quatro partes da GitHub sobre o endurecimento de workflows.
Próximos Passos
Ative a varredura de código com CodeQL em seus repositórios para detectar injeções em workflows de forma proativa. Para configurações avançadas, inclua actions como linguagem-alvo no seu setup do CodeQL.
Para mais detalhes, consulte a documentação de segurança de workflows da GitHub.